175e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com/* 275e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com * Copyright 2013 Google Inc. 375e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com * 475e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com * Use of this source code is governed by a BSD-style license that can be 575e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com * found in the LICENSE file. 675e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com */ 7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org 875e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com#include "SkError.h" 975e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com#include "SkPath.h" 1075e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com#include "SkRect.h" 118f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 1275e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com 13c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.orgtypedef struct { 14c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org skiatest::Reporter *fReporter; 15c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org unsigned int *fIntPointer; 16c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org} ErrorContext; 17c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org 1875e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com#define CHECK(errcode) \ 1975e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com REPORTER_ASSERT( reporter, (err = SkGetLastError()) == errcode); \ 2075e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com if (err != kNoError_SkError) \ 2175e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com { \ 2275e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com SkClearLastError(); \ 2375e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com } 243284017a60ea4fc3dc5b95838ba0c301ee1e4e8dskia.committer@gmail.com 258e029e6e59024b80e8f71924369a540699754de3humper@google.comstatic void cb(SkError err, void *context) { 26c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org ErrorContext *context_ptr = static_cast<ErrorContext *>(context); 27c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org REPORTER_ASSERT( context_ptr->fReporter, (*(context_ptr->fIntPointer) == 0xdeadbeef) ); 2875e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com} 2975e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com 30e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(Error, reporter) { 31fbe4136845fd68f583f9f9bfb628706c4b87480bmtklein // Some previous user of this thread may have left an error laying around. 32fbe4136845fd68f583f9f9bfb628706c4b87480bmtklein SkClearLastError(); 33fbe4136845fd68f583f9f9bfb628706c4b87480bmtklein 3475e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com SkError err; 35f91e3d4f54de9976b6538decadd977b19e49eaddskia.committer@gmail.com 36c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org unsigned int test_value = 0xdeadbeef; 37c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org ErrorContext context; 38c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org context.fReporter = reporter; 39c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org context.fIntPointer = &test_value; 40f91e3d4f54de9976b6538decadd977b19e49eaddskia.committer@gmail.com 41c5e57bd0a3e1b3b8d2d11307c6de1886656ca9fdcommit-bot@chromium.org SkSetErrorCallback(cb, &context); 423284017a60ea4fc3dc5b95838ba0c301ee1e4e8dskia.committer@gmail.com 4375e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 443284017a60ea4fc3dc5b95838ba0c301ee1e4e8dskia.committer@gmail.com 4575e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com SkRect r = SkRect::MakeWH(50, 100); 4675e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 4775e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com 4875e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com SkPath path; 4975e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com path.addRect(r); 5075e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 513284017a60ea4fc3dc5b95838ba0c301ee1e4e8dskia.committer@gmail.com 5275e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com path.addRoundRect(r, 10, 10); 5375e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 5475e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com 5575e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com // should trigger the default error callback, which just prints to the screen. 5675e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com path.addRoundRect(r, -10, -10); 5775e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kInvalidArgument_SkError); 5875e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 5975e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com 6075e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com // should trigger *our* callback. 6175e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com path.addRoundRect(r, -10, -10); 6275e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kInvalidArgument_SkError); 6375e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com CHECK(kNoError_SkError); 6475e3ca127cd14fffc9c8df7ea03d6529fb001831humper@google.com} 65