1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "skia/ext/refptr.h"
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/effects/SkBlurImageFilter.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/point.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace cc {
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace {
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(FilterOperationsTest, GetOutsetsBlur) {
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations ops;
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ops.Append(FilterOperation::CreateBlurFilter(20));
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int top, right, bottom, left;
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  top = right = bottom = left = 0;
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ops.GetOutsets(&top, &right, &bottom, &left);
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(57, top);
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(57, right);
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(57, bottom);
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(57, left);
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(FilterOperationsTest, GetOutsetsDropShadow) {
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations ops;
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ops.Append(FilterOperation::CreateDropShadowFilter(gfx::Point(3, 8), 20, 0));
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int top, right, bottom, left;
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  top = right = bottom = left = 0;
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ops.GetOutsets(&top, &right, &bottom, &left);
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(49, top);
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(60, right);
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(65, bottom);
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(54, left);
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define SAVE_RESTORE_AMOUNT(filter_name, filter_type, a)                  \
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {                                                                       \
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op = FilterOperation::Create##filter_name##Filter(a); \
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op.type());                   \
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op.amount());                                            \
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op2 = FilterOperation::CreateEmptyFilter();           \
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_type(FilterOperation::filter_type);                           \
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(a, op2.amount());                                           \
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_amount(a);                                                    \
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op2.type());                  \
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op2.amount());                                           \
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define SAVE_RESTORE_OFFSET_AMOUNT_COLOR(filter_name, filter_type, a, b, c) \
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {                                                                         \
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op =                                                    \
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        FilterOperation::Create##filter_name##Filter(a, b, c);              \
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op.type());                     \
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op.drop_shadow_offset());                                  \
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(b, op.amount());                                              \
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(c, op.drop_shadow_color());                                   \
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                            \
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op2 = FilterOperation::CreateEmptyFilter();             \
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_type(FilterOperation::filter_type);                             \
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                            \
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(a, op2.drop_shadow_offset());                                 \
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(b, op2.amount());                                             \
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(c, op2.drop_shadow_color());                                  \
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                            \
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_drop_shadow_offset(a);                                          \
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_amount(b);                                                      \
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_drop_shadow_color(c);                                           \
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                            \
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op2.type());                    \
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op2.drop_shadow_offset());                                 \
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(b, op2.amount());                                             \
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(c, op2.drop_shadow_color());                                  \
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define SAVE_RESTORE_MATRIX(filter_name, filter_type, a)                  \
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {                                                                       \
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op = FilterOperation::Create##filter_name##Filter(a); \
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op.type());                   \
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    for (size_t i = 0; i < 20; ++i)                                       \
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_EQ(a[i], op.matrix()[i]);                                    \
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op2 = FilterOperation::CreateEmptyFilter();           \
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_type(FilterOperation::filter_type);                           \
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    for (size_t i = 0; i < 20; ++i)                                       \
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_NE(a[i], op2.matrix()[i]);                                   \
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_matrix(a);                                                    \
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                          \
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op2.type());                  \
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    for (size_t i = 0; i < 20; ++i)                                       \
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_EQ(a[i], op.matrix()[i]);                                    \
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define SAVE_RESTORE_AMOUNT_INSET(filter_name, filter_type, a, b)            \
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {                                                                          \
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op = FilterOperation::Create##filter_name##Filter(a, b); \
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op.type());                      \
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op.amount());                                               \
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(b, op.zoom_inset());                                           \
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                             \
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FilterOperation op2 = FilterOperation::CreateEmptyFilter();              \
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_type(FilterOperation::filter_type);                              \
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                             \
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(a, op2.amount());                                              \
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_NE(b, op2.zoom_inset());                                          \
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                             \
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_amount(a);                                                       \
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    op2.set_zoom_inset(b);                                                   \
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                             \
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(FilterOperation::filter_type, op2.type());                     \
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(a, op2.amount());                                              \
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(b, op2.zoom_inset());                                          \
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST(FilterOperationsTest, SaveAndRestore) {
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Grayscale, GRAYSCALE, 0.6f);
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Sepia, SEPIA, 0.6f);
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Saturate, SATURATE, 0.6f);
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(HueRotate, HUE_ROTATE, 0.6f);
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Invert, INVERT, 0.6f);
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Brightness, BRIGHTNESS, 0.6f);
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Contrast, CONTRAST, 0.6f);
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Opacity, OPACITY, 0.6f);
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(Blur, BLUR, 0.6f);
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT(SaturatingBrightness, SATURATING_BRIGHTNESS, 0.6f);
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_OFFSET_AMOUNT_COLOR(
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      DropShadow, DROP_SHADOW, gfx::Point(3, 4), 0.4f, 0xffffff00);
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SkScalar matrix[20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                         17, 18, 19, 20};
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_MATRIX(ColorMatrix, COLOR_MATRIX, matrix);
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SAVE_RESTORE_AMOUNT_INSET(Zoom, ZOOM, 0.5f, 32);
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendGrayscaleFilters) {
1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateGrayscaleFilter(0.25f);
1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateGrayscaleFilter(0.75f);
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateGrayscaleFilter(0.f);
1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateGrayscaleFilter(0.625f);
1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.8);
1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateGrayscaleFilter(1.f);
1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendGrayscaleWithNull) {
1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateGrayscaleFilter(1.f);
1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateGrayscaleFilter(0.75f);
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateGrayscaleFilter(0.25f);
1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSepiaFilters) {
1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateSepiaFilter(0.25f);
1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateSepiaFilter(0.75f);
1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateSepiaFilter(0.f);
1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSepiaFilter(0.625f);
1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.8);
1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSepiaFilter(1.f);
1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSepiaWithNull) {
1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateSepiaFilter(1.f);
1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateSepiaFilter(0.75f);
1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSepiaFilter(0.25f);
1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSaturateFilters) {
2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateSaturateFilter(0.25f);
2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateSaturateFilter(0.75f);
2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateSaturateFilter(0.f);
2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturateFilter(0.625f);
2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 2.0);
2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturateFilter(1.25f);
2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSaturateWithNull) {
2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateSaturateFilter(0.f);
2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateSaturateFilter(0.25f);
2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturateFilter(0.75f);
2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendHueRotateFilters) {
2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateHueRotateFilter(3.f);
2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateHueRotateFilter(7.f);
2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateHueRotateFilter(0.f);
2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateHueRotateFilter(6.f);
2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateHueRotateFilter(9.f);
2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendHueRotateWithNull) {
2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateHueRotateFilter(1.f);
2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateHueRotateFilter(0.75f);
2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateHueRotateFilter(0.25f);
2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendInvertFilters) {
2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateInvertFilter(0.25f);
2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateInvertFilter(0.75f);
2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateInvertFilter(0.f);
2657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateInvertFilter(0.625f);
2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.8);
2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateInvertFilter(1.f);
2737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendInvertWithNull) {
2777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateInvertFilter(1.f);
2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
2807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateInvertFilter(0.75f);
2817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
2847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateInvertFilter(0.25f);
2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
2877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2887dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendBrightnessFilters) {
2897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateBrightnessFilter(3.f);
2907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateBrightnessFilter(7.f);
2917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.9);
2937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateBrightnessFilter(0.f);
2947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
2977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBrightnessFilter(6.f);
2987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
2997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
3017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBrightnessFilter(9.f);
3027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3057dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendBrightnessWithNull) {
3067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateBrightnessFilter(0.f);
3077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
3097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateBrightnessFilter(0.25f);
3107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
3137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBrightnessFilter(0.75f);
3147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3177dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendContrastFilters) {
3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateContrastFilter(3.f);
3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateContrastFilter(7.f);
3207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.9);
3227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateContrastFilter(0.f);
3237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
3267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateContrastFilter(6.f);
3277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
3307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateContrastFilter(9.f);
3317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3347dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendContrastWithNull) {
3357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateContrastFilter(0.f);
3367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
3387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateContrastFilter(0.25f);
3397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
3427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateContrastFilter(0.75f);
3437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3467dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendOpacityFilters) {
3477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateOpacityFilter(0.25f);
3487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateOpacityFilter(0.75f);
3497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
3517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateOpacityFilter(0.f);
3527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateOpacityFilter(0.625f);
3567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.8);
3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateOpacityFilter(1.f);
3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3637dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendOpacityWithNull) {
3647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateOpacityFilter(0.f);
3657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
3677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateOpacityFilter(0.25f);
3687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
3717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateOpacityFilter(0.75f);
3727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendBlurFilters) {
3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateBlurFilter(3.f);
3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateBlurFilter(7.f);
3787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.9);
3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateBlurFilter(0.f);
3817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
3847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBlurFilter(6.f);
3857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
3887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBlurFilter(9.f);
3897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
3917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendBlurWithNull) {
3937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateBlurFilter(1.f);
3947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
3967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateBlurFilter(0.75f);
3977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
3987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
3997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
4007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateBlurFilter(0.25f);
4017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4047dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendDropShadowFilters) {
4057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateDropShadowFilter(
4067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(0, 0), 2.f, SkColorSetARGB(15, 34, 68, 136));
4077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateDropShadowFilter(
4087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(3, 5), 6.f, SkColorSetARGB(51, 30, 60, 120));
4097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
4117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateDropShadowFilter(
4127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(-2, -4), 0.f, SkColorSetARGB(0, 0, 0, 0));
4137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  blended = FilterOperation::Blend(&from, &to, 0.25);
4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  expected = FilterOperation::CreateDropShadowFilter(
4171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      gfx::Point(1, 1), 3.f, SkColorSetARGB(24, 32, 64, 128));
4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_EQ(expected, blended);
4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
4217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateDropShadowFilter(
4227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(2, 4), 5.f, SkColorSetARGB(42, 30, 61, 121));
4237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
4267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateDropShadowFilter(
4277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(5, 8), 8.f, SkColorSetARGB(69, 30, 59, 118));
4287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4317dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendDropShadowWithNull) {
4327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateDropShadowFilter(
4337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(4, 4), 4.f, SkColorSetARGB(255, 40, 0, 0));
4347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
4367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateDropShadowFilter(
4377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(3, 3), 3.f, SkColorSetARGB(191, 40, 0, 0));
4387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
4417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateDropShadowFilter(
4427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      gfx::Point(1, 1), 1.f, SkColorSetARGB(64, 40, 0, 0));
4437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4467dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendZoomFilters) {
4477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateZoomFilter(2.f, 3);
4487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateZoomFilter(6.f, 0);
4497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
4517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateZoomFilter(1.f, 5);
4527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateZoomFilter(5.f, 1);
4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
4597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateZoomFilter(8.f, 0);
4607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4637dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendZoomWithNull) {
4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter = FilterOperation::CreateZoomFilter(2.f, 1);
4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
4677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected = FilterOperation::CreateZoomFilter(1.75f, 1);
4687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
4717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateZoomFilter(1.25f, 0);
4727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4757dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSaturatingBrightnessFilters) {
4767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation from = FilterOperation::CreateSaturatingBrightnessFilter(3.f);
4777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation to = FilterOperation::CreateSaturatingBrightnessFilter(7.f);
4787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
4807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected =
4817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      FilterOperation::CreateSaturatingBrightnessFilter(0.f);
4827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 0.75);
4857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturatingBrightnessFilter(6.f);
4867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(&from, &to, 1.5);
4897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturatingBrightnessFilter(9.f);
4907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
4917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendSaturatingBrightnessWithNull) {
4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation filter =
4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      FilterOperation::CreateSaturatingBrightnessFilter(1.f);
4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
4987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperation expected =
4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      FilterOperation::CreateSaturatingBrightnessFilter(0.75f);
5007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
5017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = FilterOperation::Blend(NULL, &filter, 0.25);
5037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected = FilterOperation::CreateSaturatingBrightnessFilter(0.25f);
5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(expected, blended);
5057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
50768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST(FilterOperationsTest, BlendReferenceFilters) {
508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  skia::RefPtr<SkImageFilter> from_filter =
509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      skia::AdoptRef(SkBlurImageFilter::Create(1.f, 1.f));
510cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  skia::RefPtr<SkImageFilter> to_filter =
511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      skia::AdoptRef(SkBlurImageFilter::Create(2.f, 2.f));
51268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation from = FilterOperation::CreateReferenceFilter(from_filter);
51368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation to = FilterOperation::CreateReferenceFilter(to_filter);
51468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
51568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation blended = FilterOperation::Blend(&from, &to, -0.75);
51668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(from, blended);
51768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
51868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(&from, &to, 0.5);
51968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(from, blended);
52068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
52168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(&from, &to, 0.6);
52268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(to, blended);
52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
52468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(&from, &to, 1.5);
52568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(to, blended);
52668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
52768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
52868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST(FilterOperationsTest, BlendReferenceWithNull) {
529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  skia::RefPtr<SkImageFilter> image_filter =
530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      skia::AdoptRef(SkBlurImageFilter::Create(1.f, 1.f));
53168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation filter = FilterOperation::CreateReferenceFilter(image_filter);
53268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation null_filter =
53368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      FilterOperation::CreateReferenceFilter(skia::RefPtr<SkImageFilter>());
53468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
53568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FilterOperation blended = FilterOperation::Blend(&filter, NULL, 0.25);
53668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(filter, blended);
53768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(&filter, NULL, 0.75);
53868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(null_filter, blended);
53968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
54068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(NULL, &filter, 0.25);
54168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(null_filter, blended);
54268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  blended = FilterOperation::Blend(NULL, &filter, 0.75);
54368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(filter, blended);
54468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
54568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Tests blending non-empty sequences that have the same length and matching
5477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// operations.
5487dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendMatchingSequences) {
5497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations from;
5507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations to;
5517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  from.Append(FilterOperation::CreateBlurFilter(0.f));
5537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  to.Append(FilterOperation::CreateBlurFilter(2.f));
5547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  from.Append(FilterOperation::CreateSaturateFilter(4.f));
5567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  to.Append(FilterOperation::CreateSaturateFilter(0.f));
5577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  from.Append(FilterOperation::CreateZoomFilter(2.0f, 1));
5597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  to.Append(FilterOperation::CreateZoomFilter(10.f, 9));
5607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations blended = to.Blend(from, -0.75);
5627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations expected;
5637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBlurFilter(0.f));
5647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateSaturateFilter(7.f));
5657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateZoomFilter(1.f, 0));
5667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
5677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 0.75);
5697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
5707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBlurFilter(1.5f));
5717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateSaturateFilter(1.f));
5727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateZoomFilter(8.f, 7));
5737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
5747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 1.5);
5767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
5777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBlurFilter(3.f));
5787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateSaturateFilter(0.f));
5797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateZoomFilter(14.f, 13));
5807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
5817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
5827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5837dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendEmptyAndNonEmptySequences) {
5847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations empty;
5857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations filters;
5867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  filters.Append(FilterOperation::CreateGrayscaleFilter(0.75f));
5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  filters.Append(FilterOperation::CreateBrightnessFilter(2.f));
5897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  filters.Append(FilterOperation::CreateHueRotateFilter(10.0f));
5907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations blended = empty.Blend(filters, -0.75);
5927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations expected;
5937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(1.f));
5947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(2.75f));
5957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(17.5f));
5967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
5977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = empty.Blend(filters, 0.75);
5997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
6007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(0.1875f));
6017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(1.25f));
6027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(2.5f));
6037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
6047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = empty.Blend(filters, 1.5);
6067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
6077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(0.f));
6087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(0.5f));
6097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(-5.f));
6107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
6117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = filters.Blend(empty, -0.75);
6137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
6147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(0.f));
6157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(0.25f));
6167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(-7.5f));
6177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
6187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = filters.Blend(empty, 0.75);
6207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
6217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(0.5625f));
6227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(1.75f));
6237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(7.5f));
6247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
6257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = filters.Blend(empty, 1.5);
6277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Clear();
6287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateGrayscaleFilter(1.f));
6297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateBrightnessFilter(2.5f));
6307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  expected.Append(FilterOperation::CreateHueRotateFilter(15.f));
6317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, expected);
6327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
6337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6347dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendEmptySequences) {
6357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations empty;
6367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations blended = empty.Blend(empty, -0.75);
6387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, empty);
6397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = empty.Blend(empty, 0.75);
6417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, empty);
6427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = empty.Blend(empty, 1.5);
6447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(blended, empty);
6457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
6467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Tests blending non-empty sequences that have non-matching operations.
6487dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(FilterOperationsTest, BlendNonMatchingSequences) {
6497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations from;
6507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations to;
6517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  from.Append(FilterOperation::CreateSaturateFilter(3.f));
6537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  from.Append(FilterOperation::CreateBlurFilter(2.f));
6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  to.Append(FilterOperation::CreateSaturateFilter(4.f));
655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  to.Append(FilterOperation::CreateHueRotateFilter(0.5f));
6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FilterOperations blended = to.Blend(from, -0.75);
6587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
6597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 0.75);
6607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
6617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 1.5);
6627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
6647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Tests blending non-empty sequences of different sizes.
666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(FilterOperationsTest, BlendRaggedSequences) {
667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FilterOperations from;
668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FilterOperations to;
669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  from.Append(FilterOperation::CreateSaturateFilter(3.f));
671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  from.Append(FilterOperation::CreateBlurFilter(2.f));
672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  to.Append(FilterOperation::CreateSaturateFilter(4.f));
673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FilterOperations blended = to.Blend(from, -0.75);
675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FilterOperations expected;
676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateSaturateFilter(2.25f));
677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateBlurFilter(3.5f));
678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(expected, blended);
679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blended = to.Blend(from, 0.75);
681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Clear();
682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateSaturateFilter(3.75f));
683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateBlurFilter(0.5f));
684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(expected, blended);
685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blended = to.Blend(from, 1.5);
687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Clear();
688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateSaturateFilter(4.5f));
689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  expected.Append(FilterOperation::CreateBlurFilter(0.f));
690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(expected, blended);
691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  from.Append(FilterOperation::CreateOpacityFilter(1.f));
693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  to.Append(FilterOperation::CreateOpacityFilter(1.f));
6947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, -0.75);
6957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
6967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 0.75);
6977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
6987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  blended = to.Blend(from, 1.5);
6997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_EQ(to, blended);
7007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
7017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
702eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace
703eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace cc
704