blob: fa62afeab3b4b0b6e40ac968163ae76474f9f310 [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"
commit-bot@chromium.org0506b9d2013-04-22 16:43:07 +000015#include "SkTypes.h"
reed@android.comed673312009-02-27 16:24:51 +000016
bsalomon@google.com67b915d2013-02-04 16:13:32 +000017class GrContextFactory;
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000018
reed@android.comed673312009-02-27 16:24:51 +000019namespace skiatest {
reed@android.com80e39a72009-04-02 16:59:40 +000020
reed@android.comed673312009-02-27 16:24:51 +000021 class Test;
22
23 class Reporter : public SkRefCnt {
24 public:
robertphillips@google.coma22e2112012-08-16 14:58:06 +000025 SK_DECLARE_INST_COUNT(Reporter)
reed@android.comed673312009-02-27 16:24:51 +000026 Reporter();
27
reed@android.comed673312009-02-27 16:24:51 +000028 int countTests() const { return fTestCount; }
reed@android.comed673312009-02-27 16:24:51 +000029
30 void startTest(Test*);
commit-bot@chromium.org1f792862013-06-18 20:50:34 +000031 void reportFailed(const SkString& desc);
reed@android.comed673312009-02-27 16:24:51 +000032 void endTest(Test*);
commit-bot@chromium.orgc7e08bd2013-04-23 11:16:32 +000033
caryclark@google.comd54e1e92013-04-10 15:57:31 +000034 virtual bool allowExtendedTest() const { return false; }
caryclark@google.com16cfe402013-04-18 18:47:37 +000035 virtual bool allowThreaded() const { return false; }
commit-bot@chromium.orgc7e08bd2013-04-23 11:16:32 +000036 virtual void bumpTestCount() { sk_atomic_inc(&fTestCount); }
37
reed@android.comed673312009-02-27 16:24:51 +000038 protected:
39 virtual void onStart(Test*) {}
commit-bot@chromium.org1f792862013-06-18 20:50:34 +000040 virtual void onReportFailed(const SkString& desc) {}
reed@android.comed673312009-02-27 16:24:51 +000041 virtual void onEnd(Test*) {}
reed@android.com80e39a72009-04-02 16:59:40 +000042
reed@android.comed673312009-02-27 16:24:51 +000043 private:
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000044 int32_t fTestCount;
reed@android.com80e39a72009-04-02 16:59:40 +000045
reed@android.comed673312009-02-27 16:24:51 +000046 typedef SkRefCnt INHERITED;
47 };
reed@android.com80e39a72009-04-02 16:59:40 +000048
reed@android.comed673312009-02-27 16:24:51 +000049 class Test {
reed@android.com80e39a72009-04-02 16:59:40 +000050 public:
reed@android.comed673312009-02-27 16:24:51 +000051 Test();
52 virtual ~Test();
53
54 Reporter* getReporter() const { return fReporter; }
55 void setReporter(Reporter*);
reed@android.com80e39a72009-04-02 16:59:40 +000056
reed@android.comed673312009-02-27 16:24:51 +000057 const char* getName();
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000058 void run();
59 bool passed() const { return fPassed; }
commit-bot@chromium.org0506b9d2013-04-22 16:43:07 +000060 SkMSec elapsedMs() const { return fElapsed; }
reed@android.com80e39a72009-04-02 16:59:40 +000061
scroggo@google.comc76218d2013-06-06 14:59:56 +000062 static SkString GetTmpDir();
djsollen@google.comcb626502013-03-20 13:48:20 +000063
scroggo@google.comc76218d2013-06-06 14:59:56 +000064 static SkString GetResourcePath();
reed@google.com789c6f22013-02-25 20:24:24 +000065
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000066 virtual bool isThreadsafe() const { return true; }
67
reed@android.comed673312009-02-27 16:24:51 +000068 protected:
69 virtual void onGetName(SkString*) = 0;
70 virtual void onRun(Reporter*) = 0;
reed@android.com80e39a72009-04-02 16:59:40 +000071
reed@android.comed673312009-02-27 16:24:51 +000072 private:
73 Reporter* fReporter;
74 SkString fName;
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000075 bool fPassed;
commit-bot@chromium.org0506b9d2013-04-22 16:43:07 +000076 SkMSec fElapsed;
reed@android.comed673312009-02-27 16:24:51 +000077 };
78
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000079 class GpuTest : public Test{
80 public:
bsalomon@google.com67b915d2013-02-04 16:13:32 +000081 GpuTest() : Test() {}
82 static GrContextFactory* GetGrContextFactory();
83 static void DestroyContexts();
commit-bot@chromium.org197845a2013-04-19 13:24:28 +000084 virtual bool isThreadsafe() const { return false; }
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000085 private:
bsalomon@google.coma8e686e2011-08-16 15:45:58 +000086 };
87
reed@android.comed673312009-02-27 16:24:51 +000088 typedef SkTRegistry<Test*, void*> TestRegistry;
89}
90
91#define REPORTER_ASSERT(r, cond) \
92 do { \
93 if (!(cond)) { \
94 SkString desc; \
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +000095 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \
reed@android.comed673312009-02-27 16:24:51 +000096 r->reportFailed(desc); \
97 } \
98 } while(0)
99
junov@chromium.org1cc8f6f2012-02-22 21:00:42 +0000100#define REPORTER_ASSERT_MESSAGE(r, cond, message) \
101 do { \
102 if (!(cond)) { \
103 SkString desc; \
104 desc.printf("%s %s:%d: %s", message, __FILE__, __LINE__, #cond); \
105 r->reportFailed(desc); \
106 } \
107 } while(0)
108
reed@android.comed673312009-02-27 16:24:51 +0000109
110#endif