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