@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.
- package/bin/voxgig-sdkgen +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
- package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
- package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +2 -2
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +2 -2
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
- package/project/.sdk/tm/go/test/omni/omni.go +8 -3
- package/project/.sdk/tm/go/test/omni/util.go +25 -4
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
- package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
- package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
- package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
- package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
- package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +3 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
- package/project/.sdk/tm/zig/Makefile +15 -1
- package/project/.sdk/tm/zig/build.zig +23 -5
- package/project/.sdk/tm/zig/core/helpers.zig +52 -11
- package/project/.sdk/tm/zig/core/mem.zig +17 -1
- package/project/.sdk/tm/zig/core/utility.zig +23 -19
- package/project/.sdk/tm/zig/feature/audit.zig +2 -2
- package/project/.sdk/tm/zig/feature/cache.zig +2 -2
- package/project/.sdk/tm/zig/feature/debug.zig +5 -5
- package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
- package/project/.sdk/tm/zig/feature/paging.zig +2 -2
- package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
- package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
- package/project/.sdk/tm/zig/feature/support.zig +3 -3
- package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
- package/project/.sdk/tm/zig/feature/test.zig +10 -5
- package/project/.sdk/tm/zig/test/fh.zig +10 -10
- package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
- package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
- package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
- package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
- package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
- package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
- package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
- package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
- package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
- package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
- package/project/sdkgen-package.json +1 -1
- 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
|
|
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
|
|
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" {
|