blob: 1aa038748f247598e4d61f44eb3d5916c7caf33f [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
reed@android.comed673312009-02-27 16:24:51 +00008#ifndef skiatest_Test_DEFINED
9#define skiatest_Test_DEFINED
10
11#include "SkRefCnt.h"
12#include "SkString.h"
13#include "SkTRegistry.h"
caryclark@google.comdb60de72013-04-11 12:33:23 +000014#include "SkThread.h"
reed@android.comed673312009-02-27 16:24:51 +000015
bsalomon@google.com67b915d2013-02-04 16:13:32 +000016class GrContextFactory;
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000017
reed@android.comed673312009-02-27 16:24:51 +000018namespace skiatest {
reed@android.com80e39a72009-04-02 16:59:40 +000019
reed@android.comed673312009-02-27 16:24:51 +000020 class Test;
21
22 class Reporter : public SkRefCnt {
23 public:
robertphillips@google.coma22e2112012-08-16 14:58:06 +000024 SK_DECLARE_INST_COUNT(Reporter)
reed@android.comed673312009-02-27 16:24:51 +000025 Reporter();
26
27 enum Result {
28 kPassed, // must begin with 0
29 kFailed,
30 /////
31 kLastResult = kFailed
32 };
reed@android.com80e39a72009-04-02 16:59:40 +000033
caryclark@google.comdb60de72013-04-11 12:33:23 +000034 void bumpTestCount() { sk_atomic_inc(&fTestCount); }
reed@android.comed673312009-02-27 16:24:51 +000035 int countTests() const { return fTestCount; }
reed@android.comed673312009-02-27 16:24:51 +000036
37 void startTest(Test*);
38 void report(const char testDesc[], Result);
39 void endTest(Test*);
caryclark@google.comd54e1e92013-04-10 15:57:31 +000040 virtual bool allowExtendedTest() const { return false; }
caryclark@google.com16cfe402013-04-18 18:47:37 +000041 virtual bool allowThreaded() const { return false; }
reed@android.comed673312009-02-27 16:24:51 +000042 // helpers for tests
reed@android.comed673312009-02-27 16:24:51 +000043 void reportFailed(const char desc[]) {
44 this->report(desc, kFailed);
45 }
46 void reportFailed(const SkString& desc) {
47 this->report(desc.c_str(), kFailed);
48 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000049
rmistry@google.comd6176b02012-08-23 18:14:13 +000050
reed@android.comed673312009-02-27 16:24:51 +000051 protected:
52 virtual void onStart(Test*) {}
53 virtual void onReport(const char desc[], Result) {}
54 virtual void onEnd(Test*) {}
reed@android.com80e39a72009-04-02 16:59:40 +000055
reed@android.comed673312009-02-27 16:24:51 +000056 private:
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000057 int32_t fTestCount;
reed@android.com80e39a72009-04-02 16:59:40 +000058
reed@android.comed673312009-02-27 16:24:51 +000059 typedef SkRefCnt INHERITED;
60 };
reed@android.com80e39a72009-04-02 16:59:40 +000061
reed@android.comed673312009-02-27 16:24:51 +000062 class Test {
reed@android.com80e39a72009-04-02 16:59:40 +000063 public:
reed@android.comed673312009-02-27 16:24:51 +000064 Test();
65 virtual ~Test();
66
67 Reporter* getReporter() const { return fReporter; }
68 void setReporter(Reporter*);
reed@android.com80e39a72009-04-02 16:59:40 +000069
reed@android.comed673312009-02-27 16:24:51 +000070 const char* getName();
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000071 void run();
72 bool passed() const { return fPassed; }
reed@android.com80e39a72009-04-02 16:59:40 +000073
djsollen@google.comcb626502013-03-20 13:48:20 +000074 static const SkString& GetTmpDir();
75
76 static const SkString& GetResourcePath();
reed@google.com789c6f22013-02-25 20:24:24 +000077
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000078 virtual bool isThreadsafe() const { return true; }
79
reed@android.comed673312009-02-27 16:24:51 +000080 protected:
81 virtual void onGetName(SkString*) = 0;
82 virtual void onRun(Reporter*) = 0;
reed@android.com80e39a72009-04-02 16:59:40 +000083
reed@android.comed673312009-02-27 16:24:51 +000084 private:
85 Reporter* fReporter;
86 SkString fName;
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000087 bool fPassed;
reed@android.comed673312009-02-27 16:24:51 +000088 };
89
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000090 class GpuTest : public Test{
91 public:
bsalomon@google.com67b915d2013-02-04 16:13:32 +000092 GpuTest() : Test() {}
93 static GrContextFactory* GetGrContextFactory();
94 static void DestroyContexts();
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000095 virtual bool isThreadsafe() const { return false; }
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000096 private:
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000097 };
98
reed@android.comed673312009-02-27 16:24:51 +000099 typedef SkTRegistry<Test*, void*> TestRegistry;
100}
101
102#define REPORTER_ASSERT(r, cond) \
103 do { \
104 if (!(cond)) { \
105 SkString desc; \
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +0000106 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \
reed@android.comed673312009-02-27 16:24:51 +0000107 r->reportFailed(desc); \
108 } \
109 } while(0)
110
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +0000111#define REPORTER_ASSERT_MESSAGE(r, cond, message) \
112 do { \
113 if (!(cond)) { \
114 SkString desc; \
115 desc.printf("%s %s:%d: %s", message, __FILE__, __LINE__, #cond); \
116 r->reportFailed(desc); \
117 } \
118 } while(0)
119
reed@android.comed673312009-02-27 16:24:51 +0000120
121#endif