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