summaryrefslogtreecommitdiff
path: root/tests/gir
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2018-12-10 16:07:46 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2018-12-11 14:18:35 +0100
commit013bb64cc8ef97326db1a44affcf420b0bc941cf (patch)
tree60e565a6e69db8eb692fd87d0d4a1a8bf0ca2607 /tests/gir
parent3763b4c6c296fa3bc467050ae50e1dc320e85039 (diff)
downloadvala-013bb64cc8ef97326db1a44affcf420b0bc941cf.tar.gz
codegen: Handle non-default AsyncResult parameter position
Unfortunately gdbus-codegen puts the AsyncResult parameter after possible out-parameters therefore there is an "async_result_pos" attribute required to handle this correctly. Vala supposely follows the common practice to put the AsyncResult before out-parameters by default. Fixes https://gitlab.gnome.org/GNOME/vala/issues/709
Diffstat (limited to 'tests/gir')
-rw-r--r--tests/gir/async-result-pos.test56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/gir/async-result-pos.test b/tests/gir/async-result-pos.test
new file mode 100644
index 000000000..2a17f53dc
--- /dev/null
+++ b/tests/gir/async-result-pos.test
@@ -0,0 +1,56 @@
+GIR
+
+Input:
+
+<class name="Foo" c:type="TestFoo" glib:type-name="TestFoo" glib:get-type="test_foo_get_type" glib:type-struct="FooClass" parent="GObject.Object">
+ <method name="method_async" c:identifier="test_foo_method_async">
+ <return-value transfer-ownership="none">
+ <type name="none"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="self" transfer-ownership="none">
+ <type name="Foo" c:type="TestFoo*"/>
+ </instance-parameter>
+ <parameter name="input" transfer-ownership="none">
+ <type name="utf8" c:type="const gchar*"/>
+ </parameter>
+ <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async">
+ <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
+ </parameter>
+ <parameter name="_callback__target" transfer-ownership="none" allow-none="1">
+ <type name="gpointer" c:type="void*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="method_finish" c:identifier="test_foo_method_finish" throws="1">
+ <return-value transfer-ownership="full">
+ <type name="none"/>
+ </return-value>
+ <parameters>
+ <instance-parameter name="self" transfer-ownership="none">
+ <type name="Foo" c:type="TestFoo*"/>
+ </instance-parameter>
+ <parameter name="output" direction="out" transfer-ownership="full">
+ <type name="utf8" c:type="gchar**"/>
+ </parameter>
+ <parameter name="_res_" transfer-ownership="none">
+ <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <constructor name="new" c:identifier="test_foo_new">
+ <return-value transfer-ownership="full">
+ <type name="Test.Foo" c:type="TestFoo*"/>
+ </return-value>
+ </constructor>
+</class>
+
+Output:
+
+[CCode (cheader_filename = "test.h", type_id = "test_foo_get_type ()")]
+public class Foo : GLib.Object {
+ [CCode (has_construct_function = false)]
+ public Foo ();
+ [CCode (async_result_pos = 2.1)]
+ public async void method_async (string input, out string output) throws GLib.Error;
+}