1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "include/core/SkPathEffect.h" 9#include "include/core/SkRefCnt.h" 10#include "include/core/SkScalar.h" 11#include "include/effects/SkCornerPathEffect.h" 12#include "include/effects/SkDashPathEffect.h" 13#include "include/private/SkTemplates.h" 14#include "tests/Test.h" 15 16DEF_TEST(AsADashTest_noneDash, reporter) { 17 sk_sp<SkPathEffect> pe(SkCornerPathEffect::Make(1.0)); 18 SkPathEffect::DashInfo info; 19 20 SkPathEffect::DashType dashType = pe->asADash(&info); 21 REPORTER_ASSERT(reporter, SkPathEffect::kNone_DashType == dashType); 22} 23 24DEF_TEST(AsADashTest_nullInfo, reporter) { 25 SkScalar inIntervals[] = { 4.0, 2.0, 1.0, 3.0 }; 26 const SkScalar phase = 2.0; 27 sk_sp<SkPathEffect> pe(SkDashPathEffect::Make(inIntervals, 4, phase)); 28 29 SkPathEffect::DashType dashType = pe->asADash(nullptr); 30 REPORTER_ASSERT(reporter, SkPathEffect::kDash_DashType == dashType); 31} 32 33DEF_TEST(AsADashTest_usingDash, reporter) { 34 SkScalar inIntervals[] = { 4.0, 2.0, 1.0, 3.0 }; 35 SkScalar totalIntSum = 10.0; 36 const SkScalar phase = 2.0; 37 38 sk_sp<SkPathEffect> pe(SkDashPathEffect::Make(inIntervals, 4, phase)); 39 40 SkPathEffect::DashInfo info; 41 42 SkPathEffect::DashType dashType = pe->asADash(&info); 43 REPORTER_ASSERT(reporter, SkPathEffect::kDash_DashType == dashType); 44 REPORTER_ASSERT(reporter, 4 == info.fCount); 45 REPORTER_ASSERT(reporter, SkScalarMod(phase, totalIntSum) == info.fPhase); 46 47 // Since it is a kDash_DashType, allocate space for the intervals and recall asADash 48 SkAutoTArray<SkScalar> intervals(info.fCount); 49 info.fIntervals = intervals.get(); 50 pe->asADash(&info); 51 REPORTER_ASSERT(reporter, inIntervals[0] == info.fIntervals[0]); 52 REPORTER_ASSERT(reporter, inIntervals[1] == info.fIntervals[1]); 53 REPORTER_ASSERT(reporter, inIntervals[2] == info.fIntervals[2]); 54 REPORTER_ASSERT(reporter, inIntervals[3] == info.fIntervals[3]); 55 56 // Make sure nothing else has changed on us 57 REPORTER_ASSERT(reporter, 4 == info.fCount); 58 REPORTER_ASSERT(reporter, SkScalarMod(phase, totalIntSum) == info.fPhase); 59} 60