[gobject-introspection: 2/5] regress: Add test with signal inout parameter



commit c4f5896068ca342b75bc438af0b78d44cf635305
Author: Philip Chimento <philip chimento gmail com>
Date:   Wed May 9 23:38:38 2018 -0700

    regress: Add test with signal inout parameter
    
    This is modeled after GtkEditable::insert-text which isn't marshalled
    properly in GJS.
    
    See gjs#147.

 tests/scanner/Regress-1.0-expected.gir | 30 ++++++++++++++++++++++++++++
 tests/scanner/regress.c                | 36 ++++++++++++++++++++++++++++++++++
 tests/scanner/regress.h                |  3 +++
 3 files changed, 69 insertions(+)
---
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 316c12ca..ad6af895 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -3134,6 +3134,19 @@ case.</doc>
           </instance-parameter>
         </parameters>
       </method>
+      <method name="emit_sig_with_inout_int"
+              c:identifier="regress_test_obj_emit_sig_with_inout_int">
+        <doc xml:space="preserve">The signal handler must increment the inout parameter by 1.</doc>
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <instance-parameter name="obj" transfer-ownership="none">
+            <doc xml:space="preserve">The object to emit the signal.</doc>
+            <type name="TestObj" c:type="RegressTestObj*"/>
+          </instance-parameter>
+        </parameters>
+      </method>
       <method name="emit_sig_with_int64"
               c:identifier="regress_test_obj_emit_sig_with_int64">
         <return-value transfer-ownership="none">
@@ -3787,6 +3800,23 @@ raise from the introspection client language.</doc>
           </parameter>
         </parameters>
       </glib:signal>
+      <glib:signal name="sig-with-inout-int" when="last">
+        <doc xml:space="preserve">This signal is modeled after GtkEditable::insert-text.</doc>
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <parameter name="position"
+                     direction="inout"
+                     caller-allocates="0"
+                     transfer-ownership="full">
+            <doc xml:space="preserve">The position, in characters, at which to
+    insert the new text. This is an in-out paramter. After the signal
+    emission is finished, it should point after the newly inserted text.</doc>
+            <type name="gint" c:type="gpointer"/>
+          </parameter>
+        </parameters>
+      </glib:signal>
       <glib:signal name="sig-with-int64-prop" when="last">
         <doc xml:space="preserve">You can use this with regress_test_obj_emit_sig_with_int64, or raise from
 the introspection client langage.</doc>
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c
index 2cf4cddb..a321c5eb 100644
--- a/tests/scanner/regress.c
+++ b/tests/scanner/regress.c
@@ -2279,6 +2279,7 @@ enum {
   REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_INT64_PROP,
   REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_UINT64_PROP,
   REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_INTARRAY_RET,
+  REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_INOUT_INT,
   N_REGRESS_TEST_OBJ_SIGNALS
 };
 
@@ -2529,6 +2530,27 @@ regress_test_obj_class_init (RegressTestObjClass *klass)
                  1,
                  G_TYPE_INT);
 
+  /**
+   * RegressTestObj::sig-with-inout-int
+   * @self: The object that emitted the signal
+   * @position: (inout) (type int): The position, in characters, at which to
+   *     insert the new text. This is an in-out paramter. After the signal
+   *     emission is finished, it should point after the newly inserted text.
+   *
+   * This signal is modeled after GtkEditable::insert-text.
+   */
+  regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_INOUT_INT] =
+    g_signal_new ("sig-with-inout-int",
+                  G_TYPE_FROM_CLASS (gobject_class),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  NULL,
+                  NULL,
+                  NULL,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_POINTER);
+
   gobject_class->set_property = regress_test_obj_set_property;
   gobject_class->get_property = regress_test_obj_get_property;
   gobject_class->dispose = regress_test_obj_dispose;
@@ -2807,6 +2829,20 @@ regress_test_obj_emit_sig_with_array_len_prop (RegressTestObj *obj)
   g_signal_emit_by_name (obj, "sig-with-array-len-prop", &arr, 5);
 }
 
+/**
+ * regress_test_obj_emit_sig_with_inout_int:
+ * @obj: The object to emit the signal.
+ *
+ * The signal handler must increment the inout parameter by 1.
+ */
+void
+regress_test_obj_emit_sig_with_inout_int (RegressTestObj *obj)
+{
+  int inout = 42;
+  g_signal_emit_by_name (obj, "sig-with-inout-int", &inout);
+  g_assert_cmpint (inout, ==, 43);
+}
+
 int
 regress_test_obj_instance_method (RegressTestObj *obj)
 {
diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h
index d88df3f2..f07d162c 100644
--- a/tests/scanner/regress.h
+++ b/tests/scanner/regress.h
@@ -839,6 +839,9 @@ void       regress_test_obj_emit_sig_with_uint64 (RegressTestObj *obj);
 _GI_TEST_EXTERN
 void       regress_test_obj_emit_sig_with_array_len_prop (RegressTestObj *obj);
 
+_GI_TEST_EXTERN
+void       regress_test_obj_emit_sig_with_inout_int (RegressTestObj *obj);
+
 _GI_TEST_EXTERN
 int        regress_test_obj_instance_method (RegressTestObj *obj);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]