blob: e6a2b02e0308e4de76e5b5e86924be3051ee2191 [file] [log] [blame]
// 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