Index: Source/core/platform/animation/TimingFunctionTest.cpp |
diff --git a/Source/core/platform/animation/TimingFunctionTest.cpp b/Source/core/platform/animation/TimingFunctionTest.cpp |
index 24fe02982187f4fca4c18257356fd4c04249dbc1..33d51b2c6db8d52a8b5c5f5382eb14fa5aa04d1f 100644 |
--- a/Source/core/platform/animation/TimingFunctionTest.cpp |
+++ b/Source/core/platform/animation/TimingFunctionTest.cpp |
@@ -64,6 +64,7 @@ |
} \ |
} |
+ |
using namespace WebCore; |
namespace { |
@@ -86,12 +87,21 @@ TEST_F(TimingFunctionTest, BaseOperatorEq) |
RefPtr<TimingFunction> stepsTiming1 = StepsTimingFunction::preset(StepsTimingFunction::End); |
RefPtr<TimingFunction> stepsTiming2 = StepsTimingFunction::create(5, true); |
+ RefPtr<ChainedTimingFunction> chainedTiming1 = ChainedTimingFunction::create(); |
+ chainedTiming1->appendSegment(1.0, linearTiming.get()); |
+ |
+ RefPtr<ChainedTimingFunction> chainedTiming2 = ChainedTimingFunction::create(); |
+ chainedTiming2->appendSegment(0.5, cubicTiming1.get()); |
+ chainedTiming2->appendSegment(1.0, cubicTiming2.get()); |
+ |
NE_HELPER(v); |
NE_HELPER_APPEND(v, linearTiming); |
NE_HELPER_APPEND(v, cubicTiming1); |
NE_HELPER_APPEND(v, cubicTiming2); |
NE_HELPER_APPEND(v, stepsTiming1); |
NE_HELPER_APPEND(v, stepsTiming2); |
+ NE_HELPER_APPEND(v, chainedTiming1); |
+ NE_HELPER_APPEND(v, chainedTiming2); |
NE_HELPER_LOOP(v); |
} |
@@ -177,5 +187,67 @@ TEST_F(TimingFunctionTest, StepsOperatorEqReflectivityBug) |
EXPECT_REFV_NE(stepsB, stepsA); |
} |
+TEST_F(TimingFunctionTest, ChainedEq) |
+{ |
+ // Single item in chain |
+ RefPtr<TimingFunction> cubicTiming1 = CubicBezierTimingFunction::create(0.25, 0.1, 0.25, 1.0); |
+ RefPtr<TimingFunction> cubicTiming2 = CubicBezierTimingFunction::create(0.25, 0.1, 0.25, 1.0); |
+ RefPtr<TimingFunction> cubicTiming3 = CubicBezierTimingFunction::preset(CubicBezierTimingFunction::EaseOut); |
+ |
+ RefPtr<ChainedTimingFunction> chainedSingleCubic1 = ChainedTimingFunction::create(); |
+ chainedSingleCubic1->appendSegment(1.0, cubicTiming1.get()); |
+ EXPECT_REFV_EQ(chainedSingleCubic1, chainedSingleCubic1); |
+ |
+ RefPtr<ChainedTimingFunction> chainedSingleCubic2 = ChainedTimingFunction::create(); |
+ chainedSingleCubic2->appendSegment(1.0, cubicTiming1.get()); // Same inner timing function |
+ EXPECT_REFV_EQ(chainedSingleCubic1, chainedSingleCubic2); |
+ |
+ RefPtr<ChainedTimingFunction> chainedSingleCubic3 = ChainedTimingFunction::create(); |
+ chainedSingleCubic3->appendSegment(1.0, cubicTiming2.get()); // == inner timing function |
+ EXPECT_REFV_EQ(chainedSingleCubic1, chainedSingleCubic3); |
+ |
+ RefPtr<ChainedTimingFunction> chainedSingleCubic4 = ChainedTimingFunction::create(); |
+ chainedSingleCubic4->appendSegment(0.5, cubicTiming1.get()); // Different offset |
+ EXPECT_REFV_NE(chainedSingleCubic1, chainedSingleCubic4); |
+ EXPECT_REFV_NE(chainedSingleCubic3, chainedSingleCubic4); |
+ |
+ RefPtr<ChainedTimingFunction> chainedSingleCubic5 = ChainedTimingFunction::create(); |
+ chainedSingleCubic5->appendSegment(1.0, cubicTiming3.get()); // != inner timing function (same type) |
+ EXPECT_REFV_NE(chainedSingleCubic1, chainedSingleCubic5); |
+ EXPECT_REFV_NE(chainedSingleCubic2, chainedSingleCubic5); |
+ EXPECT_REFV_NE(chainedSingleCubic3, chainedSingleCubic5); |
+ EXPECT_REFV_NE(chainedSingleCubic4, chainedSingleCubic5); |
+ |
+ RefPtr<TimingFunction> linearTiming1 = LinearTimingFunction::create(); |
+ RefPtr<ChainedTimingFunction> chainedSingleLinear1 = ChainedTimingFunction::create(); |
+ chainedSingleLinear1->appendSegment(1.0, linearTiming1.get()); // != inner timing function (different type) |
+ EXPECT_REFV_NE(chainedSingleLinear1, chainedSingleCubic1); |
+ EXPECT_REFV_NE(chainedSingleLinear1, chainedSingleCubic2); |
+ EXPECT_REFV_NE(chainedSingleLinear1, chainedSingleCubic3); |
+ EXPECT_REFV_NE(chainedSingleLinear1, chainedSingleCubic4); |
+ |
+ // Multiple items in chain |
+ RefPtr<ChainedTimingFunction> chainedMixed1 = ChainedTimingFunction::create(); |
+ chainedMixed1->appendSegment(0.25, chainedSingleLinear1.get()); |
+ chainedMixed1->appendSegment(1.0, cubicTiming1.get()); |
+ |
+ RefPtr<ChainedTimingFunction> chainedMixed2 = ChainedTimingFunction::create(); |
+ chainedMixed2->appendSegment(0.25, chainedSingleLinear1.get()); |
+ chainedMixed2->appendSegment(1.0, cubicTiming1.get()); |
+ |
+ RefPtr<ChainedTimingFunction> chainedMixed3 = ChainedTimingFunction::create(); |
+ chainedMixed3->appendSegment(0.25, chainedSingleLinear1.get()); |
+ chainedMixed3->appendSegment(1.0, cubicTiming2.get()); |
+ |
+ EXPECT_REFV_EQ(chainedMixed1, chainedMixed2); |
+ EXPECT_REFV_EQ(chainedMixed1, chainedMixed3); |
+ EXPECT_REFV_NE(chainedMixed1, chainedSingleCubic1); |
+ EXPECT_REFV_NE(chainedMixed1, chainedSingleLinear1); |
+ |
+ RefPtr<ChainedTimingFunction> chainedMixed4 = ChainedTimingFunction::create(); |
+ chainedMixed4->appendSegment(0.20, chainedSingleLinear1.get()); // Different offset |
+ chainedMixed4->appendSegment(1.0, cubicTiming1.get()); |
+ EXPECT_REFV_NE(chainedMixed1, chainedMixed4); |
+} |
} // namespace |