1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#ifndef skiatest_Test_DEFINED 9ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#define skiatest_Test_DEFINED 10ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 11ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkString.h" 12ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkTRegistry.h" 130506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org#include "SkTypes.h" 14ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 1567b915de99e6b89d476907930ac8c27afb64d10ebsalomon@google.comclass GrContextFactory; 16a8e686eb6cadb74039d3b624ece0d3ccb0684dccbsalomon@google.com 17ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.comnamespace skiatest { 1880e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 1987f3ba4847aa575016eb3a21e944197d757df8c0halcanarySkString GetTmpDir(); 2087f3ba4847aa575016eb3a21e944197d757df8c0halcanary 2187f3ba4847aa575016eb3a21e944197d757df8c0halcanarystruct Failure { 2287f3ba4847aa575016eb3a21e944197d757df8c0halcanary Failure(const char* f, int l, const char* c, const SkString& m) 2387f3ba4847aa575016eb3a21e944197d757df8c0halcanary : fileName(f), lineNo(l), condition(c), message(m) {} 2487f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* fileName; 2587f3ba4847aa575016eb3a21e944197d757df8c0halcanary int lineNo; 2687f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* condition; 2787f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkString message; 2887f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkString toString() const; 2987f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 3087f3ba4847aa575016eb3a21e944197d757df8c0halcanary 3187f3ba4847aa575016eb3a21e944197d757df8c0halcanaryclass Reporter : SkNoncopyable { 3287f3ba4847aa575016eb3a21e944197d757df8c0halcanarypublic: 3387f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual ~Reporter() {} 3487f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual void bumpTestCount(); 3587f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual void reportFailed(const skiatest::Failure&) = 0; 3687f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual bool allowExtendedTest() const; 3787f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual bool verbose() const; 3887f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 3987f3ba4847aa575016eb3a21e944197d757df8c0halcanary 4087f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORT_FAILURE(reporter, cond, message) \ 4187f3ba4847aa575016eb3a21e944197d757df8c0halcanary reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message)) 4287f3ba4847aa575016eb3a21e944197d757df8c0halcanary 4387f3ba4847aa575016eb3a21e944197d757df8c0halcanarytypedef void (*TestProc)(skiatest::Reporter*, GrContextFactory*); 4487f3ba4847aa575016eb3a21e944197d757df8c0halcanary 4587f3ba4847aa575016eb3a21e944197d757df8c0halcanarystruct Test { 4687f3ba4847aa575016eb3a21e944197d757df8c0halcanary Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {} 4787f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* name; 4887f3ba4847aa575016eb3a21e944197d757df8c0halcanary bool needsGpu; 4987f3ba4847aa575016eb3a21e944197d757df8c0halcanary TestProc proc; 5087f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 5187f3ba4847aa575016eb3a21e944197d757df8c0halcanary 5287f3ba4847aa575016eb3a21e944197d757df8c0halcanarytypedef SkTRegistry<Test> TestRegistry; 53e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 54e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org/* 55e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org Use the following macros to make use of the skiatest classes, e.g. 56e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 57e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org #include "Test.h" 58e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 59e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org DEF_TEST(TestName, reporter) { 60e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 61e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org REPORTER_ASSERT(reporter, x == 15); 62e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 63e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org REPORTER_ASSERT_MESSAGE(reporter, x == 15, "x should be 15"); 64e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 65e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org if (x != 15) { 66e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ERRORF(reporter, "x should be 15, but is %d", x); 67e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org return; 68e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org } 69e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 70e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org } 71e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org*/ 7287f3ba4847aa575016eb3a21e944197d757df8c0halcanary} // namespace skiatest 73ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 7487f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORTER_ASSERT(r, cond) \ 7587f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 7687f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!(cond)) { \ 7787f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, #cond, SkString()); \ 7887f3ba4847aa575016eb3a21e944197d757df8c0halcanary } \ 7987f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 8087f3ba4847aa575016eb3a21e944197d757df8c0halcanary 8187f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORTER_ASSERT_MESSAGE(r, cond, message) \ 8287f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 8387f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!(cond)) { \ 8487f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, #cond, SkString(message)); \ 8587f3ba4847aa575016eb3a21e944197d757df8c0halcanary } \ 8687f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 8787f3ba4847aa575016eb3a21e944197d757df8c0halcanary 8887f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define ERRORF(r, ...) \ 8987f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 9087f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ 9187f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 9287f3ba4847aa575016eb3a21e944197d757df8c0halcanary 9387f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define DEF_TEST(name, reporter) \ 9487f3ba4847aa575016eb3a21e944197d757df8c0halcanary static void test_##name(skiatest::Reporter*, GrContextFactory*); \ 9587f3ba4847aa575016eb3a21e944197d757df8c0halcanary skiatest::TestRegistry name##TestRegistry( \ 9687f3ba4847aa575016eb3a21e944197d757df8c0halcanary skiatest::Test(#name, false, test_##name)); \ 9787f3ba4847aa575016eb3a21e944197d757df8c0halcanary void test_##name(skiatest::Reporter* reporter, GrContextFactory*) 9887f3ba4847aa575016eb3a21e944197d757df8c0halcanary 9987f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define DEF_GPUTEST(name, reporter, factory) \ 10087f3ba4847aa575016eb3a21e944197d757df8c0halcanary static void test_##name(skiatest::Reporter*, GrContextFactory*); \ 10187f3ba4847aa575016eb3a21e944197d757df8c0halcanary skiatest::TestRegistry name##TestRegistry( \ 10287f3ba4847aa575016eb3a21e944197d757df8c0halcanary skiatest::Test(#name, true, test_##name)); \ 10387f3ba4847aa575016eb3a21e944197d757df8c0halcanary void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory) 104e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 105ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#endif 106