@voxgig/sdkgen 4.8.2 → 4.8.3
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/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/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 +209 -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 +151 -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 +439 -0
- package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -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 +897 -0
- package/project/.sdk/tm/go/test/omni/util.go +360 -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 +613 -0
- package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -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 +74 -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 +152 -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 +92 -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 +455 -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 +566 -0
- package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -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/test/primary_utility_test.zig +1 -1
- package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
- 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
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ProjectName SDK struct utility test
|
|
2
|
+
#
|
|
3
|
+
# Corpus sections run through the vendored omni runner, via the resolver
|
|
4
|
+
# in test/omni.rb (struct-runner shape over native voxgig_omni;
|
|
5
|
+
# test/struct_runner.rb is retired - see
|
|
6
|
+
# docs/design/vendor-tag-rollout.md).
|
|
2
7
|
|
|
3
8
|
require 'minitest/autorun'
|
|
4
9
|
require 'json'
|
|
5
|
-
require_relative '../
|
|
6
|
-
require_relative '
|
|
10
|
+
require_relative '../ProjectName_sdk'
|
|
11
|
+
require_relative 'omni'
|
|
7
12
|
|
|
8
13
|
# A helper for deep equality comparison using JSON round-trip.
|
|
9
14
|
def deep_equal(a, b)
|
|
@@ -29,13 +34,14 @@ STRUCT_TEST_JSON_FILE = File.join(__dir__, '../../.sdk/test/test.json')
|
|
|
29
34
|
|
|
30
35
|
class StructUtilityTest < Minitest::Test
|
|
31
36
|
def setup
|
|
32
|
-
|
|
33
|
-
@
|
|
37
|
+
# The struct corpus drives the LIVE SDK's struct utilities, as ts does.
|
|
38
|
+
@client = ProjectNameSDK.test(nil, nil)
|
|
39
|
+
@runner = ProjectNameOmni.make_runner(STRUCT_TEST_JSON_FILE, @client)
|
|
34
40
|
@runpack = @runner.call('struct')
|
|
35
41
|
@spec = @runpack[:spec]
|
|
36
42
|
@runset = @runpack[:runset]
|
|
37
43
|
@runsetflags = @runpack[:runsetflags]
|
|
38
|
-
@struct =
|
|
44
|
+
@struct = VoxgigStruct
|
|
39
45
|
@minor_spec = @spec["minor"]
|
|
40
46
|
@walk_spec = @spec["walk"]
|
|
41
47
|
@merge_spec = @spec["merge"]
|
|
@@ -105,7 +111,7 @@ class StructUtilityTest < Minitest::Test
|
|
|
105
111
|
|
|
106
112
|
def test_minor_stringify
|
|
107
113
|
@runsetflags.call(@minor_spec["stringify"], {}, lambda { |vin|
|
|
108
|
-
value = vin.key?("val") ? (vin["val"] ==
|
|
114
|
+
value = vin.key?("val") ? (vin["val"] == ProjectNameOmni::NULLMARK ? "null" : vin["val"]) : ""
|
|
109
115
|
VoxgigStruct.stringify(value, vin["max"])
|
|
110
116
|
})
|
|
111
117
|
end
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
# VENDORED: @voxgig/omni sdk-20260904-1610-0 (ruby/lib/voxgig_omni/runner.rb)
|
|
2
|
+
# Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
|
|
3
|
+
# License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
|
|
4
|
+
# Omni: the shared multi-language test runner.
|
|
5
|
+
#
|
|
6
|
+
# Port of the canonical TypeScript implementation
|
|
7
|
+
# (typescript/src/Runner.ts). Behaviour must match, case for case.
|
|
8
|
+
|
|
9
|
+
require 'json'
|
|
10
|
+
|
|
11
|
+
require_relative 'util'
|
|
12
|
+
|
|
13
|
+
module VoxgigOmni
|
|
14
|
+
# The newest spec format version this runner understands. A spec with no
|
|
15
|
+
# OMNI block is version 0: the original, lenient format, frozen forever.
|
|
16
|
+
# Version 1 turns on strict entry validation (see checkentry).
|
|
17
|
+
SPECVERSION = 1
|
|
18
|
+
|
|
19
|
+
# Capability strings this runner supports beyond the version baseline. A
|
|
20
|
+
# spec's OMNI.requires list is checked against this: an unknown capability
|
|
21
|
+
# refuses the spec loudly at load time, instead of a lagging port silently
|
|
22
|
+
# mis-running it. (Empty today; future format features mint a string here.)
|
|
23
|
+
CAPABILITIES = []
|
|
24
|
+
|
|
25
|
+
# A test failure (or a malformed spec). Distinct from errors raised by
|
|
26
|
+
# the subject under test, which are candidates for an `err` expectation.
|
|
27
|
+
class OmniError < StandardError
|
|
28
|
+
attr_reader :entry
|
|
29
|
+
|
|
30
|
+
def initialize(message, entry = nil)
|
|
31
|
+
super(message)
|
|
32
|
+
@entry = entry
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
module Runner
|
|
37
|
+
module_function
|
|
38
|
+
|
|
39
|
+
U = VoxgigOmni::Util
|
|
40
|
+
|
|
41
|
+
# The complete set of fields an entry may carry. Under version 1
|
|
42
|
+
# anything else is an error: an unrecognised key is almost always a
|
|
43
|
+
# typo'd assertion, and a typo'd assertion is a test that silently
|
|
44
|
+
# stopped testing.
|
|
45
|
+
ENTRYFIELDS = %w[in args ctx out err match client id doc]
|
|
46
|
+
|
|
47
|
+
# Load a spec: a path to a JSON file, or an already-parsed object.
|
|
48
|
+
def loadspec(specref)
|
|
49
|
+
return JSON.parse(File.read(specref)) if specref.is_a?(String)
|
|
50
|
+
|
|
51
|
+
specref
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Read the spec's format version from its optional top-level OMNI
|
|
55
|
+
# block, and refuse a spec this runner cannot faithfully run: a version
|
|
56
|
+
# newer than SPECVERSION, or a required capability not in CAPABILITIES.
|
|
57
|
+
def resolveversion(alltests)
|
|
58
|
+
return 0 unless U.ismap(alltests) && alltests.key?('OMNI')
|
|
59
|
+
|
|
60
|
+
meta = alltests['OMNI']
|
|
61
|
+
version = U.ismap(meta) ? meta['version'] : nil
|
|
62
|
+
|
|
63
|
+
if !U.ismap(meta) || !U.isnum(version) || version % 1 != 0
|
|
64
|
+
raise OmniError, 'omni: malformed OMNI version block'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if version.negative? || SPECVERSION < version
|
|
68
|
+
raise OmniError, 'omni: unsupported spec version: ' + U.stringify(version)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
if meta.key?('requires')
|
|
72
|
+
requires = meta['requires']
|
|
73
|
+
raise OmniError, 'omni: malformed OMNI requires list' unless U.islist(requires)
|
|
74
|
+
|
|
75
|
+
requires.each do |cap|
|
|
76
|
+
unless cap.is_a?(String) && CAPABILITIES.include?(cap)
|
|
77
|
+
raise OmniError, 'omni: spec requires unsupported capability: ' + U.stringify(cap)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
version
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Strict entry validation, applied when the spec declares version 1 or
|
|
86
|
+
# later. The lenient format converts each of these mistakes into a
|
|
87
|
+
# silent pass or a dead field; here they fail with the entry named.
|
|
88
|
+
def checkentry(flags, index, entry)
|
|
89
|
+
raise fail(flags, index, entry, 'entry is not a map') unless U.ismap(entry)
|
|
90
|
+
|
|
91
|
+
entry.each_key do |key|
|
|
92
|
+
raise fail(flags, index, entry, 'unknown entry field: ' + key.to_s) unless ENTRYFIELDS.include?(key)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
argsources = %w[in args ctx].count { |key| entry.key?(key) }
|
|
96
|
+
raise fail(flags, index, entry, 'entry has more than one of in, args, ctx') if argsources > 1
|
|
97
|
+
|
|
98
|
+
raise fail(flags, index, entry, 'entry has both err and out') if !entry['err'].nil? && entry.key?('out')
|
|
99
|
+
|
|
100
|
+
raise fail(flags, index, entry, 'entry id is not a string') if entry.key?('id') && !entry['id'].is_a?(String)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Validate a version-1 group up front, against the AUTHORED entries -
|
|
104
|
+
# null-normalisation would otherwise rewrite an authored null (e.g.
|
|
105
|
+
# id: null) into a sentinel string and hide it from validation. A
|
|
106
|
+
# malformed spec is a spec error, not a test result, so it fails
|
|
107
|
+
# before any subject runs.
|
|
108
|
+
def checkset(flags, testspec, normalset)
|
|
109
|
+
origset = U.ismap(testspec) && U.islist(testspec['set']) ? testspec['set'] : normalset
|
|
110
|
+
|
|
111
|
+
if origset.empty? && (U.ismap(testspec) ? testspec['empty'] : nil) != true
|
|
112
|
+
raise OmniError, 'omni: empty test set: ' + flags[:name].to_s
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
origset.each_with_index do |entry, index|
|
|
116
|
+
checkentry(flags, index, entry)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Find `primary.<name>`, then `<name>`, then the whole spec.
|
|
121
|
+
def resolvespec(name, alltests)
|
|
122
|
+
return alltests if name.nil?
|
|
123
|
+
|
|
124
|
+
primary = U.ismap(alltests) ? alltests['primary'] : nil
|
|
125
|
+
return primary[name] if U.ismap(primary) && !primary[name].nil?
|
|
126
|
+
|
|
127
|
+
return alltests[name] if U.ismap(alltests) && !alltests[name].nil?
|
|
128
|
+
|
|
129
|
+
alltests
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Build the named clients declared by the spec's DEF.client block.
|
|
133
|
+
def resolveclients(provider, spec, store)
|
|
134
|
+
clients = {}
|
|
135
|
+
|
|
136
|
+
defclient = U.ismap(spec) && U.ismap(spec['DEF']) ? spec['DEF']['client'] : nil
|
|
137
|
+
return clients unless U.ismap(defclient)
|
|
138
|
+
|
|
139
|
+
# A spec may define clients that a given test run never references.
|
|
140
|
+
clientmaker = provider[:client]
|
|
141
|
+
return clients if clientmaker.nil?
|
|
142
|
+
|
|
143
|
+
defclient.each do |clientname, cdef|
|
|
144
|
+
copts = U.clone((U.ismap(cdef) && U.ismap(cdef['test']) ? cdef['test']['options'] : nil) || {})
|
|
145
|
+
|
|
146
|
+
injector = provider[:inject]
|
|
147
|
+
injector.call(copts, store) if U.ismap(store) && !injector.nil?
|
|
148
|
+
|
|
149
|
+
clients[clientname] = clientmaker.call(copts)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
clients
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def resolvesubject(name, provider)
|
|
156
|
+
return nil if name.nil? || provider[:subject].nil?
|
|
157
|
+
|
|
158
|
+
provider[:subject].call(name)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def resolveflags(flags)
|
|
162
|
+
out = flags.nil? ? {} : flags.dup
|
|
163
|
+
out[:null] = out[:null].nil? ? true : !!out[:null]
|
|
164
|
+
out
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# An entry with no `out` expects a null (or absent) result.
|
|
168
|
+
def resolveentry(entry, flags)
|
|
169
|
+
entry['out'] = NULLMARK if entry['out'].nil? && flags[:null]
|
|
170
|
+
entry
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def resolvetestpack(name, entry, subject, provider, clients)
|
|
174
|
+
testpack = { client: provider, subject: subject }
|
|
175
|
+
|
|
176
|
+
unless entry['client'].nil?
|
|
177
|
+
client = clients[entry['client']]
|
|
178
|
+
raise OmniError.new('omni: unknown client: ' + entry['client'].to_s, entry) if client.nil?
|
|
179
|
+
|
|
180
|
+
testpack[:client] = client
|
|
181
|
+
testpack[:subject] = resolvesubject(name, client) || subject
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
testpack
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Build the argument list: `ctx`, `args`, or `in`.
|
|
188
|
+
def resolveargs(entry, testpack, provider)
|
|
189
|
+
args = if entry.key?('ctx')
|
|
190
|
+
[entry['ctx']]
|
|
191
|
+
elsif entry.key?('args')
|
|
192
|
+
entry['args']
|
|
193
|
+
else
|
|
194
|
+
[U.clone(entry['in'])]
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
if (entry.key?('ctx') || entry.key?('args')) && !args.empty?
|
|
198
|
+
first = args[0]
|
|
199
|
+
if U.ismap(first)
|
|
200
|
+
first = U.clone(first)
|
|
201
|
+
contextify = provider[:contextify]
|
|
202
|
+
first = contextify.call(first) unless contextify.nil?
|
|
203
|
+
args[0] = first
|
|
204
|
+
entry['ctx'] = first
|
|
205
|
+
first['client'] = testpack[:client] if U.ismap(first)
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
args
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Nulls become NULLMARK, errors become {name,message}. Always a copy.
|
|
213
|
+
def fixjson(val, flags = nil)
|
|
214
|
+
donull = flags.nil? || flags[:null].nil? ? true : !!flags[:null]
|
|
215
|
+
fixjsonval(val, donull)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def fixjsonval(val, donull)
|
|
219
|
+
return donull ? NULLMARK : nil if val.nil? || val.equal?(ABSENT)
|
|
220
|
+
|
|
221
|
+
return errify(val) if val.is_a?(Exception)
|
|
222
|
+
|
|
223
|
+
return val.map { |entry| fixjsonval(entry, donull) } if U.islist(val)
|
|
224
|
+
|
|
225
|
+
if U.ismap(val)
|
|
226
|
+
out = {}
|
|
227
|
+
val.each { |key, subval| out[key] = fixjsonval(subval, donull) }
|
|
228
|
+
return out
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
val
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# The JSON form of an error: always at least {name,message}.
|
|
235
|
+
# An exception collapses to {name, message} here. A library whose errors
|
|
236
|
+
# carry a `code` reaches `match: {err: {code}}` through
|
|
237
|
+
# `Provider.errify`, which replaces this entirely.
|
|
238
|
+
def errify(err)
|
|
239
|
+
return { 'name' => 'Error', 'message' => err.to_s } unless err.is_a?(Exception)
|
|
240
|
+
|
|
241
|
+
{ 'name' => err.class.name, 'message' => err.message }
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# The error base a `match.err` sees: the provider's own, when it has one.
|
|
245
|
+
def errbase(err, provider)
|
|
246
|
+
hook = provider.is_a?(Hash) ? provider[:errify] : nil
|
|
247
|
+
hook.nil? ? errify(err) : hook.call(err)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def errmessage(err)
|
|
251
|
+
err.is_a?(Exception) ? err.message : err.to_s
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# The label of one entry, for failure messages.
|
|
255
|
+
def entryref(flags, index, entry)
|
|
256
|
+
label = flags[:name] || 'set'
|
|
257
|
+
entryid = U.ismap(entry) && !entry['id'].nil? ? ' (' + entry['id'].to_s + ')' : ''
|
|
258
|
+
"#{label}[#{index}]#{entryid}"
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def fail(flags, index, entry, reason, expected = nil, actual = nil)
|
|
262
|
+
msg = 'omni: ' + entryref(flags, index, entry) + ': ' + reason
|
|
263
|
+
msg += "\n expected: " + expected unless expected.nil?
|
|
264
|
+
msg += "\n actual: " + actual unless actual.nil?
|
|
265
|
+
msg += "\n entry: " + U.stringify(entrysummary(entry))
|
|
266
|
+
OmniError.new(msg, entry)
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# The spec-defined part of an entry (drop runner bookkeeping).
|
|
270
|
+
def entrysummary(entry)
|
|
271
|
+
return entry unless U.ismap(entry)
|
|
272
|
+
|
|
273
|
+
out = {}
|
|
274
|
+
entry.each { |key, val| out[key] = val unless %w[res thrown ctx].include?(key) }
|
|
275
|
+
out
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def checkresult(flags, index, entry, args, res)
|
|
279
|
+
matched = false
|
|
280
|
+
|
|
281
|
+
unless entry['err'].nil?
|
|
282
|
+
raise fail(flags, index, entry, 'expected error did not occur',
|
|
283
|
+
U.stringify(entry['err']), U.stringify(res))
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
unless entry['match'].nil?
|
|
287
|
+
match(flags, index, entry, entry['match'],
|
|
288
|
+
{ 'in' => entry['in'], 'args' => args, 'out' => entry['res'], 'ctx' => entry['ctx'] })
|
|
289
|
+
matched = true
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
out = entry['out']
|
|
293
|
+
|
|
294
|
+
return if U.deepequal(res, out)
|
|
295
|
+
|
|
296
|
+
# NOTE: a match with no explicit out is a complete check on its own.
|
|
297
|
+
return if matched && (out == NULLMARK || out.nil?)
|
|
298
|
+
|
|
299
|
+
raise fail(flags, index, entry, 'result mismatch', U.stringify(out), U.stringify(res))
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def handleerror(flags, index, entry, err, provider = nil)
|
|
303
|
+
entry['thrown'] = err
|
|
304
|
+
|
|
305
|
+
entryerr = entry['err']
|
|
306
|
+
|
|
307
|
+
unless entryerr.nil?
|
|
308
|
+
if entryerr == true || matchval(entryerr, errmessage(err))
|
|
309
|
+
unless entry['match'].nil?
|
|
310
|
+
match(flags, index, entry, entry['match'],
|
|
311
|
+
{ 'in' => entry['in'], 'out' => entry['res'], 'ctx' => entry['ctx'],
|
|
312
|
+
'err' => errbase(err, provider) })
|
|
313
|
+
end
|
|
314
|
+
return
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
raise fail(flags, index, entry, 'error mismatch', U.stringify(entryerr), errmessage(err))
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
raise fail(flags, index, entry, 'unexpected error', nil, errmessage(err))
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Check that every leaf of `check` is present, and matches, in `base`.
|
|
324
|
+
def match(flags, index, entry, check, base)
|
|
325
|
+
cbase = U.clone(base)
|
|
326
|
+
|
|
327
|
+
at = ->(path) { path.empty? ? '<root>' : U.pathify(path) }
|
|
328
|
+
|
|
329
|
+
apply = lambda do |_key, val, _parent, path|
|
|
330
|
+
# An empty container in the check is a structural placeholder: walk
|
|
331
|
+
# visits no leaves inside {} or [], so it asserts nothing about the
|
|
332
|
+
# base. (struct's corpus relies on this "map is here, contents
|
|
333
|
+
# unchecked" behaviour, so omni stays a faithful drop-in.)
|
|
334
|
+
unless U.isnode(val)
|
|
335
|
+
baseval = U.getpath(cbase, path)
|
|
336
|
+
|
|
337
|
+
# The sentinels are tested BEFORE the identity check below.
|
|
338
|
+
# Otherwise a subject returning the literal string "__UNDEF__"
|
|
339
|
+
# satisfies an assertion that the key is absent - two mutually
|
|
340
|
+
# exclusive states passing one check. A sentinel that accepts its
|
|
341
|
+
# own literal is not a sentinel. (NULLMARK still accepts NULLMARK:
|
|
342
|
+
# under the default null flag a real null has already been
|
|
343
|
+
# normalised to it, so the two are genuinely indistinguishable
|
|
344
|
+
# here - that one needs a raw-value escape, not an ordering
|
|
345
|
+
# change.)
|
|
346
|
+
|
|
347
|
+
# Explicitly absent: satisfied only by a genuinely missing key,
|
|
348
|
+
# never by a present null (the distinction the sentinels exist
|
|
349
|
+
# to keep).
|
|
350
|
+
if val == UNDEFMARK
|
|
351
|
+
next val if baseval.equal?(ABSENT)
|
|
352
|
+
|
|
353
|
+
raise fail(flags, index, entry, 'expected absent at ' + at.call(path),
|
|
354
|
+
'absent', U.stringify(baseval))
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Explicitly null: satisfied only by a present null.
|
|
358
|
+
if val == NULLMARK
|
|
359
|
+
next val if baseval.nil? || baseval == NULLMARK
|
|
360
|
+
|
|
361
|
+
raise fail(flags, index, entry, 'expected null at ' + at.call(path),
|
|
362
|
+
'null', U.stringify(baseval))
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# Explicitly present: any present value, including null.
|
|
366
|
+
if val == EXISTSMARK
|
|
367
|
+
next val unless baseval.equal?(ABSENT)
|
|
368
|
+
|
|
369
|
+
raise fail(flags, index, entry, 'expected present at ' + at.call(path),
|
|
370
|
+
'present', 'absent')
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Identical values match. This sits below the sentinel branches on
|
|
374
|
+
# purpose - see the note above.
|
|
375
|
+
next val if U.deepequal(baseval, val)
|
|
376
|
+
|
|
377
|
+
# A concrete expectation never matches a missing key - a match leaf
|
|
378
|
+
# against an absent value must fail, not substring-match the
|
|
379
|
+
# stringified absent value.
|
|
380
|
+
if baseval.equal?(ABSENT)
|
|
381
|
+
raise fail(flags, index, entry, 'match failed at ' + at.call(path),
|
|
382
|
+
U.stringify(val), 'absent')
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
unless matchval(val, baseval)
|
|
386
|
+
raise fail(flags, index, entry, 'match failed at ' + at.call(path),
|
|
387
|
+
U.stringify(val), U.stringify(baseval))
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
val
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
U.walk(U.clone(check), apply)
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
# Match one leaf: /regex/ or case-insensitive substring for strings.
|
|
398
|
+
def matchval(check, base)
|
|
399
|
+
return true if U.deepequal(check, base)
|
|
400
|
+
|
|
401
|
+
want = check
|
|
402
|
+
want = nil if want == UNDEFMARK || want == NULLMARK
|
|
403
|
+
|
|
404
|
+
return base.nil? || base.equal?(ABSENT) || base == NULLMARK if want.nil?
|
|
405
|
+
|
|
406
|
+
if want.is_a?(String)
|
|
407
|
+
# An empty want is not a wildcard: the empty string is a substring of
|
|
408
|
+
# everything, so `match:{out:""}` (or `err:""`) would accept any value.
|
|
409
|
+
return base == '' if want == ''
|
|
410
|
+
|
|
411
|
+
basestr = U.stringify(base)
|
|
412
|
+
|
|
413
|
+
rem = want.match(%r{^/(.+)/$}m)
|
|
414
|
+
return !Regexp.new(rem[1]).match(basestr).nil? if rem
|
|
415
|
+
|
|
416
|
+
return basestr.downcase.include?(want.downcase)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
return true if want.is_a?(Proc) || want.is_a?(Method)
|
|
420
|
+
|
|
421
|
+
U.deepequal(want, base)
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
# Convert NULLMARK sentinels back into real nulls.
|
|
425
|
+
def nullmodifier(val, key, parent, *_rest)
|
|
426
|
+
if val == NULLMARK
|
|
427
|
+
parent[key] = nil
|
|
428
|
+
elsif val.is_a?(String)
|
|
429
|
+
parent[key] = val.gsub(NULLMARK, 'null')
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# Make a runner for a spec file (or spec object) and a provider.
|
|
434
|
+
def make_runner(specref, provider = nil)
|
|
435
|
+
alltests = loadspec(specref)
|
|
436
|
+
specversion = resolveversion(alltests)
|
|
437
|
+
useprovider = provider || {}
|
|
438
|
+
|
|
439
|
+
lambda do |name = nil, store = nil|
|
|
440
|
+
spec = resolvespec(name, alltests)
|
|
441
|
+
clients = resolveclients(useprovider, spec, store.nil? ? {} : store)
|
|
442
|
+
defsubject = resolvesubject(name, useprovider)
|
|
443
|
+
|
|
444
|
+
runsetflags = lambda do |testspec, flags, testsubject = nil|
|
|
445
|
+
useflags = resolveflags(flags)
|
|
446
|
+
useflags[:name] = useflags[:name] || name || 'set'
|
|
447
|
+
|
|
448
|
+
subject = testsubject || defsubject
|
|
449
|
+
raise OmniError, 'omni: no test subject for: ' + useflags[:name].to_s if subject.nil?
|
|
450
|
+
|
|
451
|
+
testspecmap = fixjson(testspec, useflags)
|
|
452
|
+
|
|
453
|
+
unless U.ismap(testspecmap) && U.islist(testspecmap['set'])
|
|
454
|
+
raise OmniError, 'omni: test spec has no set: ' + useflags[:name].to_s
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
testset = testspecmap['set']
|
|
458
|
+
|
|
459
|
+
checkset(useflags, testspec, testset) if 1 <= specversion
|
|
460
|
+
|
|
461
|
+
testset.each_with_index do |entry, index|
|
|
462
|
+
begin
|
|
463
|
+
entry = resolveentry(entry, useflags)
|
|
464
|
+
|
|
465
|
+
testpack = resolvetestpack(name, entry, subject, useprovider, clients)
|
|
466
|
+
args = resolveargs(entry, testpack, useprovider)
|
|
467
|
+
|
|
468
|
+
res = testpack[:subject].call(*args)
|
|
469
|
+
res = fixjson(res, useflags)
|
|
470
|
+
entry['res'] = res
|
|
471
|
+
|
|
472
|
+
checkresult(useflags, index, entry, args, res)
|
|
473
|
+
rescue OmniError
|
|
474
|
+
raise
|
|
475
|
+
rescue StandardError => e
|
|
476
|
+
handleerror(useflags, index, entry, e, useprovider)
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
runset = ->(testspec, testsubject = nil) { runsetflags.call(testspec, {}, testsubject) }
|
|
482
|
+
|
|
483
|
+
{
|
|
484
|
+
spec: spec,
|
|
485
|
+
runset: runset,
|
|
486
|
+
runsetflags: runsetflags,
|
|
487
|
+
subject: defsubject,
|
|
488
|
+
client: useprovider
|
|
489
|
+
}
|
|
490
|
+
end
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
end
|