diff options
Diffstat (limited to 'unit-tests/test')
-rw-r--r-- | unit-tests/test/script/buildfile | 7 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/buildfile | 12 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/driver.cxx | 70 | ||||
-rw-r--r-- | unit-tests/test/script/lexer/script-line.test | 2 |
4 files changed, 91 insertions, 0 deletions
diff --git a/unit-tests/test/script/buildfile b/unit-tests/test/script/buildfile new file mode 100644 index 0000000..b84e5ce --- /dev/null +++ b/unit-tests/test/script/buildfile @@ -0,0 +1,7 @@ +# file : unit-tests/test/script/buildfile +# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +d = lexer/ +./: $d +include $d diff --git a/unit-tests/test/script/lexer/buildfile b/unit-tests/test/script/lexer/buildfile new file mode 100644 index 0000000..f67f9b3 --- /dev/null +++ b/unit-tests/test/script/lexer/buildfile @@ -0,0 +1,12 @@ +# file : unit-tests/test/script/buildfile +# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +#@@ Temporary until we get utility library support. +# +import libs = libbutl%lib{butl} +src = token lexer diagnostics utility variable name test/script/{token lexer} + +exe{driver}: cxx{driver} ../../../../build2/cxx{$src} $libs test{script-line} + +include ../../../../build2/ 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); +} diff --git a/unit-tests/test/script/lexer/script-line.test b/unit-tests/test/script/lexer/script-line.test new file mode 100644 index 0000000..3bd1f0e --- /dev/null +++ b/unit-tests/test/script/lexer/script-line.test @@ -0,0 +1,2 @@ +foo +bar |