@voxgig/sdkgen 4.8.2 → 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/dist/action/doctor.d.ts +1 -0
- package/dist/action/doctor.js +50 -2
- package/dist/action/doctor.js.map +1 -1
- package/dist/helpers/naming.js +4 -2
- package/dist/helpers/naming.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/sdkgen.aon +21 -0
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +120 -18
- package/project/.sdk/model/target/c.aon +10 -0
- package/project/.sdk/model/target/clojure.aon +13 -0
- package/project/.sdk/model/target/cpp.aon +10 -0
- package/project/.sdk/model/target/csharp.aon +9 -0
- package/project/.sdk/model/target/dart.aon +10 -0
- package/project/.sdk/model/target/elixir.aon +9 -0
- package/project/.sdk/model/target/go.aon +13 -0
- package/project/.sdk/model/target/java.aon +9 -0
- package/project/.sdk/model/target/js.aon +7 -0
- package/project/.sdk/model/target/kotlin.aon +9 -0
- package/project/.sdk/model/target/lean.aon +17 -0
- package/project/.sdk/model/target/lua.aon +8 -0
- package/project/.sdk/model/target/ocaml.aon +9 -0
- package/project/.sdk/model/target/perl.aon +8 -0
- package/project/.sdk/model/target/php.aon +8 -0
- package/project/.sdk/model/target/py.aon +13 -0
- package/project/.sdk/model/target/rb.aon +8 -0
- package/project/.sdk/model/target/rust.aon +10 -0
- package/project/.sdk/model/target/scala.aon +21 -2
- package/project/.sdk/model/target/swift.aon +18 -0
- package/project/.sdk/model/target/ts.aon +13 -0
- package/project/.sdk/model/target/zig.aon +9 -0
- package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
- package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
- package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
- package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
- package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
- package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
- package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
- package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
- package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
- package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
- package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
- package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
- package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
- package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
- 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/Makefile +38 -3
- package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
- package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
- package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
- package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
- package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
- package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
- package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
- package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
- package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
- package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
- package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
- package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
- package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
- package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
- package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
- package/project/.sdk/tm/cpp/Makefile +5 -1
- package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
- package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
- package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
- package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
- package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
- package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
- package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
- package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
- package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
- package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
- package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
- package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
- package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
- package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
- package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
- package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
- package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
- package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
- package/project/.sdk/tm/dart/test/omni.dart +520 -0
- package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
- package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
- package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
- package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
- package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
- package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
- package/project/.sdk/tm/elixir/Makefile +11 -3
- package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
- package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
- package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
- package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
- package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
- package/project/.sdk/tm/go/core/context.go +32 -16
- package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
- package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
- package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
- package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
- package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
- package/project/.sdk/tm/go/test/omni/omni.go +902 -0
- package/project/.sdk/tm/go/test/omni/util.go +381 -0
- package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
- package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
- package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
- package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
- package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
- package/project/.sdk/tm/go/utility/make_options.go +8 -1
- package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
- package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
- package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
- package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
- package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
- package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
- package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
- package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
- package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
- package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
- package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
- package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
- package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
- package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
- package/project/.sdk/tm/js/test/omni.js +251 -0
- package/project/.sdk/tm/js/test/omni.test.js +105 -0
- package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
- package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
- package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
- package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
- package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
- package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
- package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
- package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
- package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
- package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
- package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
- package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
- package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
- package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
- package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
- package/project/.sdk/tm/lean/Makefile +12 -5
- package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
- package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
- package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
- package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
- package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
- package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
- package/project/.sdk/tm/lua/test/omni.lua +456 -0
- package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
- package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
- package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
- package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
- package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
- package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
- package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
- package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
- package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
- package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
- package/project/.sdk/tm/ocaml/Makefile +37 -12
- package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
- package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
- package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
- package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
- package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
- package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
- package/project/.sdk/tm/perl/t/omni.pm +647 -0
- package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
- package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
- package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
- package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
- package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
- package/project/.sdk/tm/php/test/Omni.php +691 -0
- package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
- package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
- package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
- package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
- package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
- package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
- package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
- package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
- package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
- package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
- package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
- package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
- package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
- package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
- package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
- package/project/.sdk/tm/py/test/omni.py +415 -0
- package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
- package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
- package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
- package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
- package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
- package/project/.sdk/tm/rb/test/omni.rb +505 -0
- package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
- package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
- package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
- package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
- package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
- package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
- package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
- package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
- package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
- package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
- package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
- package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
- package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
- package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
- package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
- package/project/.sdk/tm/scala/Makefile +16 -6
- package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
- package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
- package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
- package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
- package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
- package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
- package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
- package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
- package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
- package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
- package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
- package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
- package/project/.sdk/tm/ts/test/omni.ts +104 -32
- package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
- 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 +145 -155
- 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/src/action/doctor.ts +66 -2
- package/src/helpers/naming.ts +4 -2
- package/project/.sdk/tm/c/tests/runner.h +0 -274
- package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
- package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
- package/project/.sdk/tm/dart/test/runner.dart +0 -406
- package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
- package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
- package/project/.sdk/tm/go/test/runner_test.go +0 -629
- package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
- package/project/.sdk/tm/java/test/StructRunner.java +0 -281
- package/project/.sdk/tm/js/test/runner.js +0 -387
- package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
- package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
- package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
- package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
- package/project/.sdk/tm/php/test/StructRunner.php +0 -275
- package/project/.sdk/tm/py/test/struct_runner.py +0 -411
- package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
- package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
- package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
|
@@ -1,18 +1,25 @@
|
|
|
1
|
-
// ProjectName SDK — shared test runner
|
|
1
|
+
// ProjectName SDK — shared test runner SUPPORT (mirrors java
|
|
2
2
|
// test/RunnerSupport.java): env overrides, sdk-test-control.json skips, the
|
|
3
|
-
// ../.sdk/test/test.json loader, and
|
|
3
|
+
// ../.sdk/test/test.json loader, and Context construction from a test-entry
|
|
4
|
+
// ctx map.
|
|
5
|
+
//
|
|
6
|
+
// SUPPORT ONLY. The runset/match ENGINE that used to live here (and the
|
|
7
|
+
// whole of the retired test/struct_runner.hpp) was replaced by the vendored
|
|
8
|
+
// @voxgig/omni runner — see test/omni_resolver.hpp, which drives it and
|
|
9
|
+
// calls make_ctx_from_map/fixctx below. The file KEEPS ITS NAME because the
|
|
10
|
+
// generated entity suites (<entity>_direct_test.cpp, <entity>_entity_test.cpp)
|
|
11
|
+
// include it for read_file, load_env_local, env_override,
|
|
12
|
+
// is_control_skipped, entity_list_to_data and now_ms.
|
|
4
13
|
|
|
5
14
|
#ifndef SDK_TEST_RUNNER_SUPPORT_HPP
|
|
6
15
|
#define SDK_TEST_RUNNER_SUPPORT_HPP
|
|
7
16
|
|
|
8
17
|
#include <cctype>
|
|
9
18
|
#include <chrono>
|
|
10
|
-
#include <cmath>
|
|
11
19
|
#include <cstdlib>
|
|
12
20
|
#include <fstream>
|
|
13
21
|
#include <functional>
|
|
14
22
|
#include <map>
|
|
15
|
-
#include <regex>
|
|
16
23
|
#include <sstream>
|
|
17
24
|
#include <string>
|
|
18
25
|
#include <vector>
|
|
@@ -155,183 +162,6 @@ inline Value get_spec(const Value& spec, std::initializer_list<std::string> keys
|
|
|
155
162
|
return Helpers::toMapAny(cur);
|
|
156
163
|
}
|
|
157
164
|
|
|
158
|
-
// ---- normalisation / matching ----------------------------------------
|
|
159
|
-
|
|
160
|
-
inline Value json_normalize(const Value& v) {
|
|
161
|
-
// Roundtrip through JSON to drop function values and canonicalise numbers.
|
|
162
|
-
return vs::parse_json(vs::jsonify(v, 0));
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// canon: integer-valued numbers -> int; maps sorted; recursive. Returns a
|
|
166
|
-
// normalised Value used only for deep-equality.
|
|
167
|
-
inline Value canon(const Value& v) {
|
|
168
|
-
if (v.is_double()) {
|
|
169
|
-
double d = v.as_double();
|
|
170
|
-
if (std::isfinite(d) && std::floor(d) == d) return Value((int64_t)d);
|
|
171
|
-
return v;
|
|
172
|
-
}
|
|
173
|
-
if (v.is_list()) {
|
|
174
|
-
Value out = vlist();
|
|
175
|
-
for (const auto& e : *v.as_list()) out.as_list()->push_back(canon(e));
|
|
176
|
-
return out;
|
|
177
|
-
}
|
|
178
|
-
if (v.is_map()) {
|
|
179
|
-
std::vector<std::string> keys = Struct::keysof(v); // sorted
|
|
180
|
-
Value out = vmap();
|
|
181
|
-
for (const auto& k : keys) map_put(out, k, canon(getp(v, k)));
|
|
182
|
-
return out;
|
|
183
|
-
}
|
|
184
|
-
return v;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
inline bool canon_eq(const Value& a, const Value& b) { return canon(a) == canon(b); }
|
|
188
|
-
|
|
189
|
-
inline std::string to_lower(std::string s) {
|
|
190
|
-
for (auto& c : s) c = static_cast<char>(std::tolower((unsigned char)c));
|
|
191
|
-
return s;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
inline bool match_string(const std::string& pattern, const std::string& val) {
|
|
195
|
-
if (pattern.size() >= 2 && pattern.front() == '/' && pattern.back() == '/') {
|
|
196
|
-
try {
|
|
197
|
-
std::regex re(pattern.substr(1, pattern.size() - 2));
|
|
198
|
-
return std::regex_search(val, re);
|
|
199
|
-
} catch (...) { return false; }
|
|
200
|
-
}
|
|
201
|
-
return to_lower(val).find(to_lower(pattern)) != std::string::npos;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// match_deep: walk `check`; every leaf must equal/match base at that path.
|
|
205
|
-
inline void match_deep(const std::string& where, const Value& check, const Value& base,
|
|
206
|
-
const std::string& path) {
|
|
207
|
-
if (check.is_undef()) return;
|
|
208
|
-
if (check.is_map()) {
|
|
209
|
-
for (const auto& kv : *check.as_map()) {
|
|
210
|
-
Value bv = base.is_map() ? getp(base, kv.first) : Value::undef();
|
|
211
|
-
match_deep(where, kv.second, bv, path + "." + kv.first);
|
|
212
|
-
}
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (check.is_list()) {
|
|
216
|
-
auto cl = check.as_list();
|
|
217
|
-
for (size_t i = 0; i < cl->size(); i++) {
|
|
218
|
-
Value bv = Value::undef();
|
|
219
|
-
if (base.is_list() && i < base.as_list()->size()) bv = (*base.as_list())[i];
|
|
220
|
-
match_deep(where, (*cl)[i], bv, path + "[" + std::to_string(i) + "]");
|
|
221
|
-
}
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
// leaf
|
|
225
|
-
if (check.is_string() && check.as_string() == "__EXISTS__") {
|
|
226
|
-
sdktest::checks()++;
|
|
227
|
-
if (is_nullish(base)) sdktest::record_fail(where, "match " + path + ": expected value to exist");
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
if (check.is_string() && check.as_string() == "__UNDEF__") {
|
|
231
|
-
sdktest::checks()++;
|
|
232
|
-
if (!is_nullish(base)) sdktest::record_fail(where, "match " + path + ": expected undef, got " + vs::jsonify(base, 0));
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
Value nc = json_normalize(check);
|
|
236
|
-
Value nb = json_normalize(base);
|
|
237
|
-
sdktest::checks()++;
|
|
238
|
-
if (!canon_eq(nc, nb)) {
|
|
239
|
-
if (check.is_string() && !check.as_string().empty() &&
|
|
240
|
-
match_string(check.as_string(), Struct::stringify(base))) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
sdktest::record_fail(where, "match " + path + ": got " + vs::jsonify(nb, 0) + ", want " + vs::jsonify(nc, 0));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// runset — drive a test.json entry set against a subject (which returns a
|
|
248
|
-
// Value or throws SdkErrorPtr). Records failures via testlib.
|
|
249
|
-
using RunSubject = std::function<Value(const Value& entry)>;
|
|
250
|
-
|
|
251
|
-
inline void runset(const std::string& label, const Value& testspec, RunSubject subject) {
|
|
252
|
-
if (!testspec.is_map()) return;
|
|
253
|
-
Value set = getp(testspec, "set");
|
|
254
|
-
if (!set.is_list()) return;
|
|
255
|
-
|
|
256
|
-
auto entries = set.as_list();
|
|
257
|
-
for (size_t i = 0; i < entries->size(); i++) {
|
|
258
|
-
const Value& entry = (*entries)[i];
|
|
259
|
-
if (!entry.is_map()) continue;
|
|
260
|
-
std::string where = label + "#" + std::to_string(i);
|
|
261
|
-
|
|
262
|
-
Value result = Value::undef();
|
|
263
|
-
SdkErrorPtr err;
|
|
264
|
-
std::string errMsg;
|
|
265
|
-
try {
|
|
266
|
-
result = subject(entry);
|
|
267
|
-
} catch (const SdkErrorPtr& e) {
|
|
268
|
-
err = e;
|
|
269
|
-
errMsg = e->getMessage();
|
|
270
|
-
} catch (const std::exception& e) {
|
|
271
|
-
err = std::make_shared<SdkError>("", e.what(), nullptr);
|
|
272
|
-
errMsg = e.what();
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
Value expectedErr = getp(entry, "err");
|
|
276
|
-
|
|
277
|
-
if (err) {
|
|
278
|
-
if (!is_nullish(expectedErr)) {
|
|
279
|
-
sdktest::checks()++;
|
|
280
|
-
if (expectedErr.is_string() && !match_string(expectedErr.as_string(), errMsg)) {
|
|
281
|
-
sdktest::record_fail(where, "error mismatch: got \"" + errMsg + "\", want contains \"" + expectedErr.as_string() + "\"");
|
|
282
|
-
}
|
|
283
|
-
Value matchSpec = Helpers::toMapAny(getp(entry, "match"));
|
|
284
|
-
if (matchSpec.is_map()) {
|
|
285
|
-
Value resultMap = vmap();
|
|
286
|
-
map_put(resultMap, "in", getp(entry, "in"));
|
|
287
|
-
map_put(resultMap, "out", json_normalize(result));
|
|
288
|
-
Value errRec = vmap();
|
|
289
|
-
map_put(errRec, "message", Value(errMsg));
|
|
290
|
-
map_put(resultMap, "err", errRec);
|
|
291
|
-
match_deep(where, matchSpec, resultMap, "");
|
|
292
|
-
}
|
|
293
|
-
continue;
|
|
294
|
-
}
|
|
295
|
-
sdktest::checks()++;
|
|
296
|
-
sdktest::record_fail(where, "unexpected error: " + errMsg);
|
|
297
|
-
continue;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
if (!is_nullish(expectedErr)) {
|
|
301
|
-
sdktest::checks()++;
|
|
302
|
-
sdktest::record_fail(where, "expected error containing \"" + Struct::stringify(expectedErr) + "\" but got " + vs::jsonify(json_normalize(result), 0));
|
|
303
|
-
continue;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
bool matched = false;
|
|
307
|
-
Value matchSpec = Helpers::toMapAny(getp(entry, "match"));
|
|
308
|
-
if (matchSpec.is_map()) {
|
|
309
|
-
Value resultMap = vmap();
|
|
310
|
-
map_put(resultMap, "in", getp(entry, "in"));
|
|
311
|
-
map_put(resultMap, "out", json_normalize(result));
|
|
312
|
-
if (!is_nullish(getp(entry, "args"))) {
|
|
313
|
-
map_put(resultMap, "args", getp(entry, "args"));
|
|
314
|
-
} else if (!is_nullish(getp(entry, "in"))) {
|
|
315
|
-
map_put(resultMap, "args", vlist({getp(entry, "in")}));
|
|
316
|
-
}
|
|
317
|
-
if (!is_nullish(getp(entry, "ctx"))) map_put(resultMap, "ctx", getp(entry, "ctx"));
|
|
318
|
-
match_deep(where, matchSpec, resultMap, "");
|
|
319
|
-
matched = true;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
Value expectedOut = getp(entry, "out");
|
|
323
|
-
if (is_nullish(expectedOut) && matched) continue;
|
|
324
|
-
if (!is_nullish(expectedOut)) {
|
|
325
|
-
sdktest::checks()++;
|
|
326
|
-
Value nr = json_normalize(result);
|
|
327
|
-
Value ne = json_normalize(expectedOut);
|
|
328
|
-
if (!canon_eq(nr, ne)) {
|
|
329
|
-
sdktest::record_fail(where, "output mismatch: got " + vs::jsonify(nr, 0) + ", want " + vs::jsonify(ne, 0));
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
165
|
// ---- Context construction from a JSON ctx map ------------------------
|
|
336
166
|
|
|
337
167
|
struct EntityTestSetup {
|
|
@@ -345,6 +175,39 @@ struct EntityTestSetup {
|
|
|
345
175
|
long long now = 0;
|
|
346
176
|
};
|
|
347
177
|
|
|
178
|
+
// A minimal Entity for a test-entry ctx map. Context resolves the operation
|
|
179
|
+
// through the Entity INTERFACE — resolveOp keys the config lookup on
|
|
180
|
+
// entity->getName() — and a literal {"name": "planet"} map out of the
|
|
181
|
+
// fixture is not one, so entname would be "" and every op lookup would miss,
|
|
182
|
+
// reporting point_no_points for the whole makePoint group. (java's peer is
|
|
183
|
+
// PrimaryUtilityTest.PlEntity, go's is plEntity. cpp keeps it here rather
|
|
184
|
+
// than at the call site because Context holds a RAW Entity*, so the instance
|
|
185
|
+
// must outlive the Context: named_entity interns one per name for the life
|
|
186
|
+
// of the test binary.)
|
|
187
|
+
class NamedEntity : public Entity {
|
|
188
|
+
public:
|
|
189
|
+
explicit NamedEntity(std::string name) : name_(std::move(name)) {}
|
|
190
|
+
std::string getName() override { return name_; }
|
|
191
|
+
EntityPtr make() override { return std::make_shared<NamedEntity>(name_); }
|
|
192
|
+
Value data(const Value& arg) override { return Value::undef(); }
|
|
193
|
+
Value match(const Value& arg) override { return Value::undef(); }
|
|
194
|
+
void markDeleted() override { deleted_ = true; }
|
|
195
|
+
bool deleted() override { return deleted_; }
|
|
196
|
+
|
|
197
|
+
private:
|
|
198
|
+
std::string name_;
|
|
199
|
+
bool deleted_ = false;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
inline Entity* named_entity(const std::string& name) {
|
|
203
|
+
static std::map<std::string, std::shared_ptr<NamedEntity>> interned;
|
|
204
|
+
auto it = interned.find(name);
|
|
205
|
+
if (it == interned.end()) {
|
|
206
|
+
it = interned.emplace(name, std::make_shared<NamedEntity>(name)).first;
|
|
207
|
+
}
|
|
208
|
+
return it->second.get();
|
|
209
|
+
}
|
|
210
|
+
|
|
348
211
|
// makeCtxFromMap — build a Context from a test-entry ctx/args map.
|
|
349
212
|
inline CtxPtr make_ctx_from_map(const Value& ctxmap_, std::shared_ptr<ProjectNameSDK> client,
|
|
350
213
|
UtilityPtr utility) {
|
|
@@ -370,6 +233,30 @@ inline CtxPtr make_ctx_from_map(const Value& ctxmap_, std::shared_ptr<ProjectNam
|
|
|
370
233
|
Value point = Helpers::toMapAny(getp(ctxmap, "point"));
|
|
371
234
|
if (point.is_map()) cs.point = point;
|
|
372
235
|
|
|
236
|
+
// An entry may carry the whole operation lookup — the API config, the SDK
|
|
237
|
+
// options that gate it, and the entity it hangs off. makePoint's group is
|
|
238
|
+
// built entirely out of these three (java reads the same keys in its
|
|
239
|
+
// Context constructor); without them ctx.config falls back to the client's
|
|
240
|
+
// BAKED-IN config and the group asserts against the wrong endpoints.
|
|
241
|
+
Value configMap = Helpers::toMapAny(getp(ctxmap, "config"));
|
|
242
|
+
if (configMap.is_map()) cs.config = configMap;
|
|
243
|
+
Value optionsMap = Helpers::toMapAny(getp(ctxmap, "options"));
|
|
244
|
+
if (optionsMap.is_map()) cs.options = optionsMap;
|
|
245
|
+
Value entityMap = Helpers::toMapAny(getp(ctxmap, "entity"));
|
|
246
|
+
if (entityMap.is_map()) {
|
|
247
|
+
Value entname = getp(entityMap, "name");
|
|
248
|
+
if (entname.is_string()) cs.entity = named_entity(entname.as_string());
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// EVERY entry gets its OWN op cache. resolveOp memoises on
|
|
252
|
+
// "<entity>:<opname>", and makePoint drives seven entries that all read
|
|
253
|
+
// planet:list from a DIFFERENT config — inheriting the client's root opmap
|
|
254
|
+
// would serve entry one's operation to all seven and the group would pass
|
|
255
|
+
// while testing one case. (java gets this for free: its makeCtxFromMap
|
|
256
|
+
// builds `new Context(ctxmap, null)`, so there is no base context to
|
|
257
|
+
// inherit a cache from.)
|
|
258
|
+
cs.opmap = std::make_shared<OpMap>();
|
|
259
|
+
|
|
373
260
|
CtxPtr ctx = utility->makeContext(cs, client ? client->getRootCtx() : nullptr);
|
|
374
261
|
|
|
375
262
|
if (client && !ctx->options.is_map()) ctx->options = client->optionsMap();
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
// Voxgig Struct corpus driver — C++ port.
|
|
2
|
-
// Mirrors java/src/test/StructCorpusTest.java.
|
|
3
2
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// Drives the shared struct corpus (../.sdk/test/test.json, root key
|
|
4
|
+
// "struct") against the vendored struct utility THROUGH the VENDORED omni
|
|
5
|
+
// runner (test/omni_resolver.hpp over test/vendor/omni) — the engine half
|
|
6
|
+
// of the retired test/struct_runner.hpp. Mirrors
|
|
7
|
+
// tm/java/test/StructCorpusTest.java.
|
|
8
|
+
//
|
|
9
|
+
// Two behaviour changes came with the swap, both deliberate:
|
|
10
|
+
//
|
|
11
|
+
// - A missing category, a missing section or an EMPTY set now FAILS. The
|
|
12
|
+
// retired runner skipped all three silently, so a renamed fixture
|
|
13
|
+
// reported PASS while running zero assertions.
|
|
14
|
+
// - omni THROWS on the first bad entry in a group instead of recording
|
|
15
|
+
// every one, so a group reports its FIRST failure and the scoreboard
|
|
16
|
+
// below counts the entries that actually ran. Each group is its own
|
|
17
|
+
// T_RUN-style unit, so one bad group never hides the rest.
|
|
6
18
|
|
|
7
19
|
#include <cstdio>
|
|
8
20
|
#include <fstream>
|
|
@@ -11,21 +23,32 @@
|
|
|
11
23
|
#include <string>
|
|
12
24
|
#include <vector>
|
|
13
25
|
|
|
14
|
-
#include "
|
|
15
|
-
#include "
|
|
16
|
-
#include "../utility/voxgigstruct/voxgig_struct.hpp"
|
|
17
|
-
#include "struct_runner.hpp"
|
|
26
|
+
#include "omni_resolver.hpp"
|
|
27
|
+
#include "testlib.hpp"
|
|
18
28
|
|
|
19
29
|
using namespace voxgig::structlib;
|
|
20
|
-
|
|
21
|
-
using runner::Result;
|
|
22
|
-
using runner::runset;
|
|
23
|
-
using runner::runsetflags;
|
|
24
|
-
using runner::Subject;
|
|
30
|
+
namespace res = sdk::resolver;
|
|
25
31
|
|
|
26
32
|
namespace {
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
// One corpus subject in the shape the groups below are written in: one
|
|
35
|
+
// value in, one value out. `in` is args[0], and because a Value shares its
|
|
36
|
+
// container by shared_ptr, an in-place rewrite by the subject reaches
|
|
37
|
+
// omni's `match: {args: ...}` through the resolver's refill.
|
|
38
|
+
using StructSubject = std::function<Value(const Value&)>;
|
|
39
|
+
|
|
40
|
+
res::Subject onearg(const StructSubject& subject) {
|
|
41
|
+
return [subject](std::vector<Value>& args) -> Value {
|
|
42
|
+
return subject(args.empty() ? Value::undef() : args[0]);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
struct GroupResult {
|
|
47
|
+
long long cases = 0;
|
|
48
|
+
bool ok = true;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
std::map<std::string, GroupResult> SCOREBOARD;
|
|
29
52
|
|
|
30
53
|
const std::map<std::string, std::string>& category_to_file() {
|
|
31
54
|
static const std::map<std::string, std::string> M = {
|
|
@@ -33,15 +56,78 @@ const std::map<std::string, std::string>& category_to_file() {
|
|
|
33
56
|
{"merge", "merge.jsonic"}, {"getpath", "getpath.jsonic"},
|
|
34
57
|
{"inject", "inject.jsonic"}, {"transform", "transform.jsonic"},
|
|
35
58
|
{"validate", "validate.jsonic"}, {"select", "select.jsonic"},
|
|
59
|
+
{"nullsem", "nullsem.jsonic"},
|
|
36
60
|
};
|
|
37
61
|
return M;
|
|
38
62
|
}
|
|
39
63
|
|
|
40
|
-
|
|
64
|
+
// One client + one corpus runner for the whole binary.
|
|
65
|
+
res::Run& structRun() {
|
|
66
|
+
static res::Run run =
|
|
67
|
+
res::makeRunner("../.sdk/test/test.json", sdk::ProjectNameSDK::testSDK())
|
|
68
|
+
.runner("struct", Value::undef());
|
|
69
|
+
return run;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Resolve one corpus group, failing LOUDLY when it would run zero cases.
|
|
73
|
+
Value group_spec(const std::string& cat, const std::string& name, const std::string& full) {
|
|
74
|
+
Value category = structRun().set(cat);
|
|
75
|
+
if (!category.is_map()) {
|
|
76
|
+
sdktest::record_fail(full, "struct corpus category missing: " + cat +
|
|
77
|
+
" - check .sdk/test/struct/");
|
|
78
|
+
return Value::undef();
|
|
79
|
+
}
|
|
80
|
+
Value spec = sdk::getp(category, Value(name));
|
|
81
|
+
if (!spec.is_map()) {
|
|
82
|
+
sdktest::record_fail(full, "struct corpus section missing: " + full +
|
|
83
|
+
" - check .sdk/test/struct/");
|
|
84
|
+
return Value::undef();
|
|
85
|
+
}
|
|
86
|
+
Value set = sdk::getp(spec, Value("set"));
|
|
87
|
+
if (!set.is_list() || set.as_list()->empty()) {
|
|
88
|
+
sdktest::record_fail(full, "struct corpus section is EMPTY: " + full +
|
|
89
|
+
" - zero cases would run");
|
|
90
|
+
return Value::undef();
|
|
91
|
+
}
|
|
92
|
+
return spec;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Run one corpus group. A failing entry throws omni::OmniError naming the
|
|
96
|
+
// entry; it is recorded and the next group still runs.
|
|
97
|
+
void runflags(const std::string& cat, const std::string& name, bool null_flag,
|
|
98
|
+
const res::Subject& subject) {
|
|
41
99
|
std::string full = cat + "." + name;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
100
|
+
sdktest::tests()++;
|
|
101
|
+
sdktest::checks()++;
|
|
102
|
+
|
|
103
|
+
GroupResult result;
|
|
104
|
+
long long before = res::cases();
|
|
105
|
+
|
|
106
|
+
Value spec = group_spec(cat, name, full);
|
|
107
|
+
if (spec.is_map()) {
|
|
108
|
+
try {
|
|
109
|
+
structRun().runsetflags(full, spec, null_flag, subject);
|
|
110
|
+
} catch (const res::OmniError& e) {
|
|
111
|
+
result.ok = false;
|
|
112
|
+
sdktest::record_fail(full, e.what());
|
|
113
|
+
} catch (const sdk::SdkErrorPtr& e) {
|
|
114
|
+
result.ok = false;
|
|
115
|
+
sdktest::record_fail(full, std::string("uncaught SdkError: ") + e->getMessage());
|
|
116
|
+
} catch (const std::exception& e) {
|
|
117
|
+
result.ok = false;
|
|
118
|
+
sdktest::record_fail(full, std::string("uncaught exception: ") + e.what());
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
result.ok = false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
result.cases = res::cases() - before;
|
|
125
|
+
SCOREBOARD[full] = result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
void run(const std::string& cat, const std::string& name, bool null_flag,
|
|
129
|
+
const StructSubject& subject) {
|
|
130
|
+
runflags(cat, name, null_flag, onearg(subject));
|
|
45
131
|
}
|
|
46
132
|
|
|
47
133
|
// Extract a named field from a test-spec object. This mirrors the canonical
|
|
@@ -56,6 +142,29 @@ inline Value getpDef(const Value& in, const std::string& k, const Value& def) {
|
|
|
56
142
|
return lookup_v(in, Value(k)).is_undef() ? def : lookup_v(in, Value(k));
|
|
57
143
|
}
|
|
58
144
|
|
|
145
|
+
// The struct-corpus nullModifier (was struct_runner.hpp's null_modifier): a
|
|
146
|
+
// bare "__NULL__" becomes a real null, and an embedded "__NULL__" inside a
|
|
147
|
+
// larger string is rewritten to the literal text "null".
|
|
148
|
+
void null_modifier(const Value& val, const Value& key, const Value& parent, Injection&,
|
|
149
|
+
const Value&) {
|
|
150
|
+
if (!val.is_string())
|
|
151
|
+
return;
|
|
152
|
+
const std::string& s = val.as_string();
|
|
153
|
+
if (s == res::NULLMARK) {
|
|
154
|
+
setprop(parent, key, Value(nullptr));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (s.find(res::NULLMARK) != std::string::npos) {
|
|
158
|
+
std::string out = s;
|
|
159
|
+
std::string::size_type pos = 0;
|
|
160
|
+
while ((pos = out.find(res::NULLMARK, pos)) != std::string::npos) {
|
|
161
|
+
out.replace(pos, res::NULLMARK.size(), "null");
|
|
162
|
+
pos += 4;
|
|
163
|
+
}
|
|
164
|
+
setprop(parent, key, Value(out));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
59
168
|
} // namespace
|
|
60
169
|
|
|
61
170
|
int main() {
|
|
@@ -103,7 +212,7 @@ int main() {
|
|
|
103
212
|
Value val = getpDef(in, "val", Value::undef());
|
|
104
213
|
// Canonical subject: a stored-null (the NULLMARK in null mode) stringifies
|
|
105
214
|
// as the literal text "null".
|
|
106
|
-
if (val.is_string() && val.as_string() ==
|
|
215
|
+
if (val.is_string() && val.as_string() == res::NULLMARK)
|
|
107
216
|
val = Value("null");
|
|
108
217
|
Value max = getp(in, "max");
|
|
109
218
|
int m = max.is_int() ? static_cast<int>(max.as_int()) : -1;
|
|
@@ -119,7 +228,7 @@ int main() {
|
|
|
119
228
|
// path *element* (the marker) is stripped from the rendered string; and a
|
|
120
229
|
// wholly-null path renders "<unknown-path:null>".
|
|
121
230
|
Value path = getpDef(in, "path", Value::undef());
|
|
122
|
-
bool path_was_null = path.is_string() && path.as_string() ==
|
|
231
|
+
bool path_was_null = path.is_string() && path.as_string() == res::NULLMARK;
|
|
123
232
|
if (path_was_null)
|
|
124
233
|
path = Value::undef();
|
|
125
234
|
Value from = getp(in, "from");
|
|
@@ -336,7 +445,7 @@ int main() {
|
|
|
336
445
|
// Canonical subject passes { modify: nullModifier }: an injected stored-null
|
|
337
446
|
// (the marker, in null mode) renders as the literal text "null".
|
|
338
447
|
Injection inj(Value::undef(), Value::undef());
|
|
339
|
-
inj.modify =
|
|
448
|
+
inj.modify = null_modifier;
|
|
340
449
|
return inject(getp(in, "val"), getp(in, "store"), &inj);
|
|
341
450
|
});
|
|
342
451
|
run("inject", "deep", true,
|
|
@@ -427,49 +536,64 @@ int main() {
|
|
|
427
536
|
return Value(out);
|
|
428
537
|
});
|
|
429
538
|
|
|
430
|
-
//
|
|
431
|
-
|
|
539
|
+
// ===== nullsem =====
|
|
540
|
+
// Does a PRESENT key holding a JSON null read as "no value"? Every lane
|
|
541
|
+
// runs {null: false}: with the flag on, the runner rewrites every null to
|
|
542
|
+
// "__NULL__" and the section asserts nothing about null at all.
|
|
543
|
+
run("nullsem", "getprop", false, [](const Value& in) {
|
|
544
|
+
Value alt = getpDef(in, "alt", Value::undef());
|
|
545
|
+
return alt.is_undef() ? getprop(getp(in, "val"), getp(in, "key"))
|
|
546
|
+
: getprop(getp(in, "val"), getp(in, "key"), alt);
|
|
547
|
+
});
|
|
548
|
+
run("nullsem", "getelem", false, [](const Value& in) {
|
|
549
|
+
Value alt = getpDef(in, "alt", Value::undef());
|
|
550
|
+
return alt.is_undef() ? getelem(getp(in, "val"), getp(in, "key"))
|
|
551
|
+
: getelem(getp(in, "val"), getp(in, "key"), alt);
|
|
552
|
+
});
|
|
553
|
+
run("nullsem", "getpath", false,
|
|
554
|
+
[](const Value& in) { return getpath_v(getp(in, "store"), getp(in, "path")); });
|
|
555
|
+
run("nullsem", "haskey", false,
|
|
556
|
+
[](const Value& in) { return Value(haskey(getp(in, "src"), getp(in, "key"))); });
|
|
557
|
+
run("nullsem", "keysof", false, [](const Value& in) {
|
|
558
|
+
auto out = std::make_shared<List>();
|
|
559
|
+
for (const auto& k : keysof(in))
|
|
560
|
+
out->push_back(Value(k));
|
|
561
|
+
return Value(out);
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
// ===== scoreboard =====
|
|
565
|
+
// Per-.jsonic-file case counts. `cases` is what the vendored runner
|
|
566
|
+
// actually DROVE: a group that throws stops at its first bad entry, so a
|
|
567
|
+
// count below the fixture's set size is itself a failure signal.
|
|
568
|
+
std::map<std::string, std::pair<long long, int>> by_file; // cases, failed groups
|
|
432
569
|
std::map<std::string, std::vector<std::pair<std::string, std::string>>> details;
|
|
433
|
-
|
|
570
|
+
long long total_cases = 0;
|
|
571
|
+
int failed_groups = 0;
|
|
572
|
+
|
|
434
573
|
for (const auto& [key, r] : SCOREBOARD) {
|
|
435
574
|
std::string cat = key.substr(0, key.find('.'));
|
|
436
575
|
auto it = category_to_file().find(cat);
|
|
437
576
|
std::string file = it == category_to_file().end() ? cat + ".jsonic" : it->second;
|
|
438
|
-
by_file[file].first += r.
|
|
439
|
-
by_file[file].second += r.
|
|
440
|
-
details[file].push_back({key, std::to_string(r.
|
|
441
|
-
|
|
442
|
-
|
|
577
|
+
by_file[file].first += r.cases;
|
|
578
|
+
by_file[file].second += r.ok ? 0 : 1;
|
|
579
|
+
details[file].push_back({key, std::to_string(r.cases) + (r.ok ? "" : " FAILED")});
|
|
580
|
+
total_cases += r.cases;
|
|
581
|
+
if (!r.ok)
|
|
582
|
+
failed_groups++;
|
|
443
583
|
}
|
|
444
584
|
|
|
445
585
|
std::cout << "\n========= STRUCT CORPUS SCOREBOARD =========\n";
|
|
446
586
|
for (const auto& [file, pt] : by_file) {
|
|
447
|
-
std::printf(" %-18s %
|
|
587
|
+
std::printf(" %-18s %5lld cases%s\n", file.c_str(), pt.first,
|
|
588
|
+
pt.second > 0 ? " (FAILURES)" : "");
|
|
448
589
|
for (const auto& [name, tally] : details[file]) {
|
|
449
590
|
std::printf(" %-30s %s\n", name.c_str(), tally.c_str());
|
|
450
591
|
}
|
|
451
592
|
}
|
|
452
|
-
std::printf(" %-18s %
|
|
593
|
+
std::printf(" %-18s %5lld cases, %d group(s) failed\n", "TOTAL", total_cases, failed_groups);
|
|
453
594
|
std::cout << "============================================\n";
|
|
454
595
|
|
|
455
|
-
//
|
|
456
|
-
if (const char* v = std::getenv("CORPUS_VERBOSE"); v && std::string(v) != "0") {
|
|
457
|
-
for (const auto& [name, r] : SCOREBOARD) {
|
|
458
|
-
if (r.failures.empty())
|
|
459
|
-
continue;
|
|
460
|
-
std::cerr << "\n--- " << name << " (" << r.passed << "/" << r.total << ") ---\n";
|
|
461
|
-
int shown = 0;
|
|
462
|
-
for (const auto& f : r.failures) {
|
|
463
|
-
std::cerr << " " << f << "\n";
|
|
464
|
-
if (++shown >= 5) {
|
|
465
|
-
std::cerr << " ... " << (r.failures.size() - shown) << " more\n";
|
|
466
|
-
break;
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
// Write target/corpus-scoreboard.json
|
|
596
|
+
// Write corpus-scoreboard.json beside the binary's working directory.
|
|
473
597
|
std::ofstream out("corpus-scoreboard.json");
|
|
474
598
|
if (out) {
|
|
475
599
|
out << "{\n \"files\": {\n";
|
|
@@ -478,17 +602,20 @@ int main() {
|
|
|
478
602
|
if (!first)
|
|
479
603
|
out << ",\n";
|
|
480
604
|
first = false;
|
|
481
|
-
out << " \"" << file << "\": {\"
|
|
605
|
+
out << " \"" << file << "\": {\"cases\": " << pt.first << ", \"failed\": " << pt.second
|
|
482
606
|
<< "}";
|
|
483
607
|
}
|
|
484
|
-
out << "\n },\n \"total\": {\"
|
|
608
|
+
out << "\n },\n \"total\": {\"cases\": " << total_cases << ", \"failed\": " << failed_groups
|
|
609
|
+
<< "}\n}\n";
|
|
485
610
|
}
|
|
486
611
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
612
|
+
if (failed_groups > 0) {
|
|
613
|
+
std::cerr << "struct corpus: " << failed_groups << " group(s) FAILED of " << SCOREBOARD.size()
|
|
614
|
+
<< "\n";
|
|
615
|
+
} else {
|
|
616
|
+
std::cout << "struct corpus: " << total_cases << " cases PASSED across " << SCOREBOARD.size()
|
|
617
|
+
<< " groups\n";
|
|
491
618
|
}
|
|
492
|
-
|
|
493
|
-
return
|
|
619
|
+
|
|
620
|
+
return sdktest::summary("struct_corpus_test");
|
|
494
621
|
}
|