--- a/crates/jrsonnet-evaluator/src/val.rs +++ b/crates/jrsonnet-evaluator/src/val.rs @@ -616,6 +616,11 @@ Self::Obj(value) } } +impl From for Val { + fn from(value: bool) -> Self { + Self::Bool(value) + } +} const fn is_function_like(val: &Val) -> bool { matches!(val, Val::Func(_)) --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -6,10 +6,12 @@ [features] default = ["ir-parser"] +experimental = ["exp-destruct", "exp-null-coaelse", "exp-preserve-order"] ir-parser = ["jrsonnet-evaluator/ir-parser"] peg-parser = ["jrsonnet-evaluator/peg-parser"] exp-destruct = ["jrsonnet-evaluator/exp-destruct"] exp-null-coaelse = ["jrsonnet-evaluator/exp-null-coaelse"] +exp-preserve-order = ["jrsonnet-stdlib/exp-preserve-order"] [lints] workspace = true --- a/tests/suite/std_param_names.jsonnet +++ b/tests/suite/std_param_names.jsonnet @@ -170,7 +170,26 @@ deg2rad: ['x'], rad2deg: ['x'], hypot: ['x', 'y'], -}; +} + (if test.expPreserveOrder then { + manifestIni+: ['preserve_order'], + manifestJson+: ['preserve_order'], + manifestJsonEx+: ['preserve_order'], + manifestJsonMinified+: ['preserve_order'], + manifestPython+: ['preserve_order'], + manifestPythonVars+: ['preserve_order'], + manifestToml+: ['preserve_order'], + manifestTomlEx+: ['preserve_order'], + manifestYamlDoc+: ['preserve_order'], + manifestYamlStream+: ['preserve_order'], + objectFields+: ['preserve_order'], + objectFieldsAll+: ['preserve_order'], + objectFieldsEx+: ['preserve_order'], + objectKeysValues+: ['preserve_order'], + objectKeysValuesAll+: ['preserve_order'], + objectValues+: ['preserve_order'], + objectValuesAll+: ['preserve_order'], + prune+: ['preserve_order'], +} else {}); std.all(std.map(function(key) assertNames(key, names[key]), std.objectFields(names))) && std.all([ --- a/tests/tests/common.rs +++ b/tests/tests/common.rs @@ -71,6 +71,8 @@ let mut bobj = ObjValueBuilder::new(); bobj.method("assertThrow", assert_throw {}); bobj.method("paramNames", param_names {}); + bobj.field("expPreserveOrder") + .value(cfg!(feature = "exp-preserve-order")); builder.bind("test", Thunk::evaluated(Val::Obj(bobj.build()))); }