Util.JS: Support converting between JSC.Value and GLib.Variant objects
Add `variant_to_value` and `value_to_variant` methods, document them and add tests.
This commit is contained in:
parent
d7af23201c
commit
1ba2bd0f5b
2 changed files with 284 additions and 0 deletions
|
|
@ -7,9 +7,23 @@
|
|||
|
||||
public class Util.JS.Test : TestCase {
|
||||
|
||||
|
||||
private JSC.Context? context = null;
|
||||
|
||||
|
||||
public Test() {
|
||||
base("Util.JS.Test");
|
||||
add_test("escape_string", escape_string);
|
||||
add_test("to_variant", to_variant);
|
||||
add_test("to_value", to_value);
|
||||
}
|
||||
|
||||
public override void set_up() throws GLib.Error {
|
||||
this.context = new JSC.Context();
|
||||
}
|
||||
|
||||
public override void tear_down() throws GLib.Error {
|
||||
this.context = null;
|
||||
}
|
||||
|
||||
public void escape_string() throws GLib.Error {
|
||||
|
|
@ -21,4 +35,115 @@ public class Util.JS.Test : TestCase {
|
|||
|
||||
assert(Util.JS.escape_string("something…\n") == """something…\n""");
|
||||
}
|
||||
|
||||
public void to_variant() throws GLib.Error {
|
||||
assert_equal(
|
||||
value_to_variant(new JSC.Value.null(this.context)).print(true),
|
||||
"@mv nothing"
|
||||
);
|
||||
assert_equal(
|
||||
value_to_variant(new JSC.Value.string(this.context, "test")).print(true),
|
||||
"'test'"
|
||||
);
|
||||
assert_equal(
|
||||
value_to_variant(new JSC.Value.number(this.context, 1.0)).print(true),
|
||||
"1.0"
|
||||
);
|
||||
assert_equal(
|
||||
value_to_variant(new JSC.Value.boolean(this.context, true)).print(true),
|
||||
"true"
|
||||
);
|
||||
assert_equal(
|
||||
value_to_variant(new JSC.Value.boolean(this.context, false)).print(true),
|
||||
"false"
|
||||
);
|
||||
|
||||
var value = new JSC.Value.array_from_garray(this.context, null);
|
||||
assert_equal(
|
||||
value_to_variant(value).print(true),
|
||||
"@av []"
|
||||
);
|
||||
var array = new GLib.GenericArray<JSC.Value>();
|
||||
array.add(new JSC.Value.string(this.context, "test"));
|
||||
value = new JSC.Value.array_from_garray(this.context, array);
|
||||
assert_equal(
|
||||
value_to_variant(value).print(true),
|
||||
"[<'test'>]"
|
||||
);
|
||||
value = new JSC.Value.object(this.context, null, null);
|
||||
assert_equal(
|
||||
value_to_variant(value).print(true),
|
||||
"@a{sv} {}"
|
||||
);
|
||||
value.object_set_property(
|
||||
"test", new JSC.Value.boolean(this.context, true)
|
||||
);
|
||||
assert_equal(
|
||||
value_to_variant(value).print(true),
|
||||
"{'test': <<true>>}"
|
||||
);
|
||||
}
|
||||
|
||||
public void to_value() throws GLib.Error {
|
||||
var variant = new GLib.Variant.maybe(GLib.VariantType.STRING, null);
|
||||
var value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_null(), variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.string("test");
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_string(), variant.print(true));
|
||||
assert_equal(value.to_string(), "test", variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.int32(42);
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_number(), variant.print(true));
|
||||
assert_equal<int32?>(value.to_int32(), 42, variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.double(42.0);
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_number(), variant.print(true));
|
||||
assert_within(value.to_double(), 42.0, 0.0000001, variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.boolean(true);
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_boolean(), variant.print(true));
|
||||
assert_true(value.to_boolean(), variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.boolean(false);
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_boolean(), variant.print(true));
|
||||
assert_false(value.to_boolean(), variant.print(true));
|
||||
|
||||
variant = new GLib.Variant.strv({"test"});
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_array(), variant.print(true));
|
||||
assert_true(
|
||||
value.object_get_property_at_index(0).is_string(),
|
||||
variant.print(true)
|
||||
);
|
||||
assert_equal(
|
||||
value.object_get_property_at_index(0).to_string(),
|
||||
"test",
|
||||
variant.print(true)
|
||||
);
|
||||
|
||||
var dict = new GLib.VariantDict();
|
||||
variant = dict.end();
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_object(), variant.print(true));
|
||||
|
||||
dict = new GLib.VariantDict();
|
||||
dict.insert_value("test", new GLib.Variant.boolean(true));
|
||||
variant = dict.end();
|
||||
value = variant_to_value(this.context, variant);
|
||||
assert_true(value.is_object(), variant.print(true));
|
||||
assert_true(
|
||||
value.object_get_property("test").is_boolean(),
|
||||
value.to_string()
|
||||
);
|
||||
assert_true(
|
||||
value.object_get_property("test").to_boolean(),
|
||||
value.to_string()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue