@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,185 +0,0 @@
|
|
|
1
|
-
(* Shared corpus harness for the ProjectName SDK.
|
|
2
|
-
*
|
|
3
|
-
* Extracted from struct_corpus.ml so the primary-utility suite can drive the
|
|
4
|
-
* SAME runner over test.json's "primary" section. OCaml runs a module's
|
|
5
|
-
* top-level effects on link, so a harness sitting beside a `let () = ...` main
|
|
6
|
-
* cannot be reused — linking it would run the struct corpus as a side effect.
|
|
7
|
-
* This module deliberately has no main.
|
|
8
|
-
*)
|
|
9
|
-
|
|
10
|
-
(* Test runner for the shared JSON corpus (build/test/test.json).
|
|
11
|
-
* Self-contained: an in-tree JSON reader builds the library's `value` type
|
|
12
|
-
* directly, so the OCaml port is exercised exactly as in production. *)
|
|
13
|
-
|
|
14
|
-
open Voxgig_struct
|
|
15
|
-
|
|
16
|
-
let nullmark = "__NULL__"
|
|
17
|
-
let undefmark = "__UNDEF__"
|
|
18
|
-
let existsmark = "__EXISTS__"
|
|
19
|
-
|
|
20
|
-
(* The JSON reader now lives in the runtime (sdk_json.ml) so the SDK's
|
|
21
|
-
* generated config can use it; the corpus runs against that same function
|
|
22
|
-
* rather than a second copy that could drift from it. *)
|
|
23
|
-
let json_read = Sdk_json.json_read
|
|
24
|
-
|
|
25
|
-
(* ---------------- fixJSON / equality ---------------- *)
|
|
26
|
-
|
|
27
|
-
let rec fix_json v flag_null =
|
|
28
|
-
match v with
|
|
29
|
-
| Noval | Null -> if flag_null then Str nullmark else v
|
|
30
|
-
| Map m -> let o = empty_map () in
|
|
31
|
-
List.iter (fun (k, x) -> ignore (setprop o (Str k) (fix_json x flag_null))) m.entries; o
|
|
32
|
-
| List r -> lst (List.map (fun x -> fix_json x flag_null) !r)
|
|
33
|
-
| _ -> v
|
|
34
|
-
|
|
35
|
-
(* Order-independent deep equality for maps; sequence equality for lists. *)
|
|
36
|
-
let rec eqv a b =
|
|
37
|
-
match a, b with
|
|
38
|
-
| (Noval | Null), (Noval | Null) -> true
|
|
39
|
-
| Bool x, Bool y -> x = y
|
|
40
|
-
| Num x, Num y -> x = y
|
|
41
|
-
| Str x, Str y -> x = y
|
|
42
|
-
| List x, List y -> List.length !x = List.length !y && List.for_all2 eqv !x !y
|
|
43
|
-
| Map x, Map y ->
|
|
44
|
-
omap_len x = omap_len y &&
|
|
45
|
-
List.for_all (fun (k, v) -> match omap_get y k with Some w -> eqv v w | None -> false) x.entries
|
|
46
|
-
| _ -> a == b
|
|
47
|
-
|
|
48
|
-
(* ---------------- match support ---------------- *)
|
|
49
|
-
|
|
50
|
-
let matchval check base =
|
|
51
|
-
let check = if check = Str undefmark || check = Str nullmark then Noval else check in
|
|
52
|
-
if eqv check base then true
|
|
53
|
-
else match check with
|
|
54
|
-
| Str cs ->
|
|
55
|
-
let basestr = stringify base in
|
|
56
|
-
if String.length cs >= 2 && cs.[0] = '/' && cs.[String.length cs - 1] = '/' then
|
|
57
|
-
Vregex.test_str (String.sub cs 1 (String.length cs - 2)) basestr
|
|
58
|
-
else
|
|
59
|
-
let low s = String.lowercase_ascii s in
|
|
60
|
-
let contains hay needle =
|
|
61
|
-
let hl = String.length hay and nl = String.length needle in
|
|
62
|
-
let rec go i = if i + nl > hl then false
|
|
63
|
-
else if String.sub hay i nl = needle then true else go (i + 1) in
|
|
64
|
-
nl = 0 || go 0 in
|
|
65
|
-
contains (low basestr) (low (stringify check))
|
|
66
|
-
| Func _ -> true
|
|
67
|
-
| _ -> false
|
|
68
|
-
|
|
69
|
-
let do_match check base =
|
|
70
|
-
let base = clone base in
|
|
71
|
-
ignore (walk ~before:(fun _k v _p path ->
|
|
72
|
-
(if not (isnode v) then begin
|
|
73
|
-
let baseval = getpath base path in
|
|
74
|
-
if eqv baseval v then ()
|
|
75
|
-
else if v = Str undefmark && is_nullish baseval then ()
|
|
76
|
-
else if v = Str existsmark && not (is_nullish baseval) then ()
|
|
77
|
-
else if not (matchval v baseval) then
|
|
78
|
-
raise (Struct_error (Printf.sprintf "MATCH: %s: [%s] <=> [%s]"
|
|
79
|
-
(String.concat "." (List.map js_string (match path with List r -> !r | _ -> [])))
|
|
80
|
-
(stringify v) (stringify baseval)))
|
|
81
|
-
end);
|
|
82
|
-
v) check)
|
|
83
|
-
|
|
84
|
-
(* ---------------- result tracking ---------------- *)
|
|
85
|
-
|
|
86
|
-
let npass = ref 0
|
|
87
|
-
let nfail = ref 0
|
|
88
|
-
let failures = ref []
|
|
89
|
-
|
|
90
|
-
let record group name ok msg =
|
|
91
|
-
if ok then incr npass
|
|
92
|
-
else (incr nfail; failures := Printf.sprintf "FAIL %s %s - %s" group name msg :: !failures)
|
|
93
|
-
|
|
94
|
-
(* ---------------- per-entry runner ---------------- *)
|
|
95
|
-
|
|
96
|
-
let omap_v kvs =
|
|
97
|
-
let m = empty_map () in
|
|
98
|
-
List.iter (fun (k, v) -> ignore (setprop m (Str k) v)) kvs; m
|
|
99
|
-
|
|
100
|
-
let getprop_raw_pub e k = (match e with Map m -> (match omap_get m k with Some x -> x | None -> Noval) | _ -> Noval)
|
|
101
|
-
let entry_get e k = getprop_raw_pub e k
|
|
102
|
-
let entry_has e k = match e with Map m -> omap_has m k | _ -> false
|
|
103
|
-
let default_injdef_pub () =
|
|
104
|
-
{ d_meta = Noval; d_extra = Noval; d_errs = Noval; d_modify = None; d_handler = None;
|
|
105
|
-
d_base = Noval; d_dparent = Noval; d_dpath = Noval; d_key = Noval }
|
|
106
|
-
|
|
107
|
-
let resolve_args entry =
|
|
108
|
-
if entry_has entry "ctx" then [entry_get entry "ctx"]
|
|
109
|
-
else if entry_has entry "args" then (
|
|
110
|
-
match entry_get entry "args" with
|
|
111
|
-
| List r ->
|
|
112
|
-
(* ts's resolveArgs writes the live first arg back as entry.ctx, so a
|
|
113
|
-
`match: {ctx: ...}` resolves for args-style entries too. Without it
|
|
114
|
-
every such assertion reads null and asserts nothing. *)
|
|
115
|
-
(match !r with
|
|
116
|
-
| (Map _ as first) :: _ -> ignore (setprop entry (Str "ctx") first)
|
|
117
|
-
| _ -> ());
|
|
118
|
-
!r
|
|
119
|
-
| _ -> [])
|
|
120
|
-
else if entry_has entry "in" then [clone (entry_get entry "in")]
|
|
121
|
-
else [Noval]
|
|
122
|
-
|
|
123
|
-
let check_result entry args res =
|
|
124
|
-
let matched = ref false in
|
|
125
|
-
(if entry_has entry "match" then begin
|
|
126
|
-
do_match (entry_get entry "match")
|
|
127
|
-
(omap_v ["in", entry_get entry "in"; "args", lst args;
|
|
128
|
-
"out", entry_get entry "res"; "ctx", entry_get entry "ctx"]);
|
|
129
|
-
matched := true
|
|
130
|
-
end);
|
|
131
|
-
let out = entry_get entry "out" in
|
|
132
|
-
if eqv out res then ()
|
|
133
|
-
else if !matched && (out = Str nullmark || is_nullish out) then ()
|
|
134
|
-
else raise (Struct_error (Printf.sprintf "Expected: %s, got: %s" (stringify out) (stringify res)))
|
|
135
|
-
|
|
136
|
-
let handle_error entry err =
|
|
137
|
-
let msg = (match err with Struct_error m -> m | e -> Printexc.to_string e) in
|
|
138
|
-
if entry_has entry "err" then begin
|
|
139
|
-
let entry_err = entry_get entry "err" in
|
|
140
|
-
if entry_err = Bool true || matchval entry_err (Str msg) then begin
|
|
141
|
-
if entry_has entry "match" then
|
|
142
|
-
do_match (entry_get entry "match")
|
|
143
|
-
(omap_v ["in", entry_get entry "in"; "out", entry_get entry "res";
|
|
144
|
-
(* ts hands do_match the ERROR OBJECT, so a corpus
|
|
145
|
-
`match: {err: {message: ...}}` resolves; a bare string
|
|
146
|
-
leaves err.message reading null. *)
|
|
147
|
-
"ctx", entry_get entry "ctx";
|
|
148
|
-
"err", omap_v ["message", Str msg]])
|
|
149
|
-
end else
|
|
150
|
-
raise (Struct_error (Printf.sprintf "ERROR MATCH: [%s] <=> [%s]" (stringify entry_err) msg))
|
|
151
|
-
end else raise err
|
|
152
|
-
|
|
153
|
-
let run_set ?(flags = []) group node subject =
|
|
154
|
-
let flag_null = (match List.assoc_opt "null" flags with Some b -> b | None -> true) in
|
|
155
|
-
let fixed = fix_json node flag_null in
|
|
156
|
-
let testset = (match getprop fixed (Str "set") with List r -> !r | _ -> []) in
|
|
157
|
-
List.iter (fun entry ->
|
|
158
|
-
let name = js_string (entry_get entry "name") in
|
|
159
|
-
try
|
|
160
|
-
(if not (entry_has entry "out") && flag_null then ignore (setprop entry (Str "out") (Str nullmark)));
|
|
161
|
-
let args = resolve_args entry in
|
|
162
|
-
let res = fix_json (subject args) flag_null in
|
|
163
|
-
ignore (setprop entry (Str "res") res);
|
|
164
|
-
check_result entry args res;
|
|
165
|
-
record group name true ""
|
|
166
|
-
with
|
|
167
|
-
| e ->
|
|
168
|
-
(try handle_error entry e; record group name true ""
|
|
169
|
-
with e2 -> record group name false
|
|
170
|
-
(match e2 with Struct_error m -> m | _ -> Printexc.to_string e2)))
|
|
171
|
-
testset
|
|
172
|
-
|
|
173
|
-
let run_single group node actual_fn =
|
|
174
|
-
try
|
|
175
|
-
let expected = getprop_raw_pub node "out" in
|
|
176
|
-
let actual = actual_fn (getprop_raw_pub node "in") in
|
|
177
|
-
if eqv expected actual then record group "single" true ""
|
|
178
|
-
else record group "single" false (Printf.sprintf "Expected: %s, got: %s" (stringify expected) (stringify actual))
|
|
179
|
-
with e -> record group "single" false (match e with Struct_error m -> m | _ -> Printexc.to_string e)
|
|
180
|
-
|
|
181
|
-
(* ---------------- arg helpers ---------------- *)
|
|
182
|
-
|
|
183
|
-
let arg1 f = fun args -> f (match args with x :: _ -> x | [] -> Noval)
|
|
184
|
-
let vget vin k = match vin with Map m -> (match omap_get m k with Some x -> x | None -> Noval) | _ -> Noval
|
|
185
|
-
let vhas vin k = match vin with Map m -> omap_has m k | _ -> false
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
# Vendored from voxgig/struct/perl (adapted).
|
|
2
|
-
# Test runner that uses the test model in .sdk/test - mirrors the rb
|
|
3
|
-
# struct_runner make_runner protocol on top of the perl struct port.
|
|
4
|
-
|
|
5
|
-
use strict;
|
|
6
|
-
use warnings;
|
|
7
|
-
|
|
8
|
-
use File::Basename ();
|
|
9
|
-
use Cwd ();
|
|
10
|
-
use Scalar::Util ();
|
|
11
|
-
|
|
12
|
-
my $__dir;
|
|
13
|
-
BEGIN { $__dir = File::Basename::dirname(Cwd::abs_path(__FILE__)) }
|
|
14
|
-
require(Cwd::abs_path("$__dir/../lib/Voxgig/Struct.pm"));
|
|
15
|
-
require(Cwd::abs_path("$__dir/../core/helpers.pm"));
|
|
16
|
-
|
|
17
|
-
package StructRunner;
|
|
18
|
-
|
|
19
|
-
our $NULLMARK = '__NULL__'; # Represents a JSON null in tests
|
|
20
|
-
our $UNDEFMARK = '__UNDEF__'; # Represents an undefined value
|
|
21
|
-
|
|
22
|
-
# Canonical comparison string: sorted-key JSON so key order is ignored
|
|
23
|
-
# (matches node's deepStrictEqual over the corpus).
|
|
24
|
-
sub canon {
|
|
25
|
-
my ($v) = @_;
|
|
26
|
-
return Voxgig::Struct::_stringify_inner($v, 1);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
# make_runner($testfile, $client)
|
|
30
|
-
# Returns a sub that accepts a name (e.g. "struct") and an optional store,
|
|
31
|
-
# and returns a hash (runpack) with:
|
|
32
|
-
# spec -> the extracted spec for that name,
|
|
33
|
-
# runset -> a sub to run a test set without extra flags,
|
|
34
|
-
# runsetflags -> a sub to run a test set with flags,
|
|
35
|
-
# subject -> the function (from the client utility) under test,
|
|
36
|
-
# client -> the client instance.
|
|
37
|
-
sub make_runner {
|
|
38
|
-
my ($testfile, $client) = @_;
|
|
39
|
-
return sub {
|
|
40
|
-
my ($name, $store) = @_;
|
|
41
|
-
$store = {} unless defined $store;
|
|
42
|
-
|
|
43
|
-
my $utility = $client->utility;
|
|
44
|
-
my $struct_utils = $utility->{struct};
|
|
45
|
-
|
|
46
|
-
my $spec = resolve_spec($name, $testfile);
|
|
47
|
-
my $clients = resolve_clients($client, $spec, $store, $struct_utils);
|
|
48
|
-
my $subject = resolve_subject($name, $utility);
|
|
49
|
-
|
|
50
|
-
my $runsetflags = sub {
|
|
51
|
-
my ($testspec, $flags, $testsubject) = @_;
|
|
52
|
-
my $use_subject = defined $testsubject ? $testsubject : $subject;
|
|
53
|
-
$flags = resolve_flags($flags);
|
|
54
|
-
my $testset = (Voxgig::Struct::ismap($testspec) && $testspec->{set}) || [];
|
|
55
|
-
my $idx = 0;
|
|
56
|
-
for my $entry (@{ Voxgig::Struct::islist($testset) ? $testset : [] }) {
|
|
57
|
-
next unless Voxgig::Struct::ismap($entry);
|
|
58
|
-
my $this_subject = $use_subject;
|
|
59
|
-
if (exists $entry->{client} && defined $clients->{ $entry->{client} }) {
|
|
60
|
-
my $cutil = $clients->{ $entry->{client} }->utility;
|
|
61
|
-
$this_subject = resolve_subject($name, $cutil);
|
|
62
|
-
}
|
|
63
|
-
my @args = resolve_args($entry);
|
|
64
|
-
my $got = eval { $this_subject->(@args) };
|
|
65
|
-
my $err = $@;
|
|
66
|
-
check_entry($name, $idx, $entry, $got, $err);
|
|
67
|
-
$idx++;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
my $runset = sub {
|
|
72
|
-
my ($testspec, $testsubject) = @_;
|
|
73
|
-
$runsetflags->($testspec, {}, $testsubject);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
spec => $spec,
|
|
78
|
-
runset => $runset,
|
|
79
|
-
runsetflags => $runsetflags,
|
|
80
|
-
subject => $subject,
|
|
81
|
-
client => $client,
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
# Loads the test JSON file and extracts the spec for the given name.
|
|
87
|
-
# Follows the pattern: alltests.primary?[name] || alltests[name] || alltests.
|
|
88
|
-
sub resolve_spec {
|
|
89
|
-
my ($name, $testfile) = @_;
|
|
90
|
-
my $text = do {
|
|
91
|
-
open my $fh, '<:raw', $testfile or die "Cannot open $testfile: $!";
|
|
92
|
-
local $/;
|
|
93
|
-
<$fh>;
|
|
94
|
-
};
|
|
95
|
-
my $all_tests = Voxgig::Struct::parse_json($text);
|
|
96
|
-
if (Voxgig::Struct::ismap($all_tests->{primary})
|
|
97
|
-
&& Voxgig::Struct::ismap($all_tests->{primary}{$name})) {
|
|
98
|
-
return $all_tests->{primary}{$name};
|
|
99
|
-
}
|
|
100
|
-
return $all_tests->{$name} if Voxgig::Struct::ismap($all_tests->{$name});
|
|
101
|
-
return $all_tests;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
# If the spec contains a DEF section with client definitions, resolve them.
|
|
105
|
-
sub resolve_clients {
|
|
106
|
-
my ($client, $spec, $store, $struct_utils) = @_;
|
|
107
|
-
my $clients = {};
|
|
108
|
-
my $defs = Voxgig::Struct::ismap($spec) ? $spec->{DEF} : undef;
|
|
109
|
-
if (Voxgig::Struct::ismap($defs) && Voxgig::Struct::ismap($defs->{client})) {
|
|
110
|
-
for my $cn (keys %{ $defs->{client} }) {
|
|
111
|
-
my $cdef = $defs->{client}{$cn};
|
|
112
|
-
my $copts = (Voxgig::Struct::ismap($cdef->{test})
|
|
113
|
-
&& Voxgig::Struct::ismap($cdef->{test}{options}))
|
|
114
|
-
? $cdef->{test}{options} : {};
|
|
115
|
-
$clients->{$cn} = $client->test($copts);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return $clients;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
# Returns the subject under test: the named entry of the utility map.
|
|
122
|
-
sub resolve_subject {
|
|
123
|
-
my ($name, $container, $subject) = @_;
|
|
124
|
-
return $subject if defined $subject;
|
|
125
|
-
return undef unless defined $container;
|
|
126
|
-
return $container->{$name} if ref($container) eq 'HASH'
|
|
127
|
-
|| (Scalar::Util::reftype($container) // '') eq 'HASH';
|
|
128
|
-
return undef;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
# Ensure flags is a hash and set "null" flag to 1 if not provided.
|
|
132
|
-
sub resolve_flags {
|
|
133
|
-
my ($flags) = @_;
|
|
134
|
-
$flags = {} unless defined $flags && ref $flags;
|
|
135
|
-
$flags->{null} = 1 unless exists $flags->{null};
|
|
136
|
-
return $flags;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
# By default pass a clone of entry.in; entry.ctx / entry.args override.
|
|
140
|
-
sub resolve_args {
|
|
141
|
-
my ($entry) = @_;
|
|
142
|
-
my @args;
|
|
143
|
-
if (exists $entry->{ctx}) {
|
|
144
|
-
@args = ($entry->{ctx});
|
|
145
|
-
}
|
|
146
|
-
elsif (exists $entry->{args}) {
|
|
147
|
-
my $a = $entry->{args};
|
|
148
|
-
@args = Voxgig::Struct::islist($a) ? @$a : ($a);
|
|
149
|
-
}
|
|
150
|
-
elsif (exists $entry->{in}) {
|
|
151
|
-
@args = (Voxgig::Struct::clone($entry->{in}), $entry);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
@args = (undef, $entry);
|
|
155
|
-
}
|
|
156
|
-
return @args;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
# Compare the run outcome against the entry (out / err / match).
|
|
160
|
-
sub check_entry {
|
|
161
|
-
my ($label_base, $idx, $entry, $got, $err) = @_;
|
|
162
|
-
my $label = "$label_base#$idx";
|
|
163
|
-
my $err_field = $entry->{err};
|
|
164
|
-
|
|
165
|
-
if (defined $err_field) {
|
|
166
|
-
# An error is expected: the subject must throw, and (unless err is
|
|
167
|
-
# literally true) the thrown message must contain the expected
|
|
168
|
-
# substring or match the /regex/.
|
|
169
|
-
if (!$err) {
|
|
170
|
-
die "[$label] expected error but none thrown (err=" . canon($err_field) . ")\n";
|
|
171
|
-
}
|
|
172
|
-
my $msg = "$err";
|
|
173
|
-
my $ok;
|
|
174
|
-
if (Voxgig::Struct::is_jbool($err_field)) {
|
|
175
|
-
$ok = $$err_field ? 1 : 0; # err: true -> any error
|
|
176
|
-
}
|
|
177
|
-
elsif (!ref $err_field) {
|
|
178
|
-
if ($err_field =~ m{^/(.+)/$}s) {
|
|
179
|
-
my $re = $1;
|
|
180
|
-
$ok = ($msg =~ /$re/) ? 1 : 0;
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
$ok = (index(lc $msg, lc $err_field) >= 0) ? 1 : 0;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
$ok = 1;
|
|
188
|
-
}
|
|
189
|
-
die "[$label] ERROR MATCH: [" . canon($err_field) . "] <=> [$msg]\n" unless $ok;
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
die "[$label] unexpected error: $err\n" if $err;
|
|
194
|
-
|
|
195
|
-
# Optional deep match against { in, out }.
|
|
196
|
-
if (Voxgig::Struct::ismap($entry->{match})) {
|
|
197
|
-
my $base = { 'in' => $entry->{in}, 'out' => $got };
|
|
198
|
-
match($label, $entry->{match}, $base);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
my $expected = exists $entry->{out} ? $entry->{out} : undef;
|
|
202
|
-
my $got_j = canon($got);
|
|
203
|
-
my $exp_j = canon($expected);
|
|
204
|
-
if ($got_j ne $exp_j) {
|
|
205
|
-
die "[$label] Mismatch: Expected $exp_j but got $got_j\n";
|
|
206
|
-
}
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
# Compares scalar values along each path of the check structure against
|
|
211
|
-
# the base.
|
|
212
|
-
sub match {
|
|
213
|
-
my ($label, $check, $base) = @_;
|
|
214
|
-
_match_walk($label, $check, $base, []);
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
sub _match_walk {
|
|
219
|
-
my ($label, $val, $base, $path) = @_;
|
|
220
|
-
if (Voxgig::Struct::ismap($val)) {
|
|
221
|
-
for my $k (keys %$val) {
|
|
222
|
-
_match_walk($label, $val->{$k}, $base, [@$path, $k]);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
elsif (Voxgig::Struct::islist($val)) {
|
|
226
|
-
for my $i (0 .. $#$val) {
|
|
227
|
-
_match_walk($label, $val->[$i], $base, [@$path, $i]);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
my $baseval = ProjectNameHelpers::gpath($base, [@$path]);
|
|
232
|
-
return if canon($val) eq canon($baseval);
|
|
233
|
-
return if defined $val && !ref($val) && $val eq $UNDEFMARK && !defined $baseval;
|
|
234
|
-
if (matchval($val, $baseval)) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
die "[$label] MATCH: " . join('.', @$path) . ' : ['
|
|
238
|
-
. canon($val) . '] <=> [' . canon($baseval) . "]\n";
|
|
239
|
-
}
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
sub matchval {
|
|
244
|
-
my ($check, $base) = @_;
|
|
245
|
-
return 1 if canon($check) eq canon($base);
|
|
246
|
-
if (defined $check && !ref $check) {
|
|
247
|
-
my $basestr = Voxgig::Struct::stringify($base);
|
|
248
|
-
if ($check =~ m{^/(.+)/$}s) {
|
|
249
|
-
my $re = $1;
|
|
250
|
-
return ($basestr =~ /$re/) ? 1 : 0;
|
|
251
|
-
}
|
|
252
|
-
return (index(lc $basestr, lc Voxgig::Struct::stringify($check)) >= 0) ? 1 : 0;
|
|
253
|
-
}
|
|
254
|
-
return ref $check eq 'CODE' ? 1 : 0;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
# StructTestClient is a minimal shim that provides the client interface
|
|
258
|
-
# needed by the struct test runner within the SDK context.
|
|
259
|
-
package StructTestClient;
|
|
260
|
-
|
|
261
|
-
sub new {
|
|
262
|
-
my ($class) = @_;
|
|
263
|
-
return bless {}, $class;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
sub utility {
|
|
267
|
-
return { struct => ProjectNameHelpers::struct_facade() };
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
sub test {
|
|
271
|
-
my ($self, $options) = @_;
|
|
272
|
-
return $self;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
1;
|