@voxgig/sdkgen 4.8.3 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/package.json +1 -1
  3. package/project/.sdk/model/target/zig.aon +9 -0
  4. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  5. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  6. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  7. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  8. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  9. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  10. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  11. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  12. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  13. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  14. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  15. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  16. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  17. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  18. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  19. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  20. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  21. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  22. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +2 -2
  23. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +2 -2
  24. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +2 -2
  25. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  26. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  27. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  28. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  29. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  30. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  31. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  32. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  33. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  34. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  35. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  36. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  37. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  38. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  39. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  40. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  41. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  42. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  43. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
  44. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  45. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  46. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  47. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  48. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  49. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
  50. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
  51. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
  52. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  53. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  54. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  55. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
  56. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
  57. package/project/.sdk/tm/go/test/omni/omni.go +8 -3
  58. package/project/.sdk/tm/go/test/omni/util.go +25 -4
  59. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  60. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  61. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  62. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  63. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  64. package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
  65. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  66. package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
  67. package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
  68. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  69. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  70. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  71. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  72. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +2 -2
  73. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  74. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  75. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  76. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  77. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  78. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  79. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  80. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  81. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  82. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  83. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  84. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  85. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  86. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  87. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  88. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  89. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  90. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  91. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  92. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  93. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  94. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  95. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  96. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  97. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  98. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  99. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  100. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  101. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +3 -1
  102. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  103. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
  104. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  105. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  106. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  107. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  108. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
  109. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  110. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
  111. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  112. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  113. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  114. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  115. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
  116. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  117. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  118. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
  119. package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
  120. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  121. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  122. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  123. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  124. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  125. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  126. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  127. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  128. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  129. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  130. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  131. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  132. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  133. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  134. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  135. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  136. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  137. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  138. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  139. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  140. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  141. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  142. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  143. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  144. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  145. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  146. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  147. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  148. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  149. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  150. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  151. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  152. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  153. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  154. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  155. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  156. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  157. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  158. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  159. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  160. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  161. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  162. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  163. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  164. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  165. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  166. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  167. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  168. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  169. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  170. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
  171. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  172. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  173. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  174. package/project/.sdk/tm/zig/Makefile +15 -1
  175. package/project/.sdk/tm/zig/build.zig +23 -5
  176. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  177. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  178. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  179. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  180. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  181. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  182. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  183. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  184. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  185. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  186. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  187. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  188. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  189. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  190. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  191. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  192. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  193. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  194. package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
  195. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  196. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  197. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  198. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  199. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  200. package/project/sdkgen-package.json +1 -1
  201. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
@@ -0,0 +1,284 @@
1
+ // ProjectName SDK omni runner smoke test.
2
+ //
3
+ // Smoke tests for the vendored omni ENGINE itself. A runner that cannot
4
+ // FAIL a bad entry turns every corpus suite vacuously green, and a green
5
+ // suite that no longer executes the corpus looks exactly like a passing
6
+ // one - so the failure paths are pinned here, not just the happy one.
7
+ // (Zig peer of ts/test/omni.test.ts, go/test/omnismoke_test.go and
8
+ // lua/test/omni_smoke_test.lua.)
9
+ //
10
+ // The spec is built in memory in omni's own value model, so nothing here
11
+ // depends on the compiled corpus.
12
+
13
+ const std = @import("std");
14
+ const testing = std.testing;
15
+
16
+ const omni = @import("omni");
17
+ const R = @import("omniresolver.zig");
18
+ const vs = @import("voxgig-struct");
19
+
20
+ const JsonValue = vs.JsonValue;
21
+
22
+ // A minimal in-memory spec: no fixture file, no OMNI block (lenient
23
+ // version 0, like the shared corpus).
24
+ fn makespec(alloc: std.mem.Allocator) !omni.Json {
25
+ const basic = try omni.jmap(alloc, &.{
26
+ .{ "set", try omni.jlist(alloc, &.{
27
+ try omni.jmap(alloc, &.{ .{ "in", omni.jnum(1) }, .{ "out", omni.jnum(2) } }),
28
+ try omni.jmap(alloc, &.{ .{ "in", omni.jnum(41) }, .{ "out", omni.jnum(42) } }),
29
+ }) },
30
+ });
31
+
32
+ const bad = try omni.jmap(alloc, &.{
33
+ .{ "set", try omni.jlist(alloc, &.{
34
+ try omni.jmap(alloc, &.{ .{ "in", omni.jnum(1) }, .{ "out", omni.jnum(999) } }),
35
+ }) },
36
+ });
37
+
38
+ const err = try omni.jmap(alloc, &.{
39
+ .{ "set", try omni.jlist(alloc, &.{
40
+ try omni.jmap(alloc, &.{ .{ "in", omni.jnum(0) }, .{ "err", omni.jstr("zero refused") } }),
41
+ }) },
42
+ });
43
+
44
+ const mutate = try omni.jmap(alloc, &.{
45
+ .{ "set", try omni.jlist(alloc, &.{
46
+ try omni.jmap(alloc, &.{
47
+ .{ "in", try omni.jmap(alloc, &.{.{ "n", omni.jnum(1) }}) },
48
+ .{ "match", try omni.jmap(alloc, &.{
49
+ .{ "args", try omni.jmap(alloc, &.{
50
+ .{ "0", try omni.jmap(alloc, &.{.{ "n", omni.jnum(9) }}) },
51
+ }) },
52
+ }) },
53
+ .{ "out", omni.jnum(9) },
54
+ }),
55
+ }) },
56
+ });
57
+
58
+ const empty = try omni.jmap(alloc, &.{.{ "set", try omni.jlist(alloc, &.{}) }});
59
+
60
+ // An `args` entry whose first argument is a MAP - the one shape the
61
+ // resolver contextifies - and which FAILS. See the test below.
62
+ const ctxfail = try omni.jmap(alloc, &.{
63
+ .{ "set", try omni.jlist(alloc, &.{
64
+ try omni.jmap(alloc, &.{
65
+ .{ "args", try omni.jlist(alloc, &.{
66
+ try omni.jmap(alloc, &.{
67
+ .{ "alpha", omni.jstr("one") },
68
+ .{ "beta", omni.jstr("two") },
69
+ }),
70
+ omni.jstr("tag"),
71
+ }) },
72
+ .{ "out", omni.jnum(999) },
73
+ }),
74
+ }) },
75
+ });
76
+
77
+ return omni.jmap(alloc, &.{
78
+ .{ "smoke", try omni.jmap(alloc, &.{
79
+ .{ "basic", basic },
80
+ .{ "bad", bad },
81
+ .{ "err", err },
82
+ .{ "mutate", mutate },
83
+ .{ "empty", empty },
84
+ .{ "ctxfail", ctxfail },
85
+ }) },
86
+ });
87
+ }
88
+
89
+ // +1, refusing zero. The corpus numbers arrive as floats through
90
+ // std.json, so answer in the same shape.
91
+ fn inc(_: std.mem.Allocator, val: JsonValue, errout: *?[]const u8) JsonValue {
92
+ const n: f64 = switch (val) {
93
+ .integer => |i| @floatFromInt(i),
94
+ .float => |f| f,
95
+ else => {
96
+ errout.* = "smoke: not a number";
97
+ return .null;
98
+ },
99
+ };
100
+ if (0 == n) {
101
+ errout.* = "smoke: zero refused";
102
+ return .null;
103
+ }
104
+ return JsonValue{ .float = n + 1 };
105
+ }
106
+
107
+ // The identity, which never raises the error the `err` group expects.
108
+ fn same(_: std.mem.Allocator, val: JsonValue, _: *?[]const u8) JsonValue {
109
+ return val;
110
+ }
111
+
112
+ // MUTATES its argument, and answers the new value: the `match: {args: ...}`
113
+ // path, which the retired runner could not check at all.
114
+ fn bump(_: std.mem.Allocator, val: JsonValue, errout: *?[]const u8) JsonValue {
115
+ if (val != .object) {
116
+ errout.* = "smoke: not a map";
117
+ return .null;
118
+ }
119
+ val.object.put("n", JsonValue{ .float = 9 }) catch {
120
+ errout.* = "smoke: put failed";
121
+ return .null;
122
+ };
123
+ return JsonValue{ .float = 9 };
124
+ }
125
+
126
+ // A ctx-shaped subject that answers a constant and publishes nothing: it
127
+ // exists to make an entry FAIL, so the report path can be inspected.
128
+ fn constant(
129
+ _: std.mem.Allocator,
130
+ _: []const omni.Json,
131
+ _: *?omni.Json,
132
+ _: *?[]const u8,
133
+ ) anyerror!omni.Json {
134
+ return omni.jnum(7);
135
+ }
136
+
137
+ // The in-memory spec outlives the runner, so it is built in the test's own
138
+ // arena while the runner keeps the leak-checked testing allocator.
139
+ fn arenapack(arena: *std.heap.ArenaAllocator) !R.Runner {
140
+ var runner = try R.makeRunnerSpec(
141
+ testing.allocator,
142
+ try makespec(arena.allocator()),
143
+ "smoke",
144
+ );
145
+ runner.quiet = true;
146
+ return runner;
147
+ }
148
+
149
+ test "omni smoke: a correct subject passes" {
150
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
151
+ defer arena.deinit();
152
+
153
+ var runner = try arenapack(&arena);
154
+ defer runner.deinit();
155
+
156
+ try runner.runseterr(runner.set("basic"), .{}, inc);
157
+ }
158
+
159
+ test "omni smoke: a wrong result FAILS, and says so" {
160
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
161
+ defer arena.deinit();
162
+
163
+ var runner = try arenapack(&arena);
164
+ defer runner.deinit();
165
+
166
+ try testing.expectError(
167
+ error.CorpusFailure,
168
+ runner.runseterr(runner.set("bad"), .{}, inc),
169
+ );
170
+ try testing.expect(null != runner.failure);
171
+ try testing.expect(null != std.mem.indexOf(u8, runner.failure.?, "result mismatch"));
172
+ }
173
+
174
+ test "omni smoke: an expected error is matched" {
175
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
176
+ defer arena.deinit();
177
+
178
+ var runner = try arenapack(&arena);
179
+ defer runner.deinit();
180
+
181
+ try runner.runseterr(runner.set("err"), .{}, inc);
182
+ }
183
+
184
+ test "omni smoke: an expected error that does NOT occur FAILS" {
185
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
186
+ defer arena.deinit();
187
+
188
+ var runner = try arenapack(&arena);
189
+ defer runner.deinit();
190
+
191
+ try testing.expectError(
192
+ error.CorpusFailure,
193
+ runner.runseterr(runner.set("err"), .{}, same),
194
+ );
195
+ try testing.expect(null != runner.failure);
196
+ try testing.expect(null != std.mem.indexOf(u8, runner.failure.?, "expected error did not occur"));
197
+ }
198
+
199
+ test "omni smoke: match on a mutated argument is checked" {
200
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
201
+ defer arena.deinit();
202
+
203
+ var runner = try arenapack(&arena);
204
+ defer runner.deinit();
205
+
206
+ // The subject that mutates satisfies `match: {args: {0: {n: 9}}}`.
207
+ try runner.runseterr(runner.set("mutate"), .{}, bump);
208
+
209
+ // One that does not, fails it - so the write-back is load-bearing, not
210
+ // decorative.
211
+ var second = try arenapack(&arena);
212
+ defer second.deinit();
213
+ try testing.expectError(
214
+ error.CorpusFailure,
215
+ second.runseterr(second.set("mutate"), .{}, same),
216
+ );
217
+ try testing.expect(null != second.failure);
218
+ }
219
+
220
+ test "omni smoke: a failing CONTEXTIFIED entry reports, args and all" {
221
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
222
+ defer arena.deinit();
223
+
224
+ var runner = try arenapack(&arena);
225
+ defer runner.deinit();
226
+
227
+ // omni contextifies `args[0]` when it is a map, and keeps the AUTHORED
228
+ // `args` list to stringify into the failure report. A contextify that
229
+ // grew that map in place left the report reading the pre-growth entries
230
+ // buffer, which the arena had already handed out again - so a failing
231
+ // entry aborted the binary with a general protection fault instead of
232
+ // naming what differed. Every corpus group of `args` shape goes through
233
+ // this path, and none of them exercise it until they are already red.
234
+ try testing.expectError(
235
+ error.CorpusFailure,
236
+ runner.runsetctx(runner.set("ctxfail"), .{}, constant),
237
+ );
238
+ try testing.expect(null != runner.failure);
239
+ try testing.expect(null != std.mem.indexOf(u8, runner.failure.?, "result mismatch"));
240
+ try testing.expect(null != std.mem.indexOf(u8, runner.failure.?, "\"alpha\":\"one\""));
241
+ try testing.expect(null != std.mem.indexOf(u8, runner.failure.?, "\"beta\":\"two\""));
242
+ }
243
+
244
+ test "omni smoke: an EMPTY set is refused, not passed" {
245
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
246
+ defer arena.deinit();
247
+
248
+ var runner = try arenapack(&arena);
249
+ defer runner.deinit();
250
+
251
+ try testing.expectError(
252
+ error.EmptyTestSet,
253
+ runner.runseterr(runner.set("empty"), .{}, inc),
254
+ );
255
+ }
256
+
257
+ test "omni smoke: a group the corpus does not carry is skipped, not invented" {
258
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
259
+ defer arena.deinit();
260
+
261
+ var runner = try arenapack(&arena);
262
+ defer runner.deinit();
263
+
264
+ try testing.expectError(
265
+ error.SkipZigTest,
266
+ runner.runseterr(runner.set("nosuchgroup"), .{}, inc),
267
+ );
268
+ }
269
+
270
+ test "omni smoke: the census counts what actually ran" {
271
+ var arena = std.heap.ArenaAllocator.init(testing.allocator);
272
+ defer arena.deinit();
273
+
274
+ R.resetcensus();
275
+
276
+ var runner = try arenapack(&arena);
277
+ defer runner.deinit();
278
+
279
+ try runner.runseterr(runner.set("basic"), .{}, inc);
280
+ try testing.expectEqual(@as(usize, 2), R.CASES);
281
+ try testing.expectEqual(@as(usize, 1), R.GROUPS);
282
+
283
+ R.resetcensus();
284
+ }
@@ -85,12 +85,12 @@ fn named(name: []const u8, opts: ?Value) sdk.Feature {
85
85
  return f;
86
86
  }
87
87
  fn names(client: *sdk.SDK) []const u8 {
88
- var buf = std.ArrayList(u8).init(h.A());
88
+ var buf: std.ArrayList(u8) = .empty;
89
89
  for (client.features.items, 0..) |f, i| {
90
- if (i != 0) buf.append(',') catch {};
91
- buf.appendSlice(f.name()) catch {};
90
+ if (i != 0) buf.append(h.A(), ',') catch {};
91
+ buf.appendSlice(h.A(), f.name()) catch {};
92
92
  }
93
- return buf.toOwnedSlice() catch "";
93
+ return buf.toOwnedSlice(h.A()) catch "";
94
94
  }
95
95
 
96
96
  // =====================================================================
@@ -455,14 +455,14 @@ fn makeOptsFeature(feature: Value) Value {
455
455
 
456
456
  fn orderJoin(opts: Value) []const u8 {
457
457
  const order = h.getpath(&.{ "__derived__", "featureorder" }, opts);
458
- var out = std.ArrayList(u8).init(h.A());
458
+ var out: std.ArrayList(u8) = .empty;
459
459
  if (order == .array) {
460
460
  for (order.array.data.items, 0..) |v, i| {
461
- if (i > 0) out.appendSlice(",") catch {};
462
- if (v == .string) out.appendSlice(v.string) catch {};
461
+ if (i > 0) out.appendSlice(h.A(), ",") catch {};
462
+ if (v == .string) out.appendSlice(h.A(), v.string) catch {};
463
463
  }
464
464
  }
465
- return out.toOwnedSlice() catch "";
465
+ return out.toOwnedSlice(h.A()) catch "";
466
466
  }
467
467
 
468
468
  test "pipeline feature order: map is test-first" {