[valadoc] Add tests for drivers



commit 5e70a81a7af47ccab0a9476bd6e00a2edd3208a3
Author: Florian Brosch <flo brosch gmail com>
Date:   Tue Aug 14 23:14:31 2012 +0200

    Add tests for drivers

 src/libvaladoc/markupreader.vala |    3 +
 tests/Makefile.am                |    7 +
 tests/drivers/driver-0-10.vala   |    6 +
 tests/drivers/driver-0-12.vala   |    6 +
 tests/drivers/driver-0-14.vala   |    6 +
 tests/drivers/driver-0-16.vala   |    6 +
 tests/drivers/driver-0-18.vala   |    6 +
 tests/generic-api-test.vala      | 2639 ++++++++++++++++++++++++++++++++++++++
 tests/testrunner.sh              |    2 +-
 9 files changed, 2680 insertions(+), 1 deletions(-)
---
diff --git a/src/libvaladoc/markupreader.vala b/src/libvaladoc/markupreader.vala
index 93495f9..1d63642 100644
--- a/src/libvaladoc/markupreader.vala
+++ b/src/libvaladoc/markupreader.vala
@@ -146,6 +146,9 @@ public class Valadoc.MarkupReader : Object {
 			return MarkupTokenType.END_ELEMENT;
 		}
 
+		content = null;
+		name = null;
+
 		space ();
 
 		MarkupTokenType type = MarkupTokenType.NONE;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8fd51c9..db4167e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -23,6 +23,11 @@ TESTS = \
 	libvaladoc/parser/sequencerule.vala \
 	libvaladoc/parser/optionalrule.vala \
 	libvaladoc/parser/stubrule.vala \
+	drivers/driver-0-10.vala \
+	drivers/driver-0-12.vala \
+	drivers/driver-0-14.vala \
+	drivers/driver-0-16.vala \
+	drivers/driver-0-18.vala \
 	$(NULL)
 
 check-TESTS: $(TESTS)
@@ -30,6 +35,8 @@ check-TESTS: $(TESTS)
 
 EXTRA_DIST = \
 	testrunner.sh \
+	generic-api-test.vala \
+	helpers.vala \
 	$(TESTS) \
 	$(NULL)
 
diff --git a/tests/drivers/driver-0-10.vala b/tests/drivers/driver-0-10.vala
new file mode 100644
index 0000000..6856b40
--- /dev/null
+++ b/tests/drivers/driver-0-10.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+	test_driver ("../../src/driver/0.10.x/.libs");
+}
+
diff --git a/tests/drivers/driver-0-12.vala b/tests/drivers/driver-0-12.vala
new file mode 100644
index 0000000..00c8415
--- /dev/null
+++ b/tests/drivers/driver-0-12.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+	test_driver ("../../src/driver/0.12.x/.libs");
+}
+
diff --git a/tests/drivers/driver-0-14.vala b/tests/drivers/driver-0-14.vala
new file mode 100644
index 0000000..68e6182
--- /dev/null
+++ b/tests/drivers/driver-0-14.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+	test_driver ("../../src/driver/0.14.x/.libs");
+}
+
diff --git a/tests/drivers/driver-0-16.vala b/tests/drivers/driver-0-16.vala
new file mode 100644
index 0000000..1100201
--- /dev/null
+++ b/tests/drivers/driver-0-16.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+	test_driver ("../../src/driver/0.16.x/.libs");
+}
+
diff --git a/tests/drivers/driver-0-18.vala b/tests/drivers/driver-0-18.vala
new file mode 100644
index 0000000..82aa5d0
--- /dev/null
+++ b/tests/drivers/driver-0-18.vala
@@ -0,0 +1,6 @@
+
+
+public static void main () {
+	test_driver ("../../src/driver/0.18.x/.libs");
+}
+
diff --git a/tests/generic-api-test.vala b/tests/generic-api-test.vala
new file mode 100644
index 0000000..61d4280
--- /dev/null
+++ b/tests/generic-api-test.vala
@@ -0,0 +1,2639 @@
+/* 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;
+
+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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.Array);
+			//assert (((Api.Array) ((Api.Array) param.parameter_type.data_type).data_type).dimension == 1);
+			assert (((Api.Array) ((Api.Array) param.parameter_type.data_type).data_type).data_type is Api.TypeReference);
+			assert (((Api.TypeReference) ((Api.Array) ((Api.Array) param.parameter_type.data_type).data_type).data_type).data_type is Api.Struct);
+			assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ((Api.Array) 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);
+
+			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.Array);
+			//assert (((Api.Array) ((Api.Array) ret.data_type).data_type).dimension == 1);
+			assert (((Api.Array) ((Api.Array) ret.data_type).data_type).data_type is Api.TypeReference);
+			assert (((Api.TypeReference) ((Api.Array) ((Api.Array) ret.data_type).data_type).data_type).data_type is Api.Struct);
+			assert (((Api.Struct) ((Api.TypeReference) ((Api.Array) ((Api.Array) 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);
+
+			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 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.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 == true);
+	// (.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.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.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.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;
+
+	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;
+
+		default:
+			assert_not_reached ();
+		}
+	}
+
+	assert (returntest == true);
+	assert (paramtest == 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 = {
+			"../../tests/drivers/api-test.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/tests/testrunner.sh b/tests/testrunner.sh
index 7eb43ff..cf83ec1 100755
--- a/tests/testrunner.sh
+++ b/tests/testrunner.sh
@@ -30,7 +30,7 @@ export G_DEBUG=fatal_warnings
 export PKG_CONFIG_PATH=../../src/libvaladoc
 
 VALAC=valac
-VALAFLAGS="--vapidir ../../src/libvaladoc --pkg valadoc-1.0 --pkg gee-1.0 --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 -L../../src/libvaladoc/.libs -X -I../../src/libvaladoc ../helpers.vala"
+VALAFLAGS="--vapidir ../../src/libvaladoc --pkg valadoc-1.0 --pkg gee-1.0 --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 -L../../src/libvaladoc/.libs -X -I../../src/libvaladoc ../helpers.vala ../generic-api-test.vala"
 VAPIGEN=$topbuilddir/vapigen/vapigen
 VAPIGENFLAGS=
 



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