diff options
-rw-r--r-- | build2/buildfile | 1 | ||||
-rw-r--r-- | build2/test/script/parser | 10 | ||||
-rw-r--r-- | build2/test/script/parser.cxx | 26 | ||||
-rw-r--r-- | build2/test/script/runner | 36 | ||||
-rw-r--r-- | build2/test/script/runner.cxx | 22 |
5 files changed, 85 insertions, 10 deletions
diff --git a/build2/buildfile b/build2/buildfile index 6e71856..28d9b38 100644 --- a/build2/buildfile +++ b/build2/buildfile @@ -77,6 +77,7 @@ exe{b}: \ test/{hxx cxx}{ rule } \ test/script/{hxx cxx}{ lexer } \ test/script/{hxx cxx}{ parser } \ +test/script/{hxx cxx}{ runner } \ test/script/{hxx cxx}{ script } \ $libs diff --git a/build2/test/script/parser b/build2/test/script/parser index 0ba4710..55dc003 100644 --- a/build2/test/script/parser +++ b/build2/test/script/parser @@ -21,14 +21,19 @@ namespace build2 namespace script { class lexer; + class runner; class parser: protected build2::parser { public: // Issue diagnostics and throw failed in case of an error. // - script - parse (istream&, const path& name, target& test, target& script); + void + parse (istream&, + const path& name, + target& test, + target& script, + runner&); // Recursive descent parser. // @@ -60,6 +65,7 @@ namespace build2 lexer* lexer_; script* script_; + runner* runner_; }; } } diff --git a/build2/test/script/parser.cxx b/build2/test/script/parser.cxx index ce867b3..b99ab09 100644 --- a/build2/test/script/parser.cxx +++ b/build2/test/script/parser.cxx @@ -5,6 +5,7 @@ #include <build2/test/script/parser> #include <build2/test/script/lexer> +#include <build2/test/script/runner> using namespace std; @@ -16,8 +17,12 @@ namespace build2 { using type = token_type; - script parser:: - parse (istream& is, const path& p, target& test_t, target& script_t) + void parser:: + parse (istream& is, + const path& p, + target& test_t, + target& script_t, + runner& r) { path_ = &p; @@ -25,8 +30,10 @@ namespace build2 lexer_ = &l; base_parser::lexer_ = &l; - script r (test_t, script_t); - script_ = &r; + script s (test_t, script_t); + script_ = &s; + + runner_ = &r; token t (type::eos, false, 0, 0); type tt; @@ -36,8 +43,6 @@ namespace build2 if (tt != type::eos) fail (t) << "unexpected " << t; - - return r; } void parser:: @@ -498,8 +503,7 @@ namespace build2 expire_mode (); // Done parsing test-line. // Parse here-document fragments in the order they were mentioned on - // the command line. The end marker is temporarily stored as the - // redirect's value. + // the command line. // if (!hd.empty ()) { @@ -509,11 +513,17 @@ namespace build2 mode (lexer_mode::here_line); next (t, tt); + // The end marker is temporarily stored as the redirect's value. + // for (redirect& r: hd) r.value = parse_here_document (t, tt, r.value); expire_mode (); } + + // Now that we have all the pieces, run the test. + // + runner_->run (ts); } command_exit parser:: diff --git a/build2/test/script/runner b/build2/test/script/runner new file mode 100644 index 0000000..74913c8 --- /dev/null +++ b/build2/test/script/runner @@ -0,0 +1,36 @@ +// file : build2/test/script/runner -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BUILD2_TEST_SCRIPT_RUNNER +#define BUILD2_TEST_SCRIPT_RUNNER + +#include <build2/types> +#include <build2/utility> + +#include <build2/test/script/script> + +namespace build2 +{ + namespace test + { + namespace script + { + class runner + { + public: + virtual void + run (const test&) = 0; + }; + + class concurrent_runner: public runner + { + public: + virtual void + run (const test&) override; + }; + } + } +} + +#endif // BUILD2_TEST_SCRIPT_RUNNER diff --git a/build2/test/script/runner.cxx b/build2/test/script/runner.cxx new file mode 100644 index 0000000..3789281 --- /dev/null +++ b/build2/test/script/runner.cxx @@ -0,0 +1,22 @@ +// file : build2/test/script/runner.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include <build2/test/script/runner> + +using namespace std; + +namespace build2 +{ + namespace test + { + namespace script + { + void concurrent_runner:: + run (const test&) + { + assert (false); // @@ TODO + } + } + } +} |