diff options
Diffstat (limited to 'tools/gn/test_with_scope.h')
-rw-r--r-- | tools/gn/test_with_scope.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/gn/test_with_scope.h b/tools/gn/test_with_scope.h index df2c93e..ce7d95c 100644 --- a/tools/gn/test_with_scope.h +++ b/tools/gn/test_with_scope.h @@ -5,11 +5,18 @@ #ifndef TOOLS_GN_TEST_WITH_SCOPE_H_ #define TOOLS_GN_TEST_WITH_SCOPE_H_ +#include <vector> + #include "base/basictypes.h" #include "tools/gn/build_settings.h" +#include "tools/gn/err.h" +#include "tools/gn/input_file.h" +#include "tools/gn/parse_tree.h" #include "tools/gn/scope.h" #include "tools/gn/settings.h" +#include "tools/gn/token.h" #include "tools/gn/toolchain.h" +#include "tools/gn/value.h" // A helper class for setting up a Scope that a test can use. It makes a // toolchain and sets up all the build state. @@ -23,13 +30,50 @@ class TestWithScope { Toolchain* toolchain() { return &toolchain_; } Scope* scope() { return &scope_; } + // This buffer accumulates output from any print() commands executed in the + // context of this test. Note that the implementation of this is not + // threadsafe so don't write tests that call print from multiple threads. + std::string& print_output() { return print_output_; } + private: + void AppendPrintOutput(const std::string& str); + BuildSettings build_settings_; Settings settings_; Toolchain toolchain_; Scope scope_; + std::string print_output_; + DISALLOW_COPY_AND_ASSIGN(TestWithScope); }; +// Helper class to treat some string input as a file. +// +// Instantiate it with the contents you want, be sure to check for error, and +// then you can execute the ParseNode or whatever. +class TestParseInput { + public: + TestParseInput(const std::string& input); + ~TestParseInput(); + + // Indicates whether and what error occurred during tokenizing and parsing. + bool has_error() const { return parse_err_.has_error(); } + const Err& parse_err() const { return parse_err_; } + + const InputFile& input_file() const { return input_file_; } + const std::vector<Token>& tokens() const { return tokens_; } + const ParseNode* parsed() const { return parsed_.get(); } + + private: + InputFile input_file_; + + std::vector<Token> tokens_; + scoped_ptr<ParseNode> parsed_; + + Err parse_err_; + + DISALLOW_COPY_AND_ASSIGN(TestParseInput); +}; + #endif // TOOLS_GN_TEST_WITH_SCOPE_H_ |