aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/Test.h
diff options
context:
space:
mode:
authorGravatar halcanary <halcanary@google.com>2015-01-20 09:30:20 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-01-20 09:30:20 -0800
commit87f3ba4847aa575016eb3a21e944197d757df8c0 (patch)
treef9cfcb622627ed9d5a3d625990a3023a81c396a5 /tests/Test.h
parent873ad0e0b4d67bdc7bad025018f597450e7004c6 (diff)
Simplify skiatest framework.
skiatest::Test class is now a simple struct. Some functionalty, such as counting errors or timing is now handled elsewhere. skiatest:Reporter is now a simpler abstract class. The two implementations handle test errors. DM and pathops_unittest updated. Review URL: https://codereview.chromium.org/830513004
Diffstat (limited to 'tests/Test.h')
-rw-r--r--tests/Test.h233
1 files changed, 65 insertions, 168 deletions
diff --git a/tests/Test.h b/tests/Test.h
index 4f838f501c..ed5de0f860 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -8,122 +8,48 @@
#ifndef skiatest_Test_DEFINED
#define skiatest_Test_DEFINED
-#include "SkRefCnt.h"
#include "SkString.h"
#include "SkTRegistry.h"
-#include "SkThread.h"
#include "SkTypes.h"
class GrContextFactory;
namespace skiatest {
- class Test;
-
- /**
- * Information about a single failure from a Test.
- *
- * Not intended to be created/modified directly. To create one, use one of
- *
- * REPORTER_ASSERT
- * REPORTER_ASSERT_MESSAGE
- * ERRORF
- *
- * described in more detail further down in this file.
- */
- struct Failure {
- const char* fileName;
- int lineNo;
- const char* condition;
- SkString message;
-
- // Helper to combine the failure info into one string.
- void getFailureString(SkString* result) const {
- if (!result) {
- return;
- }
- result->printf("%s:%d\t", fileName, lineNo);
- if (!message.isEmpty()) {
- result->append(message);
- if (strlen(condition) > 0) {
- result->append(": ");
- }
- }
- result->append(condition);
- }
- };
-
-
- class Reporter : public SkRefCnt {
- public:
- SK_DECLARE_INST_COUNT(Reporter)
- Reporter();
-
- int countTests() const { return fTestCount; }
-
- void startTest(Test*);
- void reportFailed(const Failure&);
- void endTest(Test*);
-
- virtual bool allowExtendedTest() const { return false; }
- virtual bool verbose() const { return false; }
- virtual void bumpTestCount() { sk_atomic_inc(&fTestCount); }
-
- protected:
- virtual void onStart(Test*) {}
- virtual void onReportFailed(const Failure&) {}
- virtual void onEnd(Test*) {}
-
- private:
- int32_t fTestCount;
-
- typedef SkRefCnt INHERITED;
- };
-
- class Test {
- public:
- Test();
- virtual ~Test();
-
- Reporter* getReporter() const { return fReporter; }
- void setReporter(Reporter*);
-
- const char* getName();
- void run();
- bool passed() const { return fPassed; }
- SkMSec elapsedMs() const { return fElapsed; }
-
- static SkString GetTmpDir();
-
- virtual bool isGPUTest() const { return false; }
- virtual void setGrContextFactory(GrContextFactory* factory) {}
-
- protected:
- virtual void onGetName(SkString*) = 0;
- virtual void onRun(Reporter*) = 0;
-
- private:
- Reporter* fReporter;
- SkString fName;
- bool fPassed;
- SkMSec fElapsed;
- };
-
- class GpuTest : public Test{
- public:
- GpuTest() : Test(), fGrContextFactory(NULL) {}
-
- virtual bool isGPUTest() const { return true; }
- virtual void setGrContextFactory(GrContextFactory* factory) {
- fGrContextFactory = factory;
- }
-
- protected:
- GrContextFactory* fGrContextFactory; // Unowned.
- };
-
- typedef SkTRegistry<Test*(*)(void*)> TestRegistry;
-} // namespace skiatest
+SkString GetTmpDir();
+
+struct Failure {
+ Failure(const char* f, int l, const char* c, const SkString& m)
+ : fileName(f), lineNo(l), condition(c), message(m) {}
+ const char* fileName;
+ int lineNo;
+ const char* condition;
+ SkString message;
+ SkString toString() const;
+};
+
+class Reporter : SkNoncopyable {
+public:
+ virtual ~Reporter() {}
+ virtual void bumpTestCount();
+ virtual void reportFailed(const skiatest::Failure&) = 0;
+ virtual bool allowExtendedTest() const;
+ virtual bool verbose() const;
+};
+
+#define REPORT_FAILURE(reporter, cond, message) \
+ reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message))
+
+typedef void (*TestProc)(skiatest::Reporter*, GrContextFactory*);
+
+struct Test {
+ Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {}
+ const char* name;
+ bool needsGpu;
+ TestProc proc;
+};
+
+typedef SkTRegistry<Test> TestRegistry;
/*
Use the following macros to make use of the skiatest classes, e.g.
@@ -143,66 +69,37 @@ namespace skiatest {
...
}
*/
+} // namespace skiatest
-#define REPORTER_ASSERT(r, cond) \
- do { \
- if (!(cond)) { \
- skiatest::Failure failure = { __FILE__, __LINE__, \
- #cond, SkString() }; \
- r->reportFailed(failure); \
- } \
- } while(0)
-
-#define REPORTER_ASSERT_MESSAGE(r, cond, message) \
- do { \
- if (!(cond)) { \
- skiatest::Failure failure = { __FILE__, __LINE__, \
- #cond, SkString(message) }; \
- r->reportFailed(failure); \
- } \
- } while(0)
-
-#define ERRORF(r, ...) \
- do { \
- SkString desc; \
- desc.appendf(__VA_ARGS__) ; \
- skiatest::Failure failure = { __FILE__, __LINE__, \
- "", SkString(desc) }; \
- r->reportFailed(failure); \
- } while(0)
-
-#define DEF_TEST(name, reporter) \
- static void test_##name(skiatest::Reporter*); \
- namespace skiatest { \
- class name##Class : public Test { \
- public: \
- static Test* Factory(void*) { return SkNEW(name##Class); } \
- protected: \
- void onGetName(SkString* name) SK_OVERRIDE { \
- name->set(#name); \
- } \
- void onRun(Reporter* r) SK_OVERRIDE { test_##name(r); } \
- }; \
- static TestRegistry gReg_##name##Class(name##Class::Factory); \
- } \
- static void test_##name(skiatest::Reporter* reporter)
-
-#define DEF_GPUTEST(name, reporter, factory) \
- static void test_##name(skiatest::Reporter*, GrContextFactory*); \
- namespace skiatest { \
- class name##Class : public GpuTest { \
- public: \
- static Test* Factory(void*) { return SkNEW(name##Class); } \
- protected: \
- void onGetName(SkString* name) SK_OVERRIDE { \
- name->set(#name); \
- } \
- void onRun(Reporter* r) SK_OVERRIDE { \
- test_##name(r, fGrContextFactory); \
- } \
- }; \
- static TestRegistry gReg_##name##Class(name##Class::Factory); \
- } \
- static void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory)
+#define REPORTER_ASSERT(r, cond) \
+ do { \
+ if (!(cond)) { \
+ REPORT_FAILURE(r, #cond, SkString()); \
+ } \
+ } while (0)
+
+#define REPORTER_ASSERT_MESSAGE(r, cond, message) \
+ do { \
+ if (!(cond)) { \
+ REPORT_FAILURE(r, #cond, SkString(message)); \
+ } \
+ } while (0)
+
+#define ERRORF(r, ...) \
+ do { \
+ REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \
+ } while (0)
+
+#define DEF_TEST(name, reporter) \
+ static void test_##name(skiatest::Reporter*, GrContextFactory*); \
+ skiatest::TestRegistry name##TestRegistry( \
+ skiatest::Test(#name, false, test_##name)); \
+ void test_##name(skiatest::Reporter* reporter, GrContextFactory*)
+
+#define DEF_GPUTEST(name, reporter, factory) \
+ static void test_##name(skiatest::Reporter*, GrContextFactory*); \
+ skiatest::TestRegistry name##TestRegistry( \
+ skiatest::Test(#name, true, test_##name)); \
+ void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory)
#endif