summaryrefslogtreecommitdiffstats
path: root/tools/gn/test_with_scope.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gn/test_with_scope.h')
-rw-r--r--tools/gn/test_with_scope.h44
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_