Test.h revision 1cc8f6f3c48b33430d0e39a4a36601ac0d1de04a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2011 Google Inc. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file. 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef skiatest_Test_DEFINED 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define skiatest_Test_DEFINED 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "SkRefCnt.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "SkString.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkTRegistry.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GrContext; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkGLContext; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace skiatest { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Test; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Reporter : public SkRefCnt { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Reporter(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Result { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPassed, // must begin with 0 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFailed, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ///// 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kLastResult = kFailed 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void resetReporting(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int countTests() const { return fTestCount; } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int countResults(Result r) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkASSERT((unsigned)r <= kLastResult); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return fResultCount[r]; 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void startTest(Test*); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void report(const char testDesc[], Result); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void endTest(Test*); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // helpers for tests 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void assertTrue(bool cond, const char desc[]) { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cond) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this->report(desc, kFailed); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void assertFalse(bool cond, const char desc[]) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cond) { 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this->report(desc, kFailed); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void reportFailed(const char desc[]) { 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this->report(desc, kFailed); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void reportFailed(const SkString& desc) { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this->report(desc.c_str(), kFailed); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool getCurrSuccess() const { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return fCurrTestSuccess; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onStart(Test*) {} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void onReport(const char desc[], Result) {} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void onEnd(Test*) {} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Test* fCurrTest; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fTestCount; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int fResultCount[kLastResult+1]; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool fCurrTestSuccess; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef SkRefCnt INHERITED; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Test { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Test(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Test(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Reporter* getReporter() const { return fReporter; } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void setReporter(Reporter*); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* getName(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool run(); // returns true on success 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void onGetName(SkString*) = 0; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void onRun(Reporter*) = 0; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Reporter* fReporter; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkString fName; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class GpuTest : public Test{ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GpuTest() : Test() { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fContext = GetContext(); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GrContext* fContext; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static GrContext* GetContext(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef SkTRegistry<Test*, void*> TestRegistry; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REPORTER_ASSERT(r, cond) \ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do { \ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(cond)) { \ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkString desc; \ 118 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \ 119 r->reportFailed(desc); \ 120 } \ 121 } while(0) 122 123#define REPORTER_ASSERT_MESSAGE(r, cond, message) \ 124 do { \ 125 if (!(cond)) { \ 126 SkString desc; \ 127 desc.printf("%s %s:%d: %s", message, __FILE__, __LINE__, #cond); \ 128 r->reportFailed(desc); \ 129 } \ 130 } while(0) 131 132 133#endif 134