]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
tests: Add more GLib.Array tests d85d5fda1b2aedd0dea3a144fa442962bb452fc1 29/head
authorCorentin Noël <corentin@elementary.io>
Fri, 16 Nov 2018 13:55:00 +0000 (14:55 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Fri, 16 Nov 2018 17:46:45 +0000 (18:46 +0100)
tests/basic-types/garray.vala

index 055ba6a2a763ef5c28ba0271f9b9000c0c5ed02f..2d2eb008d2a7c32873cc6494be9e96b434be72ea 100644 (file)
@@ -1,7 +1,12 @@
 class Foo : Object {
 }
 
-void main () {
+struct FooStruct {
+       string content;
+       Foo object;
+}
+
+void test_garray () {
        var array = new GLib.Array<Foo> ();
 
        var foo = new Foo ();
@@ -22,3 +27,62 @@ void main () {
        array.remove_range (0, 1);
        assert (foo.ref_count == 1);
 }
+
+void test_int_garray () {
+       var array = new GLib.Array<int> ();
+       // g_array_append_val() is a macro which uses a reference to the value parameter and thus can't use constants.
+       // FIXME: allow appending constants in Vala
+       int val = 1;
+       array.prepend_val (val);
+       val++;
+       array.append_val (val);
+       val++;
+       array.insert_val (2, val);
+       assert (array.index (0) == 1);
+       assert (array.index (1) == 2);
+       assert (array.index (2) == 3);
+       assert (array.length == 3);
+}
+
+GLib.Array<FooStruct?> create_struct_garray () {
+       FooStruct foo = { "foo", new Foo () };
+       var array = new GLib.Array<FooStruct?> ();
+       array.append_val (foo);
+       return array;
+}
+
+void test_struct_garray () {
+       var array = create_struct_garray ();
+       assert (array.length == 1);
+       assert (array.index (0).content == "foo");
+       assert (array.index (0).object.ref_count == 1);
+       Foo f = array.index (0).object;
+       assert (f.ref_count == 2);
+       array = null;
+       assert (f.ref_count == 1);
+}
+
+void test_object_garray () {
+       var foo = new Foo ();
+       {
+               var array = new GLib.Array<Foo> ();
+               array.append_val (foo);
+               assert (foo.ref_count == 2);
+               array = null;
+       }
+       assert (foo.ref_count == 1);
+       {
+               var array = new GLib.Array<unowned Foo> ();
+               array.append_val (foo);
+               assert (foo.ref_count == 1);
+               array = null;
+       }
+       assert (foo.ref_count == 1);
+}
+
+void main () {
+       test_garray ();
+       test_int_garray ();
+       test_struct_garray ();
+       test_object_garray ();
+}