| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/display_list/dl_paint.h" |
| |
| #include "flutter/display_list/utils/dl_comparable.h" |
| #include "gtest/gtest.h" |
| |
| namespace flutter { |
| namespace testing { |
| |
| TEST(DisplayListPaint, ConstructorDefaults) { |
| DlPaint paint; |
| EXPECT_FALSE(paint.isAntiAlias()); |
| EXPECT_FALSE(paint.isInvertColors()); |
| EXPECT_EQ(paint.getColor(), DlPaint::kDefaultColor); |
| EXPECT_EQ(paint.getAlpha(), 0xFF); |
| EXPECT_EQ(paint.getBlendMode(), DlBlendMode::kDefaultMode); |
| EXPECT_EQ(paint.getDrawStyle(), DlDrawStyle::kDefaultStyle); |
| EXPECT_EQ(paint.getStrokeCap(), DlStrokeCap::kDefaultCap); |
| EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kDefaultJoin); |
| EXPECT_EQ(paint.getStrokeWidth(), DlPaint::kDefaultWidth); |
| EXPECT_EQ(paint.getStrokeMiter(), DlPaint::kDefaultMiter); |
| EXPECT_EQ(paint.getColorSource(), nullptr); |
| EXPECT_EQ(paint.getColorFilter(), nullptr); |
| EXPECT_EQ(paint.getImageFilter(), nullptr); |
| EXPECT_EQ(paint.getMaskFilter(), nullptr); |
| EXPECT_EQ(paint.getPathEffect(), nullptr); |
| EXPECT_TRUE(paint.isDefault()); |
| EXPECT_EQ(paint, DlPaint::kDefault); |
| |
| EXPECT_EQ(DlBlendMode::kDefaultMode, DlBlendMode::kSrcOver); |
| EXPECT_EQ(DlDrawStyle::kDefaultStyle, DlDrawStyle::kFill); |
| EXPECT_EQ(DlStrokeCap::kDefaultCap, DlStrokeCap::kButt); |
| EXPECT_EQ(DlStrokeJoin::kDefaultJoin, DlStrokeJoin::kMiter); |
| |
| EXPECT_EQ(DlPaint::kDefaultColor, DlColor::kBlack()); |
| EXPECT_EQ(DlPaint::kDefaultWidth, 0.0); |
| EXPECT_EQ(DlPaint::kDefaultMiter, 4.0); |
| |
| EXPECT_EQ(paint, DlPaint()); |
| EXPECT_EQ(paint, DlPaint(DlColor::kBlack())); |
| EXPECT_EQ(paint, DlPaint(DlColor(0xFF000000))); |
| |
| EXPECT_NE(paint, DlPaint().setAntiAlias(true)); |
| EXPECT_NE(paint, DlPaint().setInvertColors(true)); |
| EXPECT_NE(paint, DlPaint().setColor(DlColor::kGreen())); |
| EXPECT_NE(paint, DlPaint(DlColor::kGreen())); |
| EXPECT_NE(paint, DlPaint(DlColor(0xFF00FF00))); |
| EXPECT_NE(paint, DlPaint().setAlpha(0x7f)); |
| EXPECT_NE(paint, DlPaint().setBlendMode(DlBlendMode::kDstIn)); |
| EXPECT_NE(paint, DlPaint().setDrawStyle(DlDrawStyle::kStrokeAndFill)); |
| EXPECT_NE(paint, DlPaint().setStrokeCap(DlStrokeCap::kRound)); |
| EXPECT_NE(paint, DlPaint().setStrokeJoin(DlStrokeJoin::kRound)); |
| EXPECT_NE(paint, DlPaint().setStrokeWidth(6)); |
| EXPECT_NE(paint, DlPaint().setStrokeMiter(7)); |
| |
| DlColorColorSource color_source(DlColor::kMagenta()); |
| EXPECT_NE(paint, DlPaint().setColorSource(color_source.shared())); |
| |
| DlBlendColorFilter color_filter(DlColor::kYellow(), DlBlendMode::kDstIn); |
| EXPECT_NE(paint, DlPaint().setColorFilter(color_filter.shared())); |
| |
| DlBlurImageFilter image_filter(1.3, 4.7, DlTileMode::kClamp); |
| EXPECT_NE(paint, DlPaint().setImageFilter(image_filter.shared())); |
| |
| DlBlurMaskFilter mask_filter(DlBlurStyle::kInner, 3.14); |
| EXPECT_NE(paint, DlPaint().setMaskFilter(mask_filter.shared())); |
| |
| SkScalar intervals[] = {1.0f, 2.0f}; |
| auto path_effect = DlDashPathEffect::Make(intervals, 2, 0.0f); |
| EXPECT_NE(paint, DlPaint().setPathEffect(path_effect.get())); |
| } |
| |
| TEST(DisplayListPaint, NullPointerSetGet) { |
| DlColorSource* null_color_source = nullptr; |
| DlColorFilter* null_color_filter = nullptr; |
| DlImageFilter* null_image_filter = nullptr; |
| DlMaskFilter* null_mask_filter = nullptr; |
| DlPathEffect* null_path_effect = nullptr; |
| DlPaint paint; |
| EXPECT_EQ(paint.setColorSource(null_color_source).getColorSource(), nullptr); |
| EXPECT_EQ(paint.setColorFilter(null_color_filter).getColorFilter(), nullptr); |
| EXPECT_EQ(paint.setImageFilter(null_image_filter).getImageFilter(), nullptr); |
| EXPECT_EQ(paint.setMaskFilter(null_mask_filter).getMaskFilter(), nullptr); |
| EXPECT_EQ(paint.setPathEffect(null_path_effect).getPathEffect(), nullptr); |
| } |
| |
| TEST(DisplayListPaint, NullSharedPointerSetGet) { |
| std::shared_ptr<DlColorSource> null_color_source; |
| std::shared_ptr<DlColorFilter> null_color_filter; |
| std::shared_ptr<DlImageFilter> null_image_filter; |
| std::shared_ptr<DlMaskFilter> null_mask_filter; |
| std::shared_ptr<DlPathEffect> null_path_effect; |
| DlPaint paint; |
| EXPECT_EQ(paint.setColorSource(null_color_source).getColorSource(), nullptr); |
| EXPECT_EQ(paint.setColorFilter(null_color_filter).getColorFilter(), nullptr); |
| EXPECT_EQ(paint.setImageFilter(null_image_filter).getImageFilter(), nullptr); |
| EXPECT_EQ(paint.setMaskFilter(null_mask_filter).getMaskFilter(), nullptr); |
| EXPECT_EQ(paint.setPathEffect(null_path_effect).getPathEffect(), nullptr); |
| } |
| |
| TEST(DisplayListPaint, ChainingConstructor) { |
| SkScalar intervals[] = {1.0f, 2.0f}; |
| auto path_effect = DlDashPathEffect::Make(intervals, 2, 0.0f); |
| |
| DlPaint paint = |
| DlPaint() // |
| .setAntiAlias(true) // |
| .setInvertColors(true) // |
| .setColor(DlColor::kGreen()) // |
| .setAlpha(0x7F) // |
| .setBlendMode(DlBlendMode::kLuminosity) // |
| .setDrawStyle(DlDrawStyle::kStrokeAndFill) // |
| .setStrokeCap(DlStrokeCap::kSquare) // |
| .setStrokeJoin(DlStrokeJoin::kBevel) // |
| .setStrokeWidth(42) // |
| .setStrokeMiter(1.5) // |
| .setColorSource(DlColorColorSource(DlColor::kMagenta()).shared()) // |
| .setColorFilter( |
| DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn) |
| .shared()) |
| .setImageFilter( |
| DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp).shared()) |
| .setMaskFilter(DlBlurMaskFilter(DlBlurStyle::kInner, 3.14).shared()) |
| .setPathEffect(path_effect); |
| EXPECT_TRUE(paint.isAntiAlias()); |
| EXPECT_TRUE(paint.isInvertColors()); |
| EXPECT_EQ(paint.getColor(), DlColor::kGreen().withAlpha(0x7F)); |
| EXPECT_EQ(paint.getAlpha(), 0x7F); |
| EXPECT_EQ(paint.getBlendMode(), DlBlendMode::kLuminosity); |
| EXPECT_EQ(paint.getDrawStyle(), DlDrawStyle::kStrokeAndFill); |
| EXPECT_EQ(paint.getStrokeCap(), DlStrokeCap::kSquare); |
| EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kBevel); |
| EXPECT_EQ(paint.getStrokeWidth(), 42); |
| EXPECT_EQ(paint.getStrokeMiter(), 1.5); |
| EXPECT_EQ(*paint.getColorSource(), DlColorColorSource(DlColor::kMagenta())); |
| EXPECT_EQ(*paint.getColorFilter(), |
| DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn)); |
| EXPECT_EQ(*paint.getImageFilter(), |
| DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp)); |
| EXPECT_EQ(*paint.getMaskFilter(), |
| DlBlurMaskFilter(DlBlurStyle::kInner, 3.14)); |
| EXPECT_EQ(*paint.getPathEffect(), *path_effect); |
| |
| EXPECT_NE(paint, DlPaint()); |
| } |
| |
| } // namespace testing |
| } // namespace flutter |