aboutsummaryrefslogtreecommitdiff
path: root/unit-tests/test/script/lexer/driver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'unit-tests/test/script/lexer/driver.cxx')
-rw-r--r--unit-tests/test/script/lexer/driver.cxx70
1 files changed, 70 insertions, 0 deletions
diff --git a/unit-tests/test/script/lexer/driver.cxx b/unit-tests/test/script/lexer/driver.cxx
new file mode 100644
index 0000000..6e5167d
--- /dev/null
+++ b/unit-tests/test/script/lexer/driver.cxx
@@ -0,0 +1,70 @@
+// file : unit-tests/test/script/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <cassert>
+#include <iostream>
+
+#include <build2/types>
+#include <build2/utility>
+
+#include <build2/test/script/token>
+#include <build2/test/script/lexer>
+
+using namespace std;
+
+namespace build2
+{
+ namespace test
+ {
+ namespace script
+ {
+ int
+ main (int argc, char* argv[])
+ {
+ // Usage: argv[0] <lexer-mode>
+ //
+ lexer_mode m;
+ {
+ assert (argc == 2);
+ string s (argv[1]);
+
+ if (s == "script") m = lexer_mode::script_line;
+ else if (s == "variable") m = lexer_mode::variable_line;
+ else if (s == "test") m = lexer_mode::test_line;
+ else if (s == "command") m = lexer_mode::command_line;
+ else if (s == "here") m = lexer_mode::here_line;
+ else assert (false);
+ }
+
+ try
+ {
+ cin.exceptions (istream::failbit | istream::badbit);
+ lexer l (cin, path ("stdin"), m);
+
+ // No use printing eos since we will either get it or loop forever.
+ //
+ for (token t (l.next ()); t.type != token_type::eos; t = l.next ())
+ {
+ // Print each token on a separate line without quoting operators.
+ //
+ t.printer (cout, t, false);
+ cout << endl;
+ }
+ }
+ catch (const failed&)
+ {
+ return 1;
+ }
+
+ return 0;
+ }
+ }
+ }
+}
+
+int
+main (int argc, char* argv[])
+{
+ return build2::test::script::main (argc, argv);
+}