aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Test.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/tests/Test.h b/tests/Test.h
index ea10cdf7e3..8b60039da0 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -44,10 +44,47 @@ public:
virtual bool allowExtendedTest() const;
virtual bool verbose() const;
virtual void* stats() const { return nullptr; }
+
+ void reportFailedWithContext(const skiatest::Failure& f) {
+ SkString fullMessage = f.message;
+ if (!fContextStack.empty()) {
+ fullMessage.append(" [");
+ for (int i = 0; i < fContextStack.count(); ++i) {
+ if (i > 0) {
+ fullMessage.append(", ");
+ }
+ fullMessage.append(fContextStack[i]);
+ }
+ fullMessage.append("]");
+ }
+ this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage));
+ }
+ void push(const SkString& message) {
+ fContextStack.push_back(message);
+ }
+ void pop() {
+ fContextStack.pop_back();
+ }
+
+private:
+ SkTArray<SkString> fContextStack;
};
#define REPORT_FAILURE(reporter, cond, message) \
- reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message))
+ reporter->reportFailedWithContext(skiatest::Failure(__FILE__, __LINE__, cond, message))
+
+class ReporterContext : SkNoncopyable {
+public:
+ ReporterContext(Reporter* reporter, const SkString& message) : fReporter(reporter) {
+ fReporter->push(message);
+ }
+ ~ReporterContext() {
+ fReporter->pop();
+ }
+
+private:
+ Reporter* fReporter;
+};
typedef void (*TestProc)(skiatest::Reporter*, sk_gpu_test::GrContextFactory*);