summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-05-10 17:54:18 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-05-10 17:54:18 +0200
commit443293aaf09eca7c3b88d621d056c4effee2c248 (patch)
treea35c7b2354295b5b73462c0806e04e2deef58171 /tests
parent4f9022f24c4591391637121c7274d9855b37bd93 (diff)
Implement option class inheritance
For now multiple, non-virtual inheritance is supported. An option class can now also be declared abstract using the class c = 0 {...}; syntax. New option, --exclude-base, controls whether base class information is present in usage and documentation.
Diffstat (limited to 'tests')
-rw-r--r--tests/inheritance/driver.cxx36
-rw-r--r--tests/inheritance/makefile76
-rw-r--r--tests/inheritance/test.cli26
-rw-r--r--tests/inheritance/test.std4
-rw-r--r--tests/lexer/driver.cxx3
-rw-r--r--tests/lexer/test-006.cli4
-rw-r--r--tests/lexer/test-006.std2
-rw-r--r--tests/makefile2
-rw-r--r--tests/parser/common.cli1
-rw-r--r--tests/parser/makefile2
-rw-r--r--tests/parser/test-001-base.cli (renamed from tests/parser/base.cli)0
-rw-r--r--tests/parser/test-001-common.cli1
-rw-r--r--tests/parser/test-001.cli4
-rw-r--r--tests/parser/test-003.cli20
-rw-r--r--tests/parser/test-007-base.cli11
-rw-r--r--tests/parser/test-007.cli29
-rw-r--r--tests/parser/test-007.std0
17 files changed, 211 insertions, 10 deletions
diff --git a/tests/inheritance/driver.cxx b/tests/inheritance/driver.cxx
new file mode 100644
index 0000000..1c4d32c
--- /dev/null
+++ b/tests/inheritance/driver.cxx
@@ -0,0 +1,36 @@
+// file : tests/inheritance/driver.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+// Test option class inheritance.
+//
+
+#include <string>
+#include <cassert>
+#include <iostream>
+
+#include "test.hxx"
+
+using namespace std;
+
+int
+main (int argc, char* argv[])
+{
+ const cli::options& d (options::description ());
+
+ assert (d.size () == 4);
+ assert (d[0].name () == "--very-long-flag");
+ assert (d[1].name () == "-i");
+ assert (d[2].name () == "-s");
+ assert (d[3].name () == "--string");
+
+ options o (argc, argv);
+
+ assert (o.very_long_flag ());
+ assert (o.s () == "short");
+ assert (o.i () == 123);
+ assert (o.string () == "long");
+
+ options::print_usage (cout);
+}
diff --git a/tests/inheritance/makefile b/tests/inheritance/makefile
new file mode 100644
index 0000000..3d99a99
--- /dev/null
+++ b/tests/inheritance/makefile
@@ -0,0 +1,76 @@
+# file : tests/inheritance/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+# license : MIT; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
+
+cxx_tun := driver.cxx
+cli_tun := test.cli
+
+#
+#
+cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o) $(cli_tun:.cli=.o))
+cxx_od := $(cxx_obj:.o=.o.d)
+
+driver := $(out_base)/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+# Build.
+#
+$(driver): $(cxx_obj)
+$(cxx_obj) $(cxx_od): cpp_options := -I$(out_base)
+
+genf := $(cli_tun:.cli=.hxx) $(cli_tun:.cli=.ixx) $(cli_tun:.cli=.cxx)
+gen := $(addprefix $(out_base)/,$(genf))
+
+$(gen): $(out_root)/cli/cli
+$(gen): cli := $(out_root)/cli/cli
+$(gen): cli_options := --generate-description --option-length 17
+
+$(call include-dep,$(cxx_od),$(cxx_obj),$(gen))
+
+# Alias for default target.
+#
+$(out_base)/: $(driver)
+
+# Test.
+#
+$(test): driver := $(driver)
+$(test): $(driver) $(src_base)/test.std
+ $(call message,test $$1,$$1 --very-long-flag -s short -i 123 \
+--string long >$(out_base)/test.out,$(driver))
+ $(call message,,diff -u $(src_base)/test.std $(out_base)/test.out)
+ $(call message,,rm -f $(out_base)/test.out)
+
+# Clean.
+#
+$(clean): \
+ $(driver).o.clean \
+ $(addsuffix .cxx.clean,$(cxx_obj)) \
+ $(addsuffix .cxx.clean,$(cxx_od)) \
+ $(addprefix $(out_base)/,$(cli_tun:.cli=.cxx.cli.clean))
+
+# Generated .gitignore.
+#
+ifeq ($(out_base),$(src_base))
+$(driver): | $(out_base)/.gitignore
+
+$(out_base)/.gitignore: files := driver $(genf)
+$(clean): $(out_base)/.gitignore.clean
+
+$(call include,$(bld_root)/git/gitignore.make)
+endif
+
+# How to.
+#
+$(call include,$(bld_root)/cxx/o-e.make)
+$(call include,$(bld_root)/cxx/cxx-o.make)
+$(call include,$(bld_root)/cxx/cxx-d.make)
+$(call include,$(scf_root)/cli/cli-cxx.make)
+
+# Dependencies.
+#
+$(call import,$(src_root)/cli/makefile)
+
diff --git a/tests/inheritance/test.cli b/tests/inheritance/test.cli
new file mode 100644
index 0000000..481a771
--- /dev/null
+++ b/tests/inheritance/test.cli
@@ -0,0 +1,26 @@
+// file : tests/inheritance/test.cli
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+include <string>;
+
+class base1 = 0
+{
+ bool --very-long-flag {"Long flag."};
+};
+
+class base2
+{
+ std::string -s {"<str>", "Short string."};
+};
+
+class interm: base1
+{
+ int -i = 1 {"<num>", "Integer."};
+};
+
+class options: interm, base2
+{
+ std::string --string {"<str>", "Long string."};
+};
diff --git a/tests/inheritance/test.std b/tests/inheritance/test.std
new file mode 100644
index 0000000..4c93225
--- /dev/null
+++ b/tests/inheritance/test.std
@@ -0,0 +1,4 @@
+--very-long-flag Long flag.
+-i <num> Integer.
+-s <str> Short string.
+--string <str> Long string.
diff --git a/tests/lexer/driver.cxx b/tests/lexer/driver.cxx
index 20dbf9d..9f5ac9e 100644
--- a/tests/lexer/driver.cxx
+++ b/tests/lexer/driver.cxx
@@ -28,7 +28,8 @@ const char* keywords[] =
"double"
};
-const char* punctuation[] = {";", ",", "::", "{", "}", /*"(", ")",*/ "=", "|"};
+const char* punctuation[] = {
+ ";", ",", ":", "::", "{", "}", /*"(", ")",*/ "=", "|"};
int
main (int argc, char* argv[])
diff --git a/tests/lexer/test-006.cli b/tests/lexer/test-006.cli
index 706f0f2..d67cea7 100644
--- a/tests/lexer/test-006.cli
+++ b/tests/lexer/test-006.cli
@@ -11,4 +11,6 @@ baz */ "b";
- /* a
a
a*/ 5
-// eos \ No newline at end of file
+// eos
+:
+::
diff --git a/tests/lexer/test-006.std b/tests/lexer/test-006.std
index 65f47cc..82709e0 100644
--- a/tests/lexer/test-006.std
+++ b/tests/lexer/test-006.std
@@ -4,4 +4,6 @@
-5
;
-5
+:
+::
<EOS>
diff --git a/tests/makefile b/tests/makefile
index 432b0a3..9ac2655 100644
--- a/tests/makefile
+++ b/tests/makefile
@@ -5,7 +5,7 @@
include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make
-tests := ctor erase file lexer parser specifier
+tests := ctor erase file inheritance lexer parser specifier
default := $(out_base)/
test := $(out_base)/.test
diff --git a/tests/parser/common.cli b/tests/parser/common.cli
deleted file mode 100644
index c0c7262..0000000
--- a/tests/parser/common.cli
+++ /dev/null
@@ -1 +0,0 @@
-include "base.cli";
diff --git a/tests/parser/makefile b/tests/parser/makefile
index eaceabd..490fbf3 100644
--- a/tests/parser/makefile
+++ b/tests/parser/makefile
@@ -7,7 +7,7 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
cxx_tun := driver.cxx
-tests := 000 001 002 003 004 005 006
+tests := 000 001 002 003 004 005 006 007
#
#
diff --git a/tests/parser/base.cli b/tests/parser/test-001-base.cli
index e69de29..e69de29 100644
--- a/tests/parser/base.cli
+++ b/tests/parser/test-001-base.cli
diff --git a/tests/parser/test-001-common.cli b/tests/parser/test-001-common.cli
new file mode 100644
index 0000000..73fb928
--- /dev/null
+++ b/tests/parser/test-001-common.cli
@@ -0,0 +1 @@
+include "test-001-base.cli";
diff --git a/tests/parser/test-001.cli b/tests/parser/test-001.cli
index 473a238..52f7f8e 100644
--- a/tests/parser/test-001.cli
+++ b/tests/parser/test-001.cli
@@ -2,5 +2,5 @@
//
include <string>;
include "types.hxx";
-include "common.cli";
-include "../parser/base.cli";
+include "test-001-common.cli";
+include "../parser/test-001-base.cli";
diff --git a/tests/parser/test-003.cli b/tests/parser/test-003.cli
index bfd8c72..2920b16 100644
--- a/tests/parser/test-003.cli
+++ b/tests/parser/test-003.cli
@@ -1,9 +1,23 @@
-// class-def
+// class-def, inheritance-spec, abstract-spec
//
class c1
{
};
-class c2
+class c2 = 0
{
-}; \ No newline at end of file
+};
+
+class c3: c1, ::c2
+{
+};
+
+namespace n1
+{
+ class c {};
+}
+
+class c4: n1::c = 0
+{
+};
+
diff --git a/tests/parser/test-007-base.cli b/tests/parser/test-007-base.cli
new file mode 100644
index 0000000..7c02a39
--- /dev/null
+++ b/tests/parser/test-007-base.cli
@@ -0,0 +1,11 @@
+class b1 {};
+
+namespace n1
+{
+ class b2 {};
+
+ namespace i1
+ {
+ class b3 {};
+ }
+}
diff --git a/tests/parser/test-007.cli b/tests/parser/test-007.cli
new file mode 100644
index 0000000..3e5ca7f
--- /dev/null
+++ b/tests/parser/test-007.cli
@@ -0,0 +1,29 @@
+// base class lookup
+//
+
+include "test-007-base.cli";
+
+class c1 {};
+class c2: c1 {};
+class c3: ::c1 {};
+
+namespace n1
+{
+ class c4 {};
+ class c5: c4 {};
+ class c6: n1::c4 {};
+ class c7: ::n1::c4 {};
+
+ class c8: b2 {}; // From included.
+ class c9: i1::b3 {}; // From included.
+
+ namespace i1
+ {
+ class c10: c4 {}; // Outer scope.
+ class c11: b3 {}; // From included.
+ class c12: b2 {}; // Outer scope from included.
+ }
+}
+
+class c13: n1::c4 {};
+class c14: ::n1::c4 {};
diff --git a/tests/parser/test-007.std b/tests/parser/test-007.std
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/parser/test-007.std