summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2009-08-09 15:21:16 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2009-08-09 15:21:16 +0200
commit2cffde53441986ca86c035debe9d6ee9d270dfb1 (patch)
tree89bc170795e4789afe734a131d66e4c9051f4d8a /tests
parentd311e253ca3dcabb9e52d273110dea8b950571f7 (diff)
Tests for the lexer
Diffstat (limited to 'tests')
-rwxr-xr-xtests/lexer/driverbin0 -> 55498 bytes
-rw-r--r--tests/lexer/driver.cxx105
-rw-r--r--tests/lexer/makefile83
-rw-r--r--tests/lexer/test-000.cli11
-rw-r--r--tests/lexer/test-000.std12
-rw-r--r--tests/lexer/test-001.cli6
-rw-r--r--tests/lexer/test-001.std6
-rw-r--r--tests/lexer/test-002.cli7
-rw-r--r--tests/lexer/test-002.std8
-rw-r--r--tests/lexer/test-003.cli9
-rw-r--r--tests/lexer/test-003.std19
-rw-r--r--tests/lexer/test-004.cli2
-rw-r--r--tests/lexer/test-004.std7
-rw-r--r--tests/makefile20
14 files changed, 295 insertions, 0 deletions
diff --git a/tests/lexer/driver b/tests/lexer/driver
new file mode 100755
index 0000000..ca17aab
--- /dev/null
+++ b/tests/lexer/driver
Binary files differ
diff --git a/tests/lexer/driver.cxx b/tests/lexer/driver.cxx
new file mode 100644
index 0000000..62c236f
--- /dev/null
+++ b/tests/lexer/driver.cxx
@@ -0,0 +1,105 @@
+// file : tests/lexer/driver.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+#include <fstream>
+#include <iostream>
+
+#include <cli/token.hxx>
+#include <cli/lexer.hxx>
+
+using namespace std;
+
+const char* keywords[] =
+{
+ "include",
+ "namespace",
+ "class",
+ "signed",
+ "unsigned",
+ "bool",
+ "char",
+ "wchar_t",
+ "short",
+ "int",
+ "long",
+ "float",
+ "double"
+};
+
+const char punctuation[] = {';', ',', ':', '{', '}', '(', ')', '=', '|'};
+
+int main (int argc, char* argv[])
+{
+ if (argc != 2)
+ {
+ cerr << "usage: " << argv[0] << " file.cli" << endl;
+ return 1;
+ }
+
+ ifstream ifs;
+ ifs.exceptions (ifstream::failbit | ifstream::badbit);
+ ifs.open (argv[1]);
+
+ Lexer l (ifs, argv[1]);
+
+ while (true)
+ {
+ Token t (l.next ());
+
+ switch (t.type ())
+ {
+ case Token::t_eos:
+ {
+ cout << "<EOS>" << endl;
+ return 0;
+ }
+ case Token::t_keyword:
+ {
+ cout << "keyword: " << keywords[t.keyword ()] << endl;
+ break;
+ }
+ case Token::t_identifier:
+ {
+ cout << "identifier: " << t.identifier () << endl;
+ break;
+ }
+ case Token::t_punctuation:
+ {
+ cout << punctuation[t.punctuation ()] << endl;
+ break;
+ }
+ case Token::t_path_lit:
+ {
+ cout << "path: " << t.literal () << endl;
+ break;
+ }
+ case Token::t_string_lit:
+ {
+ cout << t.literal () << endl;
+ break;
+ }
+ case Token::t_char_lit:
+ {
+ cout << t.literal () << endl;
+ break;
+ }
+ case Token::t_bool_lit:
+ {
+ cout << t.literal () << endl;
+ break;
+ }
+ case Token::t_int_lit:
+ {
+ cout << t.literal () << endl;
+ break;
+ }
+ case Token::t_float_lit:
+ {
+ cout << t.literal () << endl;
+ break;
+ }
+ }
+ }
+}
diff --git a/tests/lexer/makefile b/tests/lexer/makefile
new file mode 100644
index 0000000..88145b8
--- /dev/null
+++ b/tests/lexer/makefile
@@ -0,0 +1,83 @@
+# file : tests/lexer/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009 Code Synthesis Tools CC
+# license : MIT; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
+
+cxx_tun := driver.cxx
+
+tests := 000 001 002 003 004
+
+#
+#
+cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o))
+cxx_od := $(cxx_obj:.o=.o.d)
+
+driver := $(out_base)/driver
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+
+# Build.
+#
+$(driver): $(cxx_obj) $(out_root)/cli/lexer.o
+
+$(cxx_obj) $(cxx_od): cpp_options := -I$(src_base) -I$(src_root)
+
+$(call include-dep,$(cxx_od))
+
+
+# Alias for default target.
+#
+.PHONY: $(out_base)/
+$(out_base)/: $(driver)
+
+
+# Test.
+#
+test_targets := $(addprefix $(out_base)/.test-,$(tests))
+
+.PHONY: $(test)
+$(test): $(test_targets)
+
+
+$(test_targets): driver := $(driver)
+
+.PHONY: $(out_base)/.test-%
+$(out_base)/.test-%: $(driver) $(src_base)/test-%.cli $(src_base)/test-%.std
+ $(call message,test $(out_base)/$*,$(driver) $(src_base)/test-$*.cli | diff -u $(src_base)/test-$*.std -)
+
+
+# Clean.
+#
+.PHONY: $(clean)
+
+$(clean): \
+ $(driver).o.clean \
+ $(addsuffix .cxx.clean,$(cxx_obj)) \
+ $(addsuffix .cxx.clean,$(cxx_od))
+
+
+# Generated .gitignore.
+#
+ifeq ($(out_base),$(src_base))
+$(cli): | $(out_base)/.gitignore
+
+$(out_base)/.gitignore: files := driver
+$(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,$(bld_root)/install.make)
+
+# Dependencies.
+#
+$(call import,$(src_root)/cli/makefile)
diff --git a/tests/lexer/test-000.cli b/tests/lexer/test-000.cli
new file mode 100644
index 0000000..68cf59f
--- /dev/null
+++ b/tests/lexer/test-000.cli
@@ -0,0 +1,11 @@
+help
+help-me
+-h
+--help
+--help-me
+--help-me-
+/h
+/help-me
+/help/me
+--_
+
diff --git a/tests/lexer/test-000.std b/tests/lexer/test-000.std
new file mode 100644
index 0000000..9a44438
--- /dev/null
+++ b/tests/lexer/test-000.std
@@ -0,0 +1,12 @@
+identifier: help
+identifier: help-me
+identifier: -h
+identifier: --help
+identifier: --help-me
+identifier: --help-me-
+identifier: /h
+identifier: /help-me
+identifier: /help
+identifier: /me
+identifier: --_
+<EOS>
diff --git a/tests/lexer/test-001.cli b/tests/lexer/test-001.cli
new file mode 100644
index 0000000..6c2f917
--- /dev/null
+++ b/tests/lexer/test-001.cli
@@ -0,0 +1,6 @@
+5
+123456
+-12345
+- 1
+-
+123
diff --git a/tests/lexer/test-001.std b/tests/lexer/test-001.std
new file mode 100644
index 0000000..9732d65
--- /dev/null
+++ b/tests/lexer/test-001.std
@@ -0,0 +1,6 @@
+5
+123456
+-12345
+-1
+-123
+<EOS>
diff --git a/tests/lexer/test-002.cli b/tests/lexer/test-002.cli
new file mode 100644
index 0000000..fcd6b16
--- /dev/null
+++ b/tests/lexer/test-002.cli
@@ -0,0 +1,7 @@
+'a'
+'\n'
+'\\'
+'\0'
+'\''
+'\xaf'
+'\111'
diff --git a/tests/lexer/test-002.std b/tests/lexer/test-002.std
new file mode 100644
index 0000000..01daa18
--- /dev/null
+++ b/tests/lexer/test-002.std
@@ -0,0 +1,8 @@
+'a'
+'\n'
+'\\'
+'\0'
+'\''
+'\xaf'
+'\111'
+<EOS>
diff --git a/tests/lexer/test-003.cli b/tests/lexer/test-003.cli
new file mode 100644
index 0000000..77ea0ce
--- /dev/null
+++ b/tests/lexer/test-003.cli
@@ -0,0 +1,9 @@
+"abc";
+"a\nb";
+"abc\\";
+"aaa\0";
+"\"";
+"a\xaf";
+"a\111";
+"abc""def";
+"abc" "def";
diff --git a/tests/lexer/test-003.std b/tests/lexer/test-003.std
new file mode 100644
index 0000000..4282dc0
--- /dev/null
+++ b/tests/lexer/test-003.std
@@ -0,0 +1,19 @@
+"abc"
+;
+"a\nb"
+;
+"abc\\"
+;
+"aaa\0"
+;
+"\""
+;
+"a\xaf"
+;
+"a\111"
+;
+"abc" "def"
+;
+"abc" "def"
+;
+<EOS>
diff --git a/tests/lexer/test-004.cli b/tests/lexer/test-004.cli
new file mode 100644
index 0000000..bb6ccea
--- /dev/null
+++ b/tests/lexer/test-004.cli
@@ -0,0 +1,2 @@
+include "foo/abc.hxx";
+include <vector>;
diff --git a/tests/lexer/test-004.std b/tests/lexer/test-004.std
new file mode 100644
index 0000000..e031891
--- /dev/null
+++ b/tests/lexer/test-004.std
@@ -0,0 +1,7 @@
+keyword: include
+path: "foo/abc.hxx"
+;
+keyword: include
+path: <vector>
+;
+<EOS>
diff --git a/tests/makefile b/tests/makefile
new file mode 100644
index 0000000..fa8b833
--- /dev/null
+++ b/tests/makefile
@@ -0,0 +1,20 @@
+# file : tests/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009 Code Synthesis Tools CC
+# license : MIT; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make
+
+tests := lexer
+
+default := $(out_base)/
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+.PHONY: $(default) $(test) $(clean)
+
+$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests)))
+$(test): $(addprefix $(out_base)/,$(addsuffix /.test,$(tests)))
+$(clean): $(addprefix $(out_base)/,$(addsuffix /.clean,$(tests)))
+
+$(foreach t,$(tests),$(call import,$(src_base)/$t/makefile))