146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/* 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Copyright 2013 Google Inc. 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * found in the LICENSE file. 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "SkError.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "SkPath.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "SkRect.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "Test.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef struct { 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) skiatest::Reporter *fReporter; 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) unsigned int *fIntPointer; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} ErrorContext; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define CHECK(errcode) \ 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) REPORTER_ASSERT( reporter, (err = SkGetLastError()) == errcode); \ 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (err != kNoError_SkError) \ 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) { \ 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkClearLastError(); \ 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic void cb(SkError err, void *context) { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ErrorContext *context_ptr = static_cast<ErrorContext *>(context); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci REPORTER_ASSERT( context_ptr->fReporter, (*(context_ptr->fIntPointer) == 0xdeadbeef) ); 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DEF_TEST(Error, reporter) { 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkError err; 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) unsigned int test_value = 0xdeadbeef; 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ErrorContext context; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) context.fReporter = reporter; 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) context.fIntPointer = &test_value; 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SkSetErrorCallback(cb, &context); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CHECK(kNoError_SkError); 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkRect r = SkRect::MakeWH(50, 100); 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CHECK(kNoError_SkError); 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SkPath path; 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) path.addRect(r); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(kNoError_SkError); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci path.addRoundRect(r, 10, 10); 50 CHECK(kNoError_SkError); 51 52 // should trigger the default error callback, which just prints to the screen. 53 path.addRoundRect(r, -10, -10); 54 CHECK(kInvalidArgument_SkError); 55 CHECK(kNoError_SkError); 56 57 // should trigger *our* callback. 58 path.addRoundRect(r, -10, -10); 59 CHECK(kInvalidArgument_SkError); 60 CHECK(kNoError_SkError); 61} 62