semantic/field-namespace-owned.test \
semantic/field-non-constant.test \
semantic/field-void.test \
+ semantic/floating-reference.vala \
semantic/foreach-iterator-args.test \
semantic/foreach-iterator-void.test \
semantic/foreach-iterator-wrong-types.test \
--- /dev/null
+[CCode (returns_floating_reference = true)]
+Variant get_floating_variant () {
+ return new Variant.string ("foo");
+}
+
+void test_variant () {
+ {
+ string? @value = "bar";
+ Variant? variant = new Variant.string (@value) ?? new Variant.string (@value);
+ assert (variant.is_of_type (VariantType.STRING));
+ assert (!variant.is_floating ());
+ }
+ {
+ string? @value = "foo";
+ Variant? variant = @value == null ? null : new Variant.string (@value);
+ assert (variant.is_of_type (VariantType.STRING));
+ assert (!variant.is_floating ());
+ }
+ {
+ string? @value = "foo";
+ Variant? variant;
+ if (@value == null) {
+ variant = null;
+ } else {
+ variant = new Variant.string (@value);
+ }
+ assert (variant.is_of_type (VariantType.STRING));
+ assert (!variant.is_floating ());
+ }
+ {
+ bool @value = true;
+ Variant? variant = new Variant.boolean (@value);
+ assert (variant.is_of_type (VariantType.BOOLEAN));
+ assert (!variant.is_floating ());
+ }
+ {
+ string? @value = "manam";
+ Variant? variant = new Variant.string (@value);
+ assert (variant.is_of_type (VariantType.STRING));
+ assert (!variant.is_floating ());
+ string s = (string) variant;
+ assert (s == "manam");
+ }
+ {
+ Variant? variant = get_floating_variant ();
+ assert (!variant.is_floating ());
+ }
+}
+
+void test_variant_builder () {
+ string name = "foo";
+ string key = "bar";
+ Variant? @value = null;
+ var builder = new VariantBuilder (new VariantType ("a{smv}"));
+ builder.add ("{smv}", key, @value);
+ var variant = new Variant ("(s@a{smv})", name, builder.end ());
+ assert (!variant.is_floating ());
+}
+
+void main () {
+ test_variant ();
+ test_variant_builder ();
+}