blob: f90edab1c1bc560c2b992453db8a8d4c419c4014 [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"
14
bsalomon@google.com67b915d2013-02-04 16:13:32 +000015class GrContextFactory;
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000016
reed@android.comed673312009-02-27 16:24:51 +000017namespace skiatest {
reed@android.com80e39a72009-04-02 16:59:40 +000018
reed@android.comed673312009-02-27 16:24:51 +000019 class Test;
20
21 class Reporter : public SkRefCnt {
22 public:
robertphillips@google.coma22e2112012-08-16 14:58:06 +000023 SK_DECLARE_INST_COUNT(Reporter)
reed@android.comed673312009-02-27 16:24:51 +000024 Reporter();
25
26 enum Result {
27 kPassed, // must begin with 0
28 kFailed,
29 /////
30 kLastResult = kFailed
31 };
reed@android.com80e39a72009-04-02 16:59:40 +000032
reed@android.comed673312009-02-27 16:24:51 +000033 void resetReporting();
caryclark@google.comd54e1e92013-04-10 15:57:31 +000034 void bumpTestCount() { ++fTestCount; }
reed@android.comed673312009-02-27 16:24:51 +000035 int countTests() const { return fTestCount; }
36 int countResults(Result r) {
37 SkASSERT((unsigned)r <= kLastResult);
38 return fResultCount[r];
39 }
40
41 void startTest(Test*);
42 void report(const char testDesc[], Result);
43 void endTest(Test*);
caryclark@google.comd54e1e92013-04-10 15:57:31 +000044 virtual bool allowExtendedTest() const { return false; }
reed@android.com80e39a72009-04-02 16:59:40 +000045
reed@android.comed673312009-02-27 16:24:51 +000046 // helpers for tests
47 void assertTrue(bool cond, const char desc[]) {
48 if (!cond) {
49 this->report(desc, kFailed);
50 }
51 }
52 void assertFalse(bool cond, const char desc[]) {
53 if (cond) {
54 this->report(desc, kFailed);
55 }
56 }
57 void reportFailed(const char desc[]) {
58 this->report(desc, kFailed);
59 }
60 void reportFailed(const SkString& desc) {
61 this->report(desc.c_str(), kFailed);
62 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000063
reed@android.comeeb3b7f2009-04-09 04:06:54 +000064 bool getCurrSuccess() const {
65 return fCurrTestSuccess;
66 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000067
reed@android.comed673312009-02-27 16:24:51 +000068 protected:
69 virtual void onStart(Test*) {}
70 virtual void onReport(const char desc[], Result) {}
71 virtual void onEnd(Test*) {}
reed@android.com80e39a72009-04-02 16:59:40 +000072
reed@android.comed673312009-02-27 16:24:51 +000073 private:
74 Test* fCurrTest;
75 int fTestCount;
76 int fResultCount[kLastResult+1];
reed@android.comeeb3b7f2009-04-09 04:06:54 +000077 bool fCurrTestSuccess;
reed@android.com80e39a72009-04-02 16:59:40 +000078
reed@android.comed673312009-02-27 16:24:51 +000079 typedef SkRefCnt INHERITED;
80 };
reed@android.com80e39a72009-04-02 16:59:40 +000081
reed@android.comed673312009-02-27 16:24:51 +000082 class Test {
reed@android.com80e39a72009-04-02 16:59:40 +000083 public:
reed@android.comed673312009-02-27 16:24:51 +000084 Test();
85 virtual ~Test();
86
87 Reporter* getReporter() const { return fReporter; }
88 void setReporter(Reporter*);
reed@android.com80e39a72009-04-02 16:59:40 +000089
reed@android.comed673312009-02-27 16:24:51 +000090 const char* getName();
reed@android.comeeb3b7f2009-04-09 04:06:54 +000091 bool run(); // returns true on success
reed@android.com80e39a72009-04-02 16:59:40 +000092
djsollen@google.comcb626502013-03-20 13:48:20 +000093 static const SkString& GetTmpDir();
94
95 static const SkString& GetResourcePath();
reed@google.com789c6f22013-02-25 20:24:24 +000096
reed@android.comed673312009-02-27 16:24:51 +000097 protected:
98 virtual void onGetName(SkString*) = 0;
99 virtual void onRun(Reporter*) = 0;
reed@android.com80e39a72009-04-02 16:59:40 +0000100
reed@android.comed673312009-02-27 16:24:51 +0000101 private:
102 Reporter* fReporter;
103 SkString fName;
104 };
105
bsalomon@google.coma8e686e2011-08-16 15:45:58 +0000106 class GpuTest : public Test{
107 public:
bsalomon@google.com67b915d2013-02-04 16:13:32 +0000108 GpuTest() : Test() {}
109 static GrContextFactory* GetGrContextFactory();
110 static void DestroyContexts();
bsalomon@google.coma8e686e2011-08-16 15:45:58 +0000111 private:
bsalomon@google.coma8e686e2011-08-16 15:45:58 +0000112 };
113
reed@android.comed673312009-02-27 16:24:51 +0000114 typedef SkTRegistry<Test*, void*> TestRegistry;
115}
116
117#define REPORTER_ASSERT(r, cond) \
118 do { \
119 if (!(cond)) { \
120 SkString desc; \
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +0000121 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \
reed@android.comed673312009-02-27 16:24:51 +0000122 r->reportFailed(desc); \
123 } \
124 } while(0)
125
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +0000126#define REPORTER_ASSERT_MESSAGE(r, cond, message) \
127 do { \
128 if (!(cond)) { \
129 SkString desc; \
130 desc.printf("%s %s:%d: %s", message, __FILE__, __LINE__, #cond); \
131 r->reportFailed(desc); \
132 } \
133 } while(0)
134
reed@android.comed673312009-02-27 16:24:51 +0000135
136#endif