summaryrefslogtreecommitdiff
path: root/valadoc/tests
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2017-06-27 12:21:44 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2017-06-27 12:21:44 +0200
commit93d9fe647be1f2effc0bfeeec903b5e030182f6c (patch)
treed28aab5aa5c0e4a149e40b22246246dd2b2d5957 /valadoc/tests
parentb4f3f73a01b86fe7f9edde7a3991b493346eea23 (diff)
downloadvala-93d9fe647be1f2effc0bfeeec903b5e030182f6c.tar.gz
Prepare valadoc source-tree for merge
Diffstat (limited to 'valadoc/tests')
-rw-r--r--valadoc/tests/Makefile.am74
-rw-r--r--valadoc/tests/drivers/api-test.data.vapi151
-rw-r--r--valadoc/tests/drivers/driver-0-20.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-22.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-24.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-26.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-28.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-30.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-32.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-34.vala6
-rw-r--r--valadoc/tests/drivers/driver-0-36.vala6
-rw-r--r--valadoc/tests/drivers/generic-api-test.vala2787
-rw-r--r--valadoc/tests/libvaladoc/errorreporter.vala70
-rw-r--r--valadoc/tests/libvaladoc/gtkdoc-scanner.vala225
-rw-r--r--valadoc/tests/libvaladoc/markupreader.vala207
-rw-r--r--valadoc/tests/libvaladoc/parser/generic-scanner.vala70
-rw-r--r--valadoc/tests/libvaladoc/parser/manyrule.vala90
-rw-r--r--valadoc/tests/libvaladoc/parser/oneofrule.vala99
-rw-r--r--valadoc/tests/libvaladoc/parser/optionalrule.vala84
-rw-r--r--valadoc/tests/libvaladoc/parser/sequencerule.vala103
-rw-r--r--valadoc/tests/libvaladoc/parser/stubrule.vala92
-rwxr-xr-xvaladoc/tests/testrunner.sh123
22 files changed, 4229 insertions, 0 deletions
diff --git a/valadoc/tests/Makefile.am b/valadoc/tests/Makefile.am
new file mode 100644
index 000000000..7a17a087d
--- /dev/null
+++ b/valadoc/tests/Makefile.am
@@ -0,0 +1,74 @@
+NULL =
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(NULL)
+AM_LDFLAGS = \
+ $(GLIB_LIBS) \
+ $(NULL)
+
+BUILT_SOURCES = \
+ $(NULL)
+noinst_PROGRAMS = \
+ $(NULL)
+
+TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) TOPBUILDDIR=$(abs_top_builddir) TOPSRCDIR=$(abs_top_srcdir) $(srcdir)/testrunner.sh
+
+TESTS = \
+ libvaladoc/errorreporter.vala \
+ libvaladoc/markupreader.vala \
+ libvaladoc/gtkdoc-scanner.vala \
+ libvaladoc/parser/manyrule.vala \
+ libvaladoc/parser/oneofrule.vala \
+ libvaladoc/parser/sequencerule.vala \
+ libvaladoc/parser/optionalrule.vala \
+ libvaladoc/parser/stubrule.vala \
+ $(NULL)
+
+if HAVE_LIBVALA_0_20_X
+TESTS += drivers/driver-0-20.vala
+endif
+
+if HAVE_LIBVALA_0_22_X
+TESTS += drivers/driver-0-22.vala
+endif
+
+if HAVE_LIBVALA_0_24_X
+TESTS += drivers/driver-0-24.vala
+endif
+
+if HAVE_LIBVALA_0_26_X
+TESTS += drivers/driver-0-26.vala
+endif
+
+if HAVE_LIBVALA_0_28_X
+TESTS += drivers/driver-0-28.vala
+endif
+
+if HAVE_LIBVALA_0_30_X
+TESTS += drivers/driver-0-30.vala
+endif
+
+if HAVE_LIBVALA_0_32_X
+TESTS += drivers/driver-0-32.vala
+endif
+
+if HAVE_LIBVALA_0_34_X
+TESTS += drivers/driver-0-34.vala
+endif
+
+if HAVE_LIBVALA_0_36_X
+TESTS += drivers/driver-0-36.vala
+endif
+
+check-TESTS: $(TESTS)
+ @EXEEXT=$(EXEEXT) TOPBUILDDIR=$(abs_top_builddir) TOPSRCDIR=$(abs_top_srcdir) $(srcdir)/testrunner.sh $(TESTS)
+
+EXTRA_DIST = \
+ testrunner.sh \
+ drivers/api-test.data.vapi \
+ drivers/generic-api-test.vala \
+ libvaladoc/parser/generic-scanner.vala \
+ $(TESTS) \
+ $(NULL)
+
diff --git a/valadoc/tests/drivers/api-test.data.vapi b/valadoc/tests/drivers/api-test.data.vapi
new file mode 100644
index 000000000..3c696f4af
--- /dev/null
+++ b/valadoc/tests/drivers/api-test.data.vapi
@@ -0,0 +1,151 @@
+
+
+using GLib;
+
+/*
+ Todo:
+ - private / protected / internal
+ - comments
+ - parent
+ - inheritance, interface impl
+ - virtual, abstract, override
+ - generics
+*/
+
+
+// global tests:
+public delegate void test_delegate_global ();
+public void test_function_global ();
+public int test_field_global;
+public const int test_const_global;
+
+
+// Checked
+public errordomain TestErrDomGlobal {
+ ERROR1,
+ ERROR2;
+
+ public void method ();
+ public static void static_method ();
+}
+
+
+// Checked
+public enum TestEnumGlobal {
+ ENVAL1 = 100,
+ ENVAL2;
+
+ public void method ();
+ public static void static_method ();
+}
+
+
+// Checked
+public class TestClassGlobal {
+ public class InnerClass {
+ }
+
+ public struct InnerStruct {
+ }
+
+ public const int constant;
+ public static int field1;
+ public int field2;
+ public TestClassGlobal ();
+ public TestClassGlobal.named ();
+ public void method ();
+ public static void static_method ();
+ public int property1 { get; set; }
+ public int property2 { get; }
+ public int property3 { owned get; construct set; }
+ public delegate int Foo ();
+ public signal int sig ();
+}
+
+
+// Checked
+public interface TestInterfaceGlobal {
+ public const int constant;
+ public void method ();
+ public static void static_method ();
+ public int property1 { get; set; }
+ public int property2 { get; }
+ public int property3 { owned get; construct set; }
+ public delegate int Foo ();
+ public signal int sig ();
+}
+
+
+// Checked
+public struct TestStructGlobal {
+ public static int field1;
+ public int field2;
+ public TestStructGlobal ();
+ public TestStructGlobal.named ();
+ public void method ();
+ public static void static_method ();
+ public const int constant;
+}
+
+
+namespace ParamTest {
+ public void test_function_param_1 ();
+ public void test_function_param_2 (int a);
+ public void test_function_param_3 (ref int a);
+ public void test_function_param_4 (out int a);
+ public void test_function_param_5 (owned Object o);
+ public void test_function_param_6 (int? a);
+ public void test_function_param_7 (...);
+ public void test_function_param_8 (int a = 1);
+ public void test_function_param_9 (int a, ref int b, out int c, owned Object d, int? e, int f = 1, ...);
+
+ public void test_function_param_10 (int* a);
+ public void test_function_param_11 (int** a);
+
+ public void test_function_param_12 (int[] a);
+ public void test_function_param_13 (int[,,] a);
+ public void test_function_param_14 (int[][] a);
+}
+
+
+namespace ReturnTest {
+ public void test_function_1 ();
+ public int test_function_2 ();
+ public int? test_function_3 ();
+ public unowned string test_function_4 ();
+
+ public int* test_function_5 ();
+ public int** test_function_6 ();
+
+ public int[] test_function_7 ();
+ public int[,,] test_function_8 ();
+ public int[][] test_function_9 ();
+}
+
+
+namespace VersionTest {
+ [Deprecated]
+ public void test_function_1 ();
+ [Deprecated (since = "1.0", replacement = "test_function_4")]
+ public void test_function_2 ();
+
+ [Experimental]
+ public void test_function_3 ();
+
+#if VALA_0_32
+ [Version (since = "2.0")]
+ public void test_function_4 ();
+ [Version (deprecated = true)]
+ public void test_function_5 ();
+ [Version (deprecated = true, deprecated_since = "2.0", replacement = "test_function_4", since = "1.0")]
+ public void test_function_6 ();
+ [Version (deprecated_since = "2.0")]
+ public void test_function_7 ();
+ [Version (deprecated = false)]
+ public void test_function_8 ();
+ [Version (experimental = true)]
+ public void test_function_9 ();
+#endif
+}
+
+
diff --git a/valadoc/tests/drivers/driver-0-20.vala b/valadoc/tests/drivers/driver-0-20.vala
new file mode 100644
index 000000000..787cb8553
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-20.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.20.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-22.vala b/valadoc/tests/drivers/driver-0-22.vala
new file mode 100644
index 000000000..4f881d7f9
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-22.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.22.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-24.vala b/valadoc/tests/drivers/driver-0-24.vala
new file mode 100644
index 000000000..c31c99217
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-24.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.24.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-26.vala b/valadoc/tests/drivers/driver-0-26.vala
new file mode 100644
index 000000000..1a2521725
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-26.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.26.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-28.vala b/valadoc/tests/drivers/driver-0-28.vala
new file mode 100644
index 000000000..05819e092
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-28.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.28.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-30.vala b/valadoc/tests/drivers/driver-0-30.vala
new file mode 100644
index 000000000..cec5f0c8a
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-30.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.30.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-32.vala b/valadoc/tests/drivers/driver-0-32.vala
new file mode 100644
index 000000000..212573942
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-32.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.32.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-34.vala b/valadoc/tests/drivers/driver-0-34.vala
new file mode 100644
index 000000000..442e80115
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-34.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.34.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/driver-0-36.vala b/valadoc/tests/drivers/driver-0-36.vala
new file mode 100644
index 000000000..d74d31d4f
--- /dev/null
+++ b/valadoc/tests/drivers/driver-0-36.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+ test_driver ("../../src/driver/0.36.x/.libs");
+}
+
diff --git a/valadoc/tests/drivers/generic-api-test.vala b/valadoc/tests/drivers/generic-api-test.vala
new file mode 100644
index 000000000..2c717125d
--- /dev/null
+++ b/valadoc/tests/drivers/generic-api-test.vala
@@ -0,0 +1,2787 @@
+/* api-test.vala
+ *
+ * Copyright (C) 2013 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+using Gee;
+
+
+[CCode (name = "TOP_SRC_DIR")]
+extern const string TOP_SRC_DIR;
+
+
+public static void test_enum_global (Api.Enum? en, Api.Package pkg, Api.Namespace global_ns) {
+ assert (en != null);
+
+ // (.Enum check)
+ assert (en.get_cname () == "TestEnumGlobal");
+ // (.TypeSymbol check)
+ assert (en.is_basic_type == false);
+ // (.Symbol check)
+ assert (en.is_deprecated == false);
+ assert (en.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (en.get_full_name () == "TestEnumGlobal");
+ assert (en.get_filename () == "api-test.data.vapi");
+ assert (en.name == "TestEnumGlobal");
+ assert (en.nspace == global_ns);
+ assert (en.package == pkg);
+
+
+ Gee.List<Api.Node> enumvalues = en.get_children_by_type (Api.NodeType.ENUM_VALUE, false);
+ assert (enumvalues.size == 2);
+
+
+ bool enval1 = false;
+ bool enval2 = false;
+
+ foreach (Api.Node node in enumvalues) {
+ Api.EnumValue enval = node as Api.EnumValue;
+ assert (enval != null);
+
+ switch (enval.name) {
+ case "ENVAL1":
+ // (.EnumValue)
+ assert (enval.default_value != null);
+ assert (enval.has_default_value == true);
+ assert (enval.get_cname () == "TEST_ENUM_GLOBAL_ENVAL1");
+ // (.Symbol check)
+ assert (enval.is_deprecated == false);
+ assert (enval.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (enval.get_full_name () == "TestEnumGlobal.ENVAL1");
+ assert (enval.get_filename () == "api-test.data.vapi");
+ assert (enval.nspace == global_ns);
+ assert (enval.package == pkg);
+
+ enval1 = true;
+ break;
+
+ case "ENVAL2":
+ // (.EnumValue)
+ assert (enval.default_value == null);
+ assert (enval.has_default_value == false);
+ assert (enval.get_cname () == "TEST_ENUM_GLOBAL_ENVAL2");
+ // (.Symbol check)
+ assert (enval.is_deprecated == false);
+ assert (enval.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (enval.get_full_name () == "TestEnumGlobal.ENVAL2");
+ assert (enval.get_filename () == "api-test.data.vapi");
+ assert (enval.nspace == global_ns);
+ assert (enval.package == pkg);
+
+ enval2 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (enval1 == true);
+ assert (enval2 == true);
+
+
+
+ Gee.List<Api.Node> methods = en.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_enum_global_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestEnumGlobal.method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = en.get_children_by_type (Api.NodeType.STATIC_METHOD, false);
+ assert (methods.size == 1);
+
+ method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_enum_global_static_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == true);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestEnumGlobal.static_method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "static_method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = en.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void test_erroromain_global (Api.ErrorDomain? err, Api.Package pkg, Api.Namespace global_ns) {
+ assert (err != null);
+
+ // (.ErrorDomain check)
+ assert (err.get_cname () == "TestErrDomGlobal");
+ //assert (err.get_dbus_name () == "");
+ // (.TypeSymbol check)
+ assert (err.is_basic_type == false);
+ // (.Symbol check)
+ assert (err.is_deprecated == false);
+ assert (err.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (err.get_full_name () == "TestErrDomGlobal");
+ assert (err.get_filename () == "api-test.data.vapi");
+ assert (err.name == "TestErrDomGlobal");
+ assert (err.nspace == global_ns);
+ assert (err.package == pkg);
+
+
+ Gee.List<Api.Node> errcodes = err.get_children_by_type (Api.NodeType.ERROR_CODE, false);
+ assert (errcodes.size == 2);
+
+
+ bool errc1 = false;
+ bool errc2 = false;
+
+ foreach (Api.Node node in errcodes) {
+ Api.ErrorCode errc = node as Api.ErrorCode;
+ assert (errc != null);
+
+ switch (errc.name) {
+ case "ERROR1":
+ // (.EnumValue)
+ assert (errc.get_cname () == "TEST_ERR_DOM_GLOBAL_ERROR1");
+ // (.Symbol check)
+ assert (errc.is_deprecated == false);
+ assert (errc.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (errc.get_full_name () == "TestErrDomGlobal.ERROR1");
+ assert (errc.get_filename () == "api-test.data.vapi");
+ assert (errc.nspace == global_ns);
+ assert (errc.package == pkg);
+
+ errc1 = true;
+ break;
+
+ case "ERROR2":
+ // (.EnumValue)
+ assert (errc.get_cname () == "TEST_ERR_DOM_GLOBAL_ERROR2");
+ // (.Symbol check)
+ assert (errc.is_deprecated == false);
+ assert (errc.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (errc.get_full_name () == "TestErrDomGlobal.ERROR2");
+ assert (errc.get_filename () == "api-test.data.vapi");
+ assert (errc.nspace == global_ns);
+ assert (errc.package == pkg);
+
+ errc2 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (errc1 == true);
+ assert (errc2 == true);
+
+
+
+ Gee.List<Api.Node> methods = err.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_err_dom_global_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestErrDomGlobal.method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = err.get_children_by_type (Api.NodeType.STATIC_METHOD, false);
+ assert (methods.size == 1);
+
+ method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_err_dom_global_static_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == true);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestErrDomGlobal.static_method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "static_method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = err.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void test_class_global (Api.Class? cl, Api.Package pkg, Api.Namespace global_ns) {
+ assert (cl != null);
+
+ // (.Class check)
+ assert (cl.base_type == null);
+ assert (cl.get_cname () == "TestClassGlobal");
+ assert (cl.get_type_id () == "TYPE_TEST_CLASS_GLOBAL");
+ assert (cl.get_ref_function_cname () == "test_class_global_ref");
+ assert (cl.get_unref_function_cname () == "test_class_global_unref");
+ assert (cl.get_param_spec_function_cname () == "param_spec_test_class_global");
+ assert (cl.get_set_value_function_cname () == "value_set_test_class_global");
+ assert (cl.get_get_value_function_cname () == "value_get_test_class_global");
+ assert (cl.get_take_value_function_cname () == "value_take_test_class_global");
+ assert (cl.get_dbus_name () == null);
+ assert (cl.get_implemented_interface_list ().size == 0);
+ assert (cl.get_full_implemented_interface_list ().size == 0);
+ assert (cl.is_abstract == false);
+ assert (cl.is_fundamental == true);
+ // (.Symbol check)
+ assert (cl.is_deprecated == false);
+ assert (cl.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property3");
+ assert (cl.get_full_name () == "TestClassGlobal");
+ assert (cl.get_filename () == "api-test.data.vapi");
+ assert (cl.name == "TestClassGlobal");
+ assert (cl.nspace == global_ns);
+ assert (cl.package == pkg);
+
+
+ Gee.List<Api.Node> methods = cl.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_class_global_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestClassGlobal.method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = cl.get_children_by_type (Api.NodeType.STATIC_METHOD, false);
+ assert (methods.size == 1);
+
+ method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_class_global_static_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == true);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestClassGlobal.static_method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "static_method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = cl.get_children_by_type (Api.NodeType.CREATION_METHOD, false);
+ bool default_constr = false;
+ bool named_constr = false;
+
+ foreach (Api.Node node in methods) {
+ method = node as Api.Method;
+ assert (method != null);
+
+ switch (method.name) {
+ case "TestClassGlobal":
+ // (.Method check)
+ assert (method.get_cname () == "test_class_global_new");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == true);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestClassGlobal.TestClassGlobal");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+ default_constr = true;
+ break;
+
+ case "TestClassGlobal.named":
+ // (.Method check)
+ assert (method.get_cname () == "test_class_global_new_named");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == true);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestClassGlobal.TestClassGlobal.named");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+ named_constr = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (default_constr == true);
+ assert (named_constr == true);
+
+
+
+ Gee.List<Api.Node> properties = cl.get_children_by_type (Api.NodeType.PROPERTY, false);
+ bool prop1 = false;
+ bool prop2 = false;
+ bool prop3 = false;
+
+ foreach (Api.Node node in properties) {
+ Api.Property property = node as Api.Property;
+ assert (property != null);
+
+ switch (property.name) {
+ case "property1":
+ assert (property.get_cname () == "property1");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter != null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestClassGlobal.property1");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+
+ assert (property.getter.get_cname () == "test_class_global_get_property1");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == false);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property2");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+
+ assert (property.setter.get_cname () == "test_class_global_set_property1");
+ assert (property.setter.is_construct == false);
+ assert (property.setter.is_get == false);
+ assert (property.setter.is_set == true);
+ assert (property.setter.is_owned == false);
+ // (.Symbol check)
+ assert (property.setter.is_deprecated == false);
+ assert (property.setter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property2");
+ assert (property.setter.get_filename () == "api-test.data.vapi");
+ assert (property.setter.nspace == global_ns);
+ assert (property.setter.package == pkg);
+
+ prop1 = true;
+ break;
+
+ case "property2":
+ assert (property.get_cname () == "property2");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter == null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestClassGlobal.property2");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+ assert (property.getter.get_cname () == "test_class_global_get_property2");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == false);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property2");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+ prop2 = true;
+ break;
+
+
+ case "property3":
+ assert (property.get_cname () == "property3");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter != null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestClassGlobal.property3");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+ assert (property.getter.get_cname () == "test_class_global_get_property3");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == true);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property3");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+
+ assert (property.setter.get_cname () == "test_class_global_set_property3");
+ assert (property.setter.is_construct == true);
+ assert (property.setter.is_get == false);
+ assert (property.setter.is_set == true);
+ assert (property.setter.is_owned == false);
+ // (.Symbol check)
+ assert (property.setter.is_deprecated == false);
+ assert (property.setter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property3");
+ assert (property.setter.get_filename () == "api-test.data.vapi");
+ assert (property.setter.nspace == global_ns);
+ assert (property.setter.package == pkg);
+
+
+ prop3 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+ assert (prop1);
+ assert (prop2);
+ assert (prop3);
+
+
+ Gee.List<Api.Node> delegates = cl.get_children_by_type (Api.NodeType.DELEGATE, false);
+ assert (delegates.size == 1);
+
+ Api.Delegate del = delegates.get (0) as Api.Delegate;
+ assert (del != null);
+
+ // (.Delegate check)
+ assert (del.get_cname () == "TestClassGlobalFoo");
+ assert (del.return_type != null);
+ assert (del.is_static == false);
+ // (.Symbol check)
+ assert (del.is_deprecated == false);
+ assert (del.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property3");
+ assert (del.get_filename () == "api-test.data.vapi");
+ assert (del.nspace == global_ns);
+ assert (del.package == pkg);
+
+
+
+ Gee.List<Api.Node> signals = cl.get_children_by_type (Api.NodeType.SIGNAL, false);
+ assert (signals.size == 1);
+
+ Api.Signal sig = signals.get (0) as Api.Signal;
+ assert (sig != null);
+
+ // (.Signal check)
+ assert (sig.get_cname () == "sig");
+ assert (sig.is_virtual == false);
+ assert (sig.return_type != null);
+ //assert (sig.is_static == false);
+ // (.Symbol check)
+ assert (sig.is_deprecated == false);
+ assert (sig.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (sig.get_full_name () == "TestClassGlobal.property3");
+ assert (sig.get_filename () == "api-test.data.vapi");
+ assert (sig.nspace == global_ns);
+ assert (sig.package == pkg);
+
+
+
+ Gee.List<Api.Node> constants = cl.get_children_by_type (Api.NodeType.CONSTANT, false);
+ assert (constants.size == 1);
+
+ Api.Constant constant = constants.get (0) as Api.Constant;
+ assert (constant != null);
+ // (.Constant check)
+ assert (constant.get_cname () == "TEST_CLASS_GLOBAL_constant");
+ // (.Symbol check)
+ assert (constant.is_deprecated == false);
+ assert (constant.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (constant.get_full_name () == "TestClassGlobal.constant");
+ assert (constant.get_filename () == "api-test.data.vapi");
+ assert (constant.name == "constant");
+ assert (constant.nspace == global_ns);
+ assert (constant.package == pkg);
+
+
+ Gee.List<Api.Node> fields = cl.get_children_by_type (Api.NodeType.FIELD, false);
+
+ bool field1 = false;
+ bool field2 = false;
+ foreach (Api.Node node in fields) {
+ Api.Field field = node as Api.Field;
+ assert (field != null);
+
+ switch (field.name) {
+ case "field1":
+ // (.Field check)
+ assert (field.get_cname () == "test_class_global_field1");
+ assert (field.is_static == true);
+ assert (field.is_volatile == false);
+ // (.Symbol check)
+ assert (field.is_deprecated == false);
+ assert (field.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (field.get_full_name () == "TestClassGlobal.field1");
+ assert (field.get_filename () == "api-test.data.vapi");
+ assert (field.nspace == global_ns);
+ assert (field.package == pkg);
+
+ field1 = true;
+ break;
+
+ case "field2":
+ // (.Field check)
+ assert (field.get_cname () == "field2");
+ assert (field.is_static == false);
+ assert (field.is_volatile == false);
+ // (.Symbol check)
+ assert (field.is_deprecated == false);
+ assert (field.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (field.get_full_name () == "TestClassGlobal.field2");
+ assert (field.get_filename () == "api-test.data.vapi");
+ assert (field.nspace == global_ns);
+ assert (field.package == pkg);
+
+ field2 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (field1 == true);
+ assert (field2 == true);
+
+
+
+ Gee.List<Api.Node> classes = cl.get_children_by_type (Api.NodeType.CLASS, false);
+ assert (classes.size == 1);
+
+ Api.Class? subcl = classes.get (0) as Api.Class;
+ assert (subcl != null);
+ assert (subcl.base_type == null);
+ // (.Symbol check)
+ assert (subcl.is_deprecated == false);
+ assert (subcl.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (subcl.get_full_name () == "TestClassGlobal.InnerClass");
+ assert (subcl.get_filename () == "api-test.data.vapi");
+ assert (subcl.nspace == global_ns);
+ assert (subcl.package == pkg);
+
+
+
+ Gee.List<Api.Node> structs = cl.get_children_by_type (Api.NodeType.STRUCT, false);
+ assert (structs.size == 1);
+
+ Api.Struct? substru = structs.get (0) as Api.Struct;
+ assert (substru != null);
+ // (.Struct check)
+ assert (substru.base_type == null);
+ assert (substru.get_cname () == "TestClassGlobalInnerStruct");
+ assert (substru.get_free_function_cname () == null);
+ assert (substru.get_dup_function_cname () == null);
+ assert (substru.get_type_id () == null);
+ // (.Symbol check)
+ assert (substru.is_deprecated == false);
+ assert (substru.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (substru.get_full_name () == "TestClassGlobal.InnerStruct");
+ assert (substru.get_filename () == "api-test.data.vapi");
+ assert (substru.name == "InnerStruct");
+ assert (substru.nspace == global_ns);
+ assert (substru.package == pkg);
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = cl.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void test_interface_global (Api.Interface? iface, Api.Package pkg, Api.Namespace global_ns) {
+ assert (iface != null);
+
+ // (.Interface check)
+ assert (iface.base_type == null);
+ assert (iface.get_implemented_interface_list ().size == 0);
+ assert (iface.get_full_implemented_interface_list ().size == 0);
+ assert (iface.get_cname () == "TestInterfaceGlobal");
+ assert (iface.get_dbus_name () == null);
+ // (.Symbol check)
+ assert (iface.is_deprecated == false);
+ assert (iface.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (iface.get_full_name () == "TestInterfaceGlobal");
+ assert (iface.get_filename () == "api-test.data.vapi");
+ assert (iface.name == "TestInterfaceGlobal");
+ assert (iface.nspace == global_ns);
+ assert (iface.package == pkg);
+
+
+ Gee.List<Api.Node> methods = iface.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_interface_global_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestInterfaceGlobal.method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = iface.get_children_by_type (Api.NodeType.STATIC_METHOD, false);
+ assert (methods.size == 1);
+
+ method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_interface_global_static_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == true);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestInterfaceGlobal.static_method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "static_method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+ Gee.List<Api.Node> properties = iface.get_children_by_type (Api.NodeType.PROPERTY, false);
+ bool prop1 = false;
+ bool prop2 = false;
+ bool prop3 = false;
+
+ foreach (Api.Node node in properties) {
+ Api.Property property = node as Api.Property;
+ assert (property != null);
+
+ switch (property.name) {
+ case "property1":
+ assert (property.get_cname () == "property1");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter != null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestInterfaceGlobal.property1");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+
+ assert (property.getter.get_cname () == "test_interface_global_get_property1");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == false);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestInterfaceGlobal.property2");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+
+ assert (property.setter.get_cname () == "test_interface_global_set_property1");
+ assert (property.setter.is_construct == false);
+ assert (property.setter.is_get == false);
+ assert (property.setter.is_set == true);
+ assert (property.setter.is_owned == false);
+ // (.Symbol check)
+ assert (property.setter.is_deprecated == false);
+ assert (property.setter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestInterfaceGlobal.property2");
+ assert (property.setter.get_filename () == "api-test.data.vapi");
+ assert (property.setter.nspace == global_ns);
+ assert (property.setter.package == pkg);
+
+ prop1 = true;
+ break;
+
+ case "property2":
+ assert (property.get_cname () == "property2");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter == null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestInterfaceGlobal.property2");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+ assert (property.getter.get_cname () == "test_interface_global_get_property2");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == false);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestInterfaceGlobal.property2");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+ prop2 = true;
+ break;
+
+
+ case "property3":
+ assert (property.get_cname () == "property3");
+ assert (property.property_type != null);
+ assert (property.is_virtual == false);
+ assert (property.is_abstract == false);
+ assert (property.is_override == false);
+ assert (property.is_dbus_visible == true);
+ assert (property.setter != null);
+ assert (property.getter != null);
+ assert (property.base_property == null);
+ // (.Symbol check)
+ assert (property.is_deprecated == false);
+ assert (property.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (property.get_full_name () == "TestInterfaceGlobal.property3");
+ assert (property.get_filename () == "api-test.data.vapi");
+ assert (property.nspace == global_ns);
+ assert (property.package == pkg);
+
+ assert (property.getter.get_cname () == "test_interface_global_get_property3");
+ assert (property.getter.is_construct == false);
+ assert (property.getter.is_set == false);
+ assert (property.getter.is_get == true);
+ assert (property.getter.is_owned == true);
+ // (.Symbol check)
+ assert (property.getter.is_deprecated == false);
+ assert (property.getter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestInterfaceGlobal.property3");
+ assert (property.getter.get_filename () == "api-test.data.vapi");
+ assert (property.getter.nspace == global_ns);
+ assert (property.getter.package == pkg);
+
+
+ assert (property.setter.get_cname () == "test_interface_global_set_property3");
+ assert (property.setter.is_construct == true);
+ assert (property.setter.is_get == false);
+ assert (property.setter.is_set == true);
+ assert (property.setter.is_owned == false);
+ // (.Symbol check)
+ assert (property.setter.is_deprecated == false);
+ assert (property.setter.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestInterfaceGlobal.property3");
+ assert (property.setter.get_filename () == "api-test.data.vapi");
+ assert (property.setter.nspace == global_ns);
+ assert (property.setter.package == pkg);
+
+
+ prop3 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+ assert (prop1);
+ assert (prop2);
+ assert (prop3);
+
+
+
+ Gee.List<Api.Node> delegates = iface.get_children_by_type (Api.NodeType.DELEGATE, false);
+ assert (delegates.size == 1);
+
+ Api.Delegate del = delegates.get (0) as Api.Delegate;
+ assert (del != null);
+
+ // (.Delegate check)
+ assert (del.get_cname () == "TestInterfaceGlobalFoo");
+ assert (del.return_type != null);
+ assert (del.is_static == false);
+ // (.Symbol check)
+ assert (del.is_deprecated == false);
+ assert (del.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (del.get_full_name () == "TestClassGlobal.property3");
+ assert (del.get_filename () == "api-test.data.vapi");
+ assert (del.nspace == global_ns);
+ assert (del.package == pkg);
+
+
+
+ Gee.List<Api.Node> signals = iface.get_children_by_type (Api.NodeType.SIGNAL, false);
+ assert (signals.size == 1);
+
+ Api.Signal sig = signals.get (0) as Api.Signal;
+ assert (sig != null);
+
+ // (.Signal check)
+ assert (sig.get_cname () == "sig");
+ assert (sig.is_virtual == false);
+ assert (sig.return_type != null);
+ //assert (sig.is_static == false);
+ // (.Symbol check)
+ assert (sig.is_deprecated == false);
+ assert (sig.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (sig.get_full_name () == "TestClassGlobal.property3");
+ assert (sig.get_filename () == "api-test.data.vapi");
+ assert (sig.nspace == global_ns);
+ assert (sig.package == pkg);
+
+
+
+ Gee.List<Api.Node> constants = iface.get_children_by_type (Api.NodeType.CONSTANT, false);
+ assert (constants.size == 1);
+
+ Api.Constant constant = constants.get (0) as Api.Constant;
+ assert (constant != null);
+ // (.Constant check)
+ assert (constant.get_cname () == "TEST_INTERFACE_GLOBAL_constant");
+ // (.Symbol check)
+ assert (constant.is_deprecated == false);
+ assert (constant.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (constant.get_full_name () == "TestInterfaceGlobal.constant");
+ assert (constant.get_filename () == "api-test.data.vapi");
+ assert (constant.name == "constant");
+ assert (constant.nspace == global_ns);
+ assert (constant.package == pkg);
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = iface.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void test_struct_global (Api.Struct? stru, Api.Package pkg, Api.Namespace global_ns) {
+ assert (stru != null);
+ // (.Struct check)
+ assert (stru.base_type == null);
+ assert (stru.get_cname () == "TestStructGlobal");
+ assert (stru.get_free_function_cname () == null);
+ assert (stru.get_dup_function_cname () == null);
+ assert (stru.get_type_id () == null);
+ // (.Symbol check)
+ assert (stru.is_deprecated == false);
+ assert (stru.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ //assert (property.getter.get_full_name () == "TestClassGlobal.property3");
+ assert (stru.get_full_name () == "TestStructGlobal");
+ assert (stru.get_filename () == "api-test.data.vapi");
+ assert (stru.name == "TestStructGlobal");
+ assert (stru.nspace == global_ns);
+ assert (stru.package == pkg);
+
+
+ Gee.List<Api.Node> methods = stru.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_struct_global_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestStructGlobal.method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = stru.get_children_by_type (Api.NodeType.STATIC_METHOD, false);
+ assert (methods.size == 1);
+
+ method = methods.get (0) as Api.Method;
+ assert (method != null);
+
+ // (.Method check)
+ assert (method.get_cname () == "test_struct_global_static_method");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == true);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestStructGlobal.static_method");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "static_method");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ methods = stru.get_children_by_type (Api.NodeType.CREATION_METHOD, false);
+ bool default_constr = false;
+ bool named_constr = false;
+
+ foreach (Api.Node node in methods) {
+ method = node as Api.Method;
+ assert (method != null);
+
+ switch (method.name) {
+ case "TestStructGlobal":
+ // (.Method check)
+ assert (method.get_cname () == "test_struct_global_init");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == true);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestStructGlobal.TestStructGlobal");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+ default_constr = true;
+ break;
+
+ case "TestStructGlobal.named":
+ // (.Method check)
+ assert (method.get_cname () == "test_struct_global_init_named");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == true);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "TestStructGlobal.TestStructGlobal.named");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+ named_constr = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (default_constr == true);
+ assert (named_constr == true);
+
+
+
+ Gee.List<Api.Node> constants = stru.get_children_by_type (Api.NodeType.CONSTANT, false);
+ assert (constants.size == 1);
+
+ Api.Constant constant = constants.get (0) as Api.Constant;
+ assert (constant != null);
+ // (.Constant check)
+ assert (constant.get_cname () == "TEST_STRUCT_GLOBAL_constant");
+ // (.Symbol check)
+ assert (constant.is_deprecated == false);
+ assert (constant.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (constant.get_full_name () == "TestStructGlobal.constant");
+ assert (constant.get_filename () == "api-test.data.vapi");
+ assert (constant.name == "constant");
+ assert (constant.nspace == global_ns);
+ assert (constant.package == pkg);
+
+
+
+ Gee.List<Api.Node> fields = stru.get_children_by_type (Api.NodeType.FIELD, false);
+
+ bool field1 = false;
+ bool field2 = false;
+ foreach (Api.Node node in fields) {
+ Api.Field field = node as Api.Field;
+ assert (field != null);
+
+ switch (field.name) {
+ case "field1":
+ // (.Field check)
+ assert (field.get_cname () == "test_struct_global_field1");
+ assert (field.is_static == true);
+ assert (field.is_volatile == false);
+ // (.Symbol check)
+ assert (field.is_deprecated == false);
+ assert (field.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (field.get_full_name () == "TestStructGlobal.field1");
+ assert (field.get_filename () == "api-test.data.vapi");
+ assert (field.nspace == global_ns);
+ assert (field.package == pkg);
+
+ field1 = true;
+ break;
+
+ case "field2":
+ // (.Field check)
+ assert (field.get_cname () == "field2");
+ assert (field.is_static == false);
+ assert (field.is_volatile == false);
+ // (.Symbol check)
+ assert (field.is_deprecated == false);
+ assert (field.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (field.get_full_name () == "TestStructGlobal.field2");
+ assert (field.get_filename () == "api-test.data.vapi");
+ assert (field.nspace == global_ns);
+ assert (field.package == pkg);
+
+ field2 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (field1 == true);
+ assert (field2 == true);
+
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = stru.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void param_test (Api.Namespace ns, Api.Package pkg) {
+ Gee.List<Api.Node> methods = ns.get_children_by_type (Api.NodeType.METHOD, false);
+
+ bool func1 = false;
+ bool func2 = false;
+ bool func3 = false;
+ bool func4 = false;
+ bool func5 = false;
+ bool func6 = false;
+ bool func7 = false;
+ bool func8 = false;
+ bool func9 = false;
+ bool func10 = false;
+ bool func11 = false;
+ bool func12 = false;
+ bool func13 = false;
+ bool func14 = false;
+
+ foreach (Api.Node node in methods) {
+ Api.Method m = node as Api.Method;
+ assert (m != null);
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.METHOD,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STATIC_METHOD,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = m.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+
+ Gee.List<Api.Node> params = m.get_children_by_type (Api.NodeType.FORMAL_PARAMETER, false);
+
+ switch (m.name) {
+ case "test_function_param_1":
+ assert (params.size == 0);
+
+ func1 = true;
+ break;
+
+ case "test_function_param_2":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_2.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func2 = true;
+ break;
+
+ case "test_function_param_3":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == true);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_3.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func3 = true;
+ break;
+
+ case "test_function_param_4":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == true);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_4.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func4 = true;
+ break;
+
+ case "test_function_param_5":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_5.o");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "o");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Class);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "GLib.Object");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == true);
+ assert (param.parameter_type.is_owned == true);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func5 = true;
+ break;
+
+ case "test_function_param_6":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_6.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == true);
+
+ func6 = true;
+ break;
+
+ case "test_function_param_7":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == true);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == null);
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == null);
+ // param type:
+ assert (param.parameter_type.data_type == null);
+
+ func7 = true;
+ break;
+
+ case "test_function_param_8":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value != null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == true);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_8.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func8 = true;
+ break;
+
+ case "test_function_param_9":
+ assert (params.size == 7);
+
+ Api.FormalParameter? param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+
+
+ param = params.get (1) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == true);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.b");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "b");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+
+
+ param = params.get (2) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == true);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.c");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "c");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+
+
+ param = params.get (3) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.d");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "d");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Class);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "GLib.Object");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == true);
+ assert (param.parameter_type.is_owned == true);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+
+
+ param = params.get (4) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.e");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "e");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == true);
+
+
+
+ param = params.get (5) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value != null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == true);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_9.f");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "f");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Struct);
+ assert (((Api.Symbol) param.parameter_type.data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+
+
+ param = params.get (6) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == true);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == null);
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == null);
+ // param type:
+ assert (param.parameter_type.data_type == null);
+
+ func9 = true;
+ break;
+
+ case "test_function_param_10":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_10.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Pointer);
+ assert (((Api.Pointer) param.parameter_type.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Pointer) param.parameter_type.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Pointer) param.parameter_type.data_type).data_type).data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func10 = true;
+ break;
+
+ case "test_function_param_11":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_11.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Pointer);
+ assert (((Api.Pointer) param.parameter_type.data_type).data_type is Api.Pointer);
+ assert (((Api.Pointer) ((Api.Pointer) param.parameter_type.data_type).data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Pointer) ((Api.Pointer) param.parameter_type.data_type).data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Pointer) ((Api.Pointer) param.parameter_type.data_type).data_type).data_type).data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func11 = true;
+ break;
+
+ case "test_function_param_12":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_12.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Array);
+ //assert (((Api.Array) param.parameter_type.data_type).dimension == 1);
+ assert (((Api.Array) param.parameter_type.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func12 = true;
+ break;
+
+ case "test_function_param_13":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_13.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Array);
+ //assert (((Api.Array) param.parameter_type.data_type).dimension == 2);
+ assert (((Api.Array) param.parameter_type.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func13 = true;
+ break;
+
+ case "test_function_param_14":
+ assert (params.size == 1);
+
+ Api.FormalParameter param = params.get (0) as Api.FormalParameter;
+ assert (param != null);
+ // (.FormalParameter)
+ assert (param.default_value == null);
+ assert (param.is_out == false);
+ assert (param.is_ref == false);
+ assert (param.has_default_value == false);
+ assert (param.parameter_type != null);
+ assert (param.ellipsis == false);
+ // (.Symbol check)
+ assert (param.is_deprecated == false);
+ assert (param.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (param.get_full_name () == "ParamTest.test_function_param_14.a");
+ assert (param.get_filename () == "api-test.data.vapi");
+ assert (param.nspace == ns);
+ assert (param.package == pkg);
+ assert (param.name == "a");
+ // param type:
+ assert (param.parameter_type.data_type != null);
+ assert (param.parameter_type.data_type is Api.Array);
+ //assert (((Api.Array) param.parameter_type.data_type).dimension == 1);
+ assert (((Api.Array) param.parameter_type.data_type).data_type is Api.TypeReference);
+ //assert (((Api.Array) ((Api.Array) param.parameter_type.data_type).data_type).dimension == 1);
+ assert (((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type is Api.Array);
+ assert (((Api.Array) ((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) ((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ((Api.TypeReference) ((Api.Array) param.parameter_type.data_type).data_type).data_type).data_type).data_type).get_full_name () == "int");
+ assert (param.parameter_type.get_type_arguments ().size == 0);
+ assert (param.parameter_type.pass_ownership == false);
+ assert (param.parameter_type.is_owned == false);
+ assert (param.parameter_type.is_unowned == false);
+ assert (param.parameter_type.is_weak == false);
+ assert (param.parameter_type.is_dynamic == false);
+ assert (param.parameter_type.is_nullable == false);
+
+ func14 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (func1 == true);
+ assert (func2 == true);
+ assert (func3 == true);
+ assert (func4 == true);
+ assert (func5 == true);
+ assert (func6 == true);
+ assert (func7 == true);
+ assert (func8 == true);
+ assert (func9 == true);
+ assert (func10 == true);
+ assert (func11 == true);
+ assert (func12 == true);
+ assert (func13 == true);
+ assert (func14 == true);
+
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STATIC_METHOD,
+ Api.NodeType.STRUCT,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = ns.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+}
+
+
+public static void return_test (Api.Namespace ns, Api.Package pkg) {
+ Gee.List<Api.Node> methods = ns.get_children_by_type (Api.NodeType.METHOD, false);
+
+ bool func1 = false;
+ bool func2 = false;
+ bool func3 = false;
+ bool func4 = false;
+ bool func5 = false;
+ bool func6 = false;
+ bool func7 = false;
+ bool func8 = false;
+ bool func9 = false;
+
+ foreach (Api.Node node in methods) {
+ Api.Method m = node as Api.Method;
+ assert (m != null);
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.METHOD,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STATIC_METHOD,
+ Api.NodeType.STRUCT,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = m.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+
+ Api.TypeReference? ret = m.return_type;
+ assert (ret != null);
+
+ switch (m.name) {
+ case "test_function_1":
+ assert (ret.data_type == null);
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func1 = true;
+ break;
+
+ case "test_function_2":
+ assert (ret.data_type is Api.Struct);
+ assert (((Api.Struct) ret.data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func2 = true;
+ break;
+
+ case "test_function_3":
+ assert (ret.data_type is Api.Struct);
+ assert (((Api.Struct) ret.data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == true);
+
+ func3 = true;
+ break;
+
+ case "test_function_4":
+ assert (ret.data_type is Api.Class);
+ assert (((Api.Class) ret.data_type).get_full_name () == "string");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == true);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func4 = true;
+ break;
+
+ case "test_function_5":
+ assert (ret.data_type is Api.Pointer);
+ assert (((Api.Pointer) ret.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Pointer) ret.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Pointer) ret.data_type).data_type).data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func5 = true;
+ break;
+
+ case "test_function_6":
+ assert (ret.data_type is Api.Pointer);
+ assert (((Api.Pointer) ret.data_type).data_type is Api.Pointer);
+ assert (((Api.Pointer) ((Api.Pointer) ret.data_type).data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Pointer) ((Api.Pointer) ret.data_type).data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Pointer) ((Api.Pointer) ret.data_type).data_type).data_type).data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func6 = true;
+ break;
+
+ case "test_function_7":
+ assert (ret.data_type is Api.Array);
+ assert (((Api.Array) ret.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func7 = true;
+ break;
+
+ case "test_function_8":
+ assert (ret.data_type is Api.Array);
+ //assert (((Api.Array) ret.data_type).dimension == 1);
+ assert (((Api.Array) ret.data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func8 = true;
+ break;
+
+ case "test_function_9":
+ assert (ret.data_type is Api.Array);
+ //assert (((Api.Array) ret.data_type).dimension == 1);
+ assert (((Api.Array) ret.data_type).data_type is Api.TypeReference);
+ //assert (((Api.Array) ((Api.Array) ret.data_type).data_type).dimension == 1);
+ assert (((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type is Api.Array);
+ assert (((Api.Array) ((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type).data_type is Api.TypeReference);
+ assert (((Api.TypeReference) ((Api.Array) ((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type).data_type).data_type is Api.Struct);
+ assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ((Api.TypeReference) ((Api.Array) ret.data_type).data_type).data_type).data_type).data_type).get_full_name () == "int");
+ assert (ret.get_type_arguments ().size == 0);
+ assert (ret.pass_ownership == false);
+ assert (ret.is_owned == false);
+ assert (ret.is_unowned == false);
+ assert (ret.is_weak == false);
+ assert (ret.is_dynamic == false);
+ assert (ret.is_nullable == false);
+
+ func9 = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (func1 == true);
+ assert (func2 == true);
+ assert (func3 == true);
+ assert (func4 == true);
+ assert (func5 == true);
+ assert (func6 == true);
+ assert (func7 == true);
+ assert (func8 == true);
+ assert (func9 == true);
+}
+
+
+public static void version_test (Api.Namespace ns, Api.Package pkg) {
+ Gee.List<Api.Node> methods = ns.get_children_by_type (Api.NodeType.METHOD, false);
+
+ bool func1 = false;
+ bool func2 = false;
+ bool func3 = false;
+#if VALA_0_32
+ bool func4 = false;
+ bool func5 = false;
+ bool func6 = false;
+ bool func7 = false;
+ bool func8 = false;
+ bool func9 = false;
+#endif
+
+ foreach (Api.Node node in methods) {
+ Api.Method m = node as Api.Method;
+ assert (m != null);
+
+ Api.NodeType[] forbidden = {
+ Api.NodeType.CLASS,
+ Api.NodeType.CONSTANT,
+ Api.NodeType.CREATION_METHOD,
+ Api.NodeType.DELEGATE,
+ Api.NodeType.ENUM,
+ Api.NodeType.ENUM_VALUE,
+ Api.NodeType.ERROR_CODE,
+ Api.NodeType.ERROR_DOMAIN,
+ Api.NodeType.FIELD,
+ Api.NodeType.INTERFACE,
+ Api.NodeType.METHOD,
+ Api.NodeType.NAMESPACE,
+ Api.NodeType.PACKAGE,
+ Api.NodeType.PROPERTY,
+ Api.NodeType.PROPERTY_ACCESSOR,
+ Api.NodeType.SIGNAL,
+ Api.NodeType.STATIC_METHOD,
+ Api.NodeType.STRUCT,
+ Api.NodeType.FORMAL_PARAMETER,
+ Api.NodeType.TYPE_PARAMETER
+ };
+
+ Gee.List<Api.Node> nodes = m.get_children_by_types (forbidden, false);
+ assert (nodes.size == 0);
+
+ Api.TypeReference? ret = m.return_type;
+ assert (ret != null);
+
+ switch (m.name) {
+ case "test_function_1":
+ assert (m.get_attribute ("Deprecated") != null);
+ assert (m.is_deprecated == true);
+
+ func1 = true;
+ break;
+
+ case "test_function_2":
+ assert (m.get_attribute ("Deprecated").get_argument ("since").get_value_as_string () == "\"1.0\"");
+ assert (m.get_attribute ("Deprecated").get_argument ("replacement").get_value_as_string () == "\"test_function_4\"");
+ assert (m.is_deprecated == true);
+
+ func2 = true;
+ break;
+
+ case "test_function_3":
+ //assert (m.get_attribute ("Experimental") != null);
+
+ func3 = true;
+ break;
+
+#if VALA_0_32
+ case "test_function_4":
+ assert (m.get_attribute ("Version").get_argument ("since").get_value_as_string () == "\"2.0\"");
+ assert (m.is_deprecated == false);
+
+ func4 = true;
+ break;
+
+ case "test_function_5":
+ assert (m.get_attribute ("Version").get_argument ("deprecated").get_value_as_boolean () == true);
+ assert (m.is_deprecated == true);
+
+ func5 = true;
+ break;
+
+ case "test_function_6":
+ assert (m.get_attribute ("Version").get_argument ("deprecated").get_value_as_boolean () == true);
+ assert (m.get_attribute ("Version").get_argument ("deprecated_since").get_value_as_string () == "\"2.0\"");
+ assert (m.get_attribute ("Version").get_argument ("replacement").get_value_as_string () == "\"test_function_4\"");
+ assert (m.get_attribute ("Version").get_argument ("since").get_value_as_string () == "\"1.0\"");
+ assert (m.is_deprecated == true);
+
+ func6 = true;
+ break;
+
+ case "test_function_7":
+ assert (m.get_attribute ("Version").get_argument ("deprecated_since").get_value_as_string () == "\"2.0\"");
+ assert (m.is_deprecated == true);
+
+ func7 = true;
+ break;
+
+ case "test_function_8":
+ assert (m.get_attribute ("Version").get_argument ("deprecated").get_value_as_boolean () == false);
+ assert (m.is_deprecated == false);
+
+ func8 = true;
+ break;
+
+ case "test_function_9":
+ //assert (m.get_attribute ("Version").get_argument ("experimental").get_value_as_boolean () == true);
+
+ func9 = true;
+ break;
+#endif
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (func1 == true);
+ assert (func2 == true);
+ assert (func3 == true);
+#if VALA_0_32
+ assert (func4 == true);
+ assert (func5 == true);
+ assert (func6 == true);
+ assert (func7 == true);
+ assert (func8 == true);
+ assert (func9 == true);
+#endif
+}
+
+
+public static void test_global_ns (Api.Namespace global_ns, Api.Package pkg) {
+ Gee.List<Api.Node> methods = global_ns.get_children_by_type (Api.NodeType.METHOD, false);
+ assert (methods.size == 1);
+
+ Api.Method method = methods.get (0) as Api.Method;
+ assert (method != null);
+ // (.Method check)
+ assert (method.get_cname () == "test_function_global");
+ //assert (method.get_dbus_name () == null);
+ //assert (method.get_dbus_result_name () == null);
+ //assert (method.is_dbus_visible == false);
+ assert (method.base_method == null);
+ assert (method.is_yields == false);
+ assert (method.is_abstract == false);
+ assert (method.is_virtual == false);
+ assert (method.is_override == false);
+ assert (method.is_static == false);
+ assert (method.is_constructor == false);
+ assert (method.is_inline == false);
+ // (.Symbol check)
+ assert (method.is_deprecated == false);
+ assert (method.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (method.get_full_name () == "test_function_global");
+ assert (method.get_filename () == "api-test.data.vapi");
+ assert (method.name == "test_function_global");
+ assert (method.nspace == global_ns);
+ assert (method.package == pkg);
+
+
+
+ Gee.List<Api.Node> delegates = global_ns.get_children_by_type (Api.NodeType.DELEGATE, false);
+ assert (delegates.size == 1);
+
+ Api.Delegate del = delegates.get (0) as Api.Delegate;
+ assert (del != null);
+ // (.Delegate check)
+ assert (del.get_cname () == "test_delegate_global");
+ assert (del.is_static == false);
+ // (.TypeSymbol check)
+ assert (del.is_basic_type == false);
+ // (.Symbol check)
+ assert (del.is_deprecated == false);
+ assert (del.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (del.get_full_name () == "test_delegate_global");
+ assert (del.get_filename () == "api-test.data.vapi");
+ assert (del.name == "test_delegate_global");
+ assert (del.nspace == global_ns);
+ assert (del.package == pkg);
+
+
+
+ Gee.List<Api.Node> fields = global_ns.get_children_by_type (Api.NodeType.FIELD, false);
+ assert (fields.size == 1);
+
+ Api.Field field = fields.get (0) as Api.Field;
+ assert (field != null);
+ // (.Field check)
+ assert (field.get_cname () == "test_field_global");
+ assert (field.is_static == false);
+ assert (field.is_volatile == false);
+ // (.Symbol check)
+ assert (field.is_deprecated == false);
+ assert (field.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (field.get_full_name () == "test_field_global");
+ assert (field.get_filename () == "api-test.data.vapi");
+ assert (field.name == "test_field_global");
+ assert (field.nspace == global_ns);
+ assert (field.package == pkg);
+
+
+
+ Gee.List<Api.Node> constants = global_ns.get_children_by_type (Api.NodeType.CONSTANT, false);
+ assert (constants.size == 1);
+
+ Api.Constant constant = constants.get (0) as Api.Constant;
+ assert (constant != null);
+ // (.Constant check)
+ assert (constant.get_cname () == "test_const_global");
+ // (.Symbol check)
+ assert (constant.is_deprecated == false);
+ assert (constant.accessibility == Api.SymbolAccessibility.PUBLIC);
+ // (.Node)
+ assert (constant.get_full_name () == "test_const_global");
+ assert (constant.get_filename () == "api-test.data.vapi");
+ assert (constant.name == "test_const_global");
+ assert (constant.nspace == global_ns);
+ assert (constant.package == pkg);
+
+
+
+ Gee.List<Api.Node> enums = global_ns.get_children_by_type (Api.NodeType.ENUM, false);
+ assert (enums.size == 1);
+
+ Api.Enum en = enums.get (0) as Api.Enum;
+ test_enum_global (en, pkg, global_ns);
+
+
+
+ Gee.List<Api.Node> errordomains = global_ns.get_children_by_type (Api.NodeType.ERROR_DOMAIN, false);
+ assert (errordomains.size == 1);
+
+ Api.ErrorDomain err = errordomains.get (0) as Api.ErrorDomain;
+ test_erroromain_global (err, pkg, global_ns);
+
+
+
+ Gee.List<Api.Node> classes = global_ns.get_children_by_type (Api.NodeType.CLASS, false);
+ assert (classes.size == 1);
+
+ Api.Class cl = classes.get (0) as Api.Class;
+ test_class_global (cl, pkg, global_ns);
+
+
+
+ Gee.List<Api.Node> interfaces = global_ns.get_children_by_type (Api.NodeType.INTERFACE, false);
+ assert (interfaces.size == 1);
+
+ Api.Interface iface = interfaces.get (0) as Api.Interface;
+ test_interface_global (iface, pkg, global_ns);
+
+
+
+ Gee.List<Api.Node> structs = global_ns.get_children_by_type (Api.NodeType.STRUCT, false);
+ assert (structs.size == 1);
+
+ Api.Struct stru = structs.get (0) as Api.Struct;
+ test_struct_global (stru, pkg, global_ns);
+
+
+
+ Gee.List<Api.Node> namespaces = global_ns.get_children_by_type (Api.NodeType.NAMESPACE, false);
+
+
+ bool returntest = false;
+ bool paramtest = false;
+ bool versiontest = false;
+
+ foreach (Api.Node node in namespaces) {
+ Api.Namespace ns = node as Api.Namespace;
+ assert (ns != null);
+
+ switch (ns.name) {
+ case "ParamTest":
+ param_test (ns, pkg);
+ paramtest = true;
+ break;
+
+ case "ReturnTest":
+ return_test (ns, pkg);
+ returntest = true;
+ break;
+
+ case "VersionTest":
+ version_test (ns, pkg);
+ versiontest = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (returntest == true);
+ assert (paramtest == true);
+ assert (versiontest == true);
+
+}
+
+
+public static void test_package_out (Api.Package pkg) {
+ assert (pkg.is_package == false);
+ assert (pkg.nspace == null);
+ assert (pkg.package == pkg);
+ //assert (pkg.get_full_name () == null);
+
+ // TODO: check .get_source_file ()
+
+
+ Gee.List<Api.Node> namespaces = pkg.get_children_by_type (Api.NodeType.NAMESPACE, false);
+ assert (namespaces != null);
+ assert (namespaces.size == 1);
+
+ Api.Namespace global_ns = namespaces.get (0) as Api.Namespace;
+ assert (global_ns != null);
+ assert (global_ns.name == null);
+ assert (global_ns.get_full_name () == null);
+ assert (global_ns.is_deprecated == false);
+ assert (global_ns.get_attributes ().size == 0);
+ assert (global_ns.accessibility == Api.SymbolAccessibility.PUBLIC);
+ assert (global_ns.package == pkg);
+ //assert (global_ns.nspace == null);
+
+ test_global_ns (global_ns, pkg);
+}
+
+
+public static void test_driver (string driver_path) {
+ if (!FileUtils.test (driver_path, FileTest.EXISTS)) {
+ message ("Driver '%s' is not available", Valadoc.realpath (driver_path));
+ assert_not_reached ();
+ }
+
+ var settings = new Valadoc.Settings ();
+ var reporter = new ErrorReporter ();
+
+ settings.source_files = {
+ TOP_SRC_DIR + "/tests/drivers/api-test.data.vapi"
+ };
+
+ settings._protected = false;
+ settings._internal = false;
+ settings._private = true;
+ settings.with_deps = false;
+ settings.verbose = false;
+ settings.wiki_directory = null;
+ settings.pkg_name = "out";
+ settings.path = "out";
+
+
+ ModuleLoader modules = ModuleLoader.get_instance ();
+ var driver = modules.create_driver (driver_path);
+ assert (driver != null);
+
+
+ Api.Tree? doctree = driver.build (settings, reporter);
+ assert (reporter.errors == 0);
+ assert (doctree != null);
+
+
+ bool tmp = doctree.create_tree ();
+ assert (tmp);
+
+
+ Collection<Api.Package> packages = doctree.get_package_list ();
+ assert (packages != null);
+
+ bool glib = false;
+ bool gobj = false;
+ bool test = false;
+
+ foreach (Api.Package pkg in packages) {
+ switch (pkg.name) {
+ case "glib-2.0":
+ assert (pkg.is_package);
+ glib = true;
+ break;
+
+ case "gobject-2.0":
+ assert (pkg.is_package);
+ gobj = true;
+ break;
+
+ case "@out":
+ test_package_out (pkg);
+ test = true;
+ break;
+
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ assert (glib == true);
+ assert (gobj == true);
+ assert (test == true);
+}
+
+
diff --git a/valadoc/tests/libvaladoc/errorreporter.vala b/valadoc/tests/libvaladoc/errorreporter.vala
new file mode 100644
index 000000000..59e5e5304
--- /dev/null
+++ b/valadoc/tests/libvaladoc/errorreporter.vala
@@ -0,0 +1,70 @@
+/* errorreporter.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+using Valadoc;
+
+void main () {
+ var reporter = new Valadoc.ErrorReporter ();
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+
+ // simple errors:
+ reporter.simple_error ("test", "error 1 %d %s", 1, "foo");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 1);
+
+ reporter.simple_error (null, "error 2");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 2);
+
+
+ // simple warnings:
+ reporter.simple_warning ("test", "warning 1 %d %s", 1, "foo");
+ assert (reporter.warnings == 1);
+ assert (reporter.errors == 2);
+
+ reporter.simple_warning (null, "warning 2");
+ assert (reporter.warnings == 2);
+ assert (reporter.errors == 2);
+
+
+ // errors:
+ reporter.error ("file", 1, 1, 1, "line", "error, complex, 1 %d %s", 1, "foo");
+ assert (reporter.warnings == 2);
+ assert (reporter.errors == 3);
+
+ reporter.error ("file", 1, 1, 1, "line", "error, complex, 2");
+ assert (reporter.warnings == 2);
+ assert (reporter.errors == 4);
+
+
+ // warnngs:
+ reporter.warning ("file", 1, 1, 1, "line", "warning, complex, 1 %d %s", 1, "foo");
+ assert (reporter.warnings == 3);
+ assert (reporter.errors == 4);
+
+ reporter.warning ("file", 1, 1, 1, "line", "warning, complex, 2");
+ assert (reporter.warnings == 4);
+ assert (reporter.errors == 4);
+}
+
diff --git a/valadoc/tests/libvaladoc/gtkdoc-scanner.vala b/valadoc/tests/libvaladoc/gtkdoc-scanner.vala
new file mode 100644
index 000000000..5144803ca
--- /dev/null
+++ b/valadoc/tests/libvaladoc/gtkdoc-scanner.vala
@@ -0,0 +1,225 @@
+/* gtkdoc-scanner.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+using Valadoc;
+
+
+void main () {
+ var scanner = new Gtkdoc.Scanner ();
+ scanner.reset ("""<element1>
+<element2 a="a-val" b="b-val">
+</element3>
+<element4 />
+<element5 a="a-val" b="b-val"/>
+<!---->
+<!--
+AAAA
+-->
+foo_bar ()
+%aaa
+@param
+#TypeName
+myword
+
+|[]|
+::my-signal
+:my-property
+""");
+
+ var token = scanner.next ();
+
+ assert (token.type == Gtkdoc.TokenType.XML_OPEN);
+ assert (token.content == "element1");
+ assert (((Gee.Map) token.attributes).size == 0);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_OPEN);
+ assert (token.content == "element2");
+ assert (token.attributes.get ("a") == "a-val");
+ assert (token.attributes.get ("b") == "b-val");
+ assert (((Gee.Map) token.attributes).size == 2);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_CLOSE);
+ assert (token.content == "element3");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_OPEN);
+ assert (token.content == "element4");
+ assert (((Gee.Map) token.attributes).size == 0);
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_CLOSE);
+ assert (token.content == "element4");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_OPEN);
+ assert (token.content == "element5");
+ assert (token.attributes.get ("a") == "a-val");
+ assert (token.attributes.get ("b") == "b-val");
+ assert (((Gee.Map) token.attributes).size == 2);
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_CLOSE);
+ assert (token.content == "element5");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_COMMENT);
+ assert (token.content == "");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.XML_COMMENT);
+ assert (token.content == "");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_FUNCTION);
+ assert (token.content == "foo_bar");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_CONST);
+ assert (token.content == "aaa");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_PARAM);
+ assert (token.content == "param");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_TYPE);
+ assert (token.content == "TypeName");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.WORD);
+ assert (token.content == "myword");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.SPACE);
+ assert (token.content == " ");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_PARAGRAPH);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_SOURCE_OPEN);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_SOURCE_CLOSE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_SIGNAL);
+ assert (token.content == "my-signal");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.GTKDOC_PROPERTY);
+ assert (token.content == "my-property");
+ assert (token.attributes == null);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.NEWLINE);
+
+
+ token = scanner.next ();
+ assert (token.type == Gtkdoc.TokenType.EOF);
+
+}
diff --git a/valadoc/tests/libvaladoc/markupreader.vala b/valadoc/tests/libvaladoc/markupreader.vala
new file mode 100644
index 000000000..d38b4d439
--- /dev/null
+++ b/valadoc/tests/libvaladoc/markupreader.vala
@@ -0,0 +1,207 @@
+/* markupreader.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void positive_1 () {
+ var reporter = new ErrorReporter ();
+
+ string content =
+"""<?xml version="1.0" ?>
+<root-element>
+ <subelement level="1" nested="true">my text</subelement>
+ <simpletag1 level="2" nested="false" />
+ <simpletag2 level="3"/>
+ <simpletag3/>
+</root-element>""";
+
+
+ var reader = new MarkupReader.from_string ("testfile", content, reporter);
+ assert (reader.filename == "testfile");
+
+ MarkupSourceLocation begin;
+ MarkupSourceLocation end;
+ MarkupTokenType token;
+
+
+ token = reader.read_token (out begin, out end);
+ token = reader.read_token (out begin, out end);
+
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "root-element");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 2);
+ assert (end.line == 2);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "subelement");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 2);
+ assert (reader.get_attribute ("nested") == "true");
+ assert (reader.get_attribute ("level") == "1");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.TEXT);
+ assert (reader.name == null);
+ assert (reader.content == "my text");
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "subelement");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 3);
+ assert (end.line == 3);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag1");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 2);
+ assert (reader.get_attribute ("nested") == "false");
+ assert (reader.get_attribute ("level") == "2");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 4);
+ assert (end.line == 4);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag1");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 4);
+ assert (end.line == 4);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag2");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 1);
+ assert (reader.get_attribute ("level") == "3");
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 5);
+ assert (end.line == 5);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag2");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 5);
+ assert (end.line == 5);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.START_ELEMENT);
+ assert (reader.name == "simpletag3");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 6);
+ assert (end.line == 6);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "simpletag3");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 6);
+ assert (end.line == 6);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.END_ELEMENT);
+ assert (reader.name == "root-element");
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 7);
+ assert (end.line == 7);
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.EOF);
+ assert (reader.name == null);
+ assert (reader.content == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 7);
+ assert (end.line == 7);
+}
+
+
+public static void positive_2 () {
+ var reporter = new ErrorReporter ();
+
+ string content = "AA BB &amp; &quot;&apos; &lt; &gt; &percnt;";
+
+ var reader = new MarkupReader.from_string ("testfile", content, reporter);
+ assert (reader.filename == "testfile");
+
+ MarkupSourceLocation begin;
+ MarkupSourceLocation end;
+ MarkupTokenType token;
+
+ token = reader.read_token (out begin, out end);
+ assert (token == MarkupTokenType.TEXT);
+ assert (reader.content == "AA BB & \"' < > >");
+ assert (reader.name == null);
+ assert (reader.get_attributes ().size == 0);
+ assert (reporter.warnings == 0);
+ assert (reporter.errors == 0);
+ assert (begin.line == 1);
+ assert (end.line == 1);
+
+}
+
+
+public static void main () {
+ positive_1 ();
+ positive_2 ();
+}
+
diff --git a/valadoc/tests/libvaladoc/parser/generic-scanner.vala b/valadoc/tests/libvaladoc/parser/generic-scanner.vala
new file mode 100644
index 000000000..183bd5e96
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/generic-scanner.vala
@@ -0,0 +1,70 @@
+/* helpers.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public class TestScanner : Object, Valadoc.Scanner {
+ Valadoc.Parser parser;
+
+ Valadoc.TokenType[] seq = {};
+ bool _stop = false;
+ int pos = 0;
+
+ public void set_pattern (Valadoc.TokenType[] seq) {
+ this.seq = seq;
+ }
+
+ private void emit_token (Valadoc.TokenType type) throws Valadoc.ParserError {
+ Valadoc.SourceLocation loc = SourceLocation (pos, pos);
+ parser.accept_token (new Token.from_type (type, loc, loc));
+ }
+
+ public void set_parser (Valadoc.Parser parser) {
+ this.parser = parser;
+ }
+
+ public void reset () {
+ _stop = false;
+ pos = 0;
+ }
+
+ public void scan (string content) throws Valadoc.ParserError {
+ while (!_stop && pos < seq.length) {
+ emit_token (seq[pos]);
+ pos++;
+ }
+ }
+
+ public void end () throws Valadoc.ParserError {
+ emit_token (Valadoc.TokenType.EOF);
+ }
+
+ public void stop () {
+ _stop = true;
+ }
+
+ public string get_line_content () {
+ return "";
+ }
+}
+
diff --git a/valadoc/tests/libvaladoc/parser/manyrule.vala b/valadoc/tests/libvaladoc/parser/manyrule.vala
new file mode 100644
index 000000000..2af76d302
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/manyrule.vala
@@ -0,0 +1,90 @@
+/* manyrule.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void main () {
+ var settings = new Valadoc.Settings ();
+ var scanner = new TestScanner ();
+ var reporter = new ErrorReporter ();
+ var parser = new Parser (settings, scanner, reporter);
+ scanner.set_parser (parser);
+
+ Rule rule = Rule.many ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // negative test:
+ bool reached = false;
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+}
+
+
diff --git a/valadoc/tests/libvaladoc/parser/oneofrule.vala b/valadoc/tests/libvaladoc/parser/oneofrule.vala
new file mode 100644
index 000000000..5da75267e
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/oneofrule.vala
@@ -0,0 +1,99 @@
+/* oneofrule.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void main () {
+ var settings = new Valadoc.Settings ();
+ var scanner = new TestScanner ();
+ var reporter = new ErrorReporter ();
+ var parser = new Parser (settings, scanner, reporter);
+ scanner.set_parser (parser);
+
+ Rule rule = Rule.one_of ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2,
+ Valadoc.TokenType.EQUAL_3
+ });
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_2
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_3
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // negative test:
+ bool reached = false;
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_4
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+}
+
diff --git a/valadoc/tests/libvaladoc/parser/optionalrule.vala b/valadoc/tests/libvaladoc/parser/optionalrule.vala
new file mode 100644
index 000000000..b7b68eaf7
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/optionalrule.vala
@@ -0,0 +1,84 @@
+/* optionalrule.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void main () {
+ var settings = new Valadoc.Settings ();
+ var scanner = new TestScanner ();
+ var reporter = new ErrorReporter ();
+ var parser = new Parser (settings, scanner, reporter);
+ scanner.set_parser (parser);
+
+ Rule rule = Rule.option ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // negative test:
+ bool reached = false;
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_2
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+}
+
+
diff --git a/valadoc/tests/libvaladoc/parser/sequencerule.vala b/valadoc/tests/libvaladoc/parser/sequencerule.vala
new file mode 100644
index 000000000..13b4eec44
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/sequencerule.vala
@@ -0,0 +1,103 @@
+/* sequencerule.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void main () {
+ var settings = new Valadoc.Settings ();
+ var scanner = new TestScanner ();
+ var reporter = new ErrorReporter ();
+ var parser = new Parser (settings, scanner, reporter);
+ scanner.set_parser (parser);
+
+ Rule rule = Rule.seq ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2,
+ Valadoc.TokenType.EQUAL_3,
+ Valadoc.TokenType.EQUAL_4,
+ Valadoc.TokenType.EQUAL_5
+ });
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2,
+ Valadoc.TokenType.EQUAL_3,
+ Valadoc.TokenType.EQUAL_4,
+ Valadoc.TokenType.EQUAL_5
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // negative test:
+ bool reached = false;
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2,
+ Valadoc.TokenType.EQUAL_3
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+
+
+
+ // negative test:
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2,
+ Valadoc.TokenType.EQUAL_4,
+ Valadoc.TokenType.EQUAL_3,
+ Valadoc.TokenType.EQUAL_5
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+
+}
+
+
diff --git a/valadoc/tests/libvaladoc/parser/stubrule.vala b/valadoc/tests/libvaladoc/parser/stubrule.vala
new file mode 100644
index 000000000..6a097fd0b
--- /dev/null
+++ b/valadoc/tests/libvaladoc/parser/stubrule.vala
@@ -0,0 +1,92 @@
+/* stubrule.vala
+ *
+ * Copyright (C) 2012 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc;
+
+
+public static void main () {
+ var settings = new Valadoc.Settings ();
+ var scanner = new TestScanner ();
+ var reporter = new ErrorReporter ();
+ var parser = new Parser (settings, scanner, reporter);
+ scanner.set_parser (parser);
+
+ StubRule rule = new StubRule ();
+
+ Rule inner_rule = Rule.many ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ rule.set_rule (inner_rule);
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // positive test:
+ try {
+ parser.set_root_rule (rule);
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ assert_not_reached ();
+ }
+
+
+ // negative test:
+ bool reached = false;
+ try {
+ parser.set_root_rule (rule);
+ reached = false;
+
+ scanner.set_pattern ({
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_1,
+ Valadoc.TokenType.EQUAL_2
+ });
+
+ parser.parse ("", "", 0, 0);
+ } catch (Error e) {
+ reached = true;
+ }
+
+ assert (reached);
+}
+
+
diff --git a/valadoc/tests/testrunner.sh b/valadoc/tests/testrunner.sh
new file mode 100755
index 000000000..79f29788e
--- /dev/null
+++ b/valadoc/tests/testrunner.sh
@@ -0,0 +1,123 @@
+#!/usr/bin/env bash
+# testrunner.sh
+#
+# Copyright (C) 2006-2008 Jürg Billeter
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Author:
+# Jürg Billeter <j@bitron.ch>
+
+builddir=$PWD
+topbuilddir=$TOPBUILDDIR
+topsrcdir=$TOPSRCDIR
+vapidir=$topsrcdir/vapi
+
+export G_DEBUG=fatal_warnings
+export PKG_CONFIG_PATH=$topbuilddir/src/libvaladoc
+export LD_LIBRARY_PATH=$topbuilddir/src/libvaladoc/.libs
+
+VALAC=valac
+VALAFLAGS="-X -D -X TOP_SRC_DIR=\"$topsrcdir\" --vapidir $topbuilddir/src/libvaladoc --pkg valadoc-1.0 --pkg gee-0.8 --disable-warnings --main main --save-temps -X -g -X -O0 -X -pipe -X -lm -X -Werror=return-type -X -Werror=init-self -X -Werror=implicit -X -Werror=sequence-point -X -Werror=return-type -X -Werror=uninitialized -X -Werror=pointer-arith -X -Werror=int-to-pointer-cast -X -Werror=pointer-to-int-cast -X -Wformat -X -Werror=format-security -X -Werror=format-nonliteral -X -L$topbuilddir/src/libvaladoc/.libs -X -I$topbuilddir/src/libvaladoc $topsrcdir/tests/libvaladoc/parser/generic-scanner.vala $topsrcdir/tests/drivers/generic-api-test.vala"
+
+testdir=_test
+rm -rf $testdir
+mkdir $testdir
+cd $testdir
+
+echo -n -e "TEST: Building...\033[72G"
+
+cat << "EOF" > checkall
+all=0
+fail=0
+EOF
+
+cat << "EOF" > main.vala
+void main (string[] args) {
+ switch (args[1]) {
+EOF
+
+PACKAGES=gio-2.0
+SOURCEFILES=
+for testfile in "$@"; do
+ rm -f prepare check
+ echo 'set -e' >> prepare
+
+ case "$testfile" in
+ *.vala)
+ testpath=${testfile/.vala/}
+ ns=${testpath//\//.}
+ ns=${ns//-/_}
+ SOURCEFILE=$ns.vala
+ SOURCEFILES="$SOURCEFILES $SOURCEFILE"
+
+ echo " case \"/$testpath\": $ns.main (); break;" >> main.vala
+ echo "namespace $ns {" > $SOURCEFILE
+ cat "$topsrcdir/tests/$testfile" >> $SOURCEFILE
+ echo "}" >> $SOURCEFILE
+
+ echo "./test$EXEEXT /$testpath" > check
+ ;;
+ esac
+
+ cat prepare check > $ns.check
+ cat << EOF >> checkall
+echo -n -e " /$testpath: \033[72G"
+((all++))
+if bash $ns.check &>log; then
+ echo -e "\033[0;32mOK\033[m"
+else
+ ((fail++))
+ echo -e "\033[0;31mFAIL\033[m"
+ cat log
+fi
+EOF
+done
+
+cat << "EOF" >> checkall
+if [ $fail -eq 0 ]; then
+ echo "All $all tests passed"
+else
+ echo "$fail of $all tests failed"
+ exit 1
+fi
+EOF
+
+cat << "EOF" >> main.vala
+ default: assert_not_reached ();
+ }
+}
+EOF
+
+cat $SOURCEFILES >> main.vala
+
+if $VALAC $VALAFLAGS -o test$EXEEXT $([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") main.vala &>log; then
+ echo -e "\033[0;32mOK\033[m"
+else
+ echo -e "\033[0;31mFAIL\033[m"
+ cat log
+
+ cd $builddir
+ exit 1
+fi
+
+if bash checkall; then
+ cd $builddir
+ rm -rf $testdir
+else
+ cd $builddir
+ exit 1
+fi
+