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