| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "config.h" | |
| 6 #include "core/rendering/TextPainter.h" | |
| 7 | |
| 8 #include "core/CSSPropertyNames.h" | |
| 9 #include "core/CSSValueKeywords.h" | |
| 10 #include "core/css/CSSPrimitiveValue.h" | |
| 11 #include "core/frame/Settings.h" | |
| 12 #include "core/rendering/RenderText.h" | |
| 13 #include "core/rendering/RenderingTestHelper.h" | |
| 14 #include "core/rendering/style/ShadowData.h" | |
| 15 #include "core/rendering/style/ShadowList.h" | |
| 16 #include <gtest/gtest.h> | |
| 17 | |
| 18 namespace blink { | |
| 19 namespace { | |
| 20 | |
| 21 class TextPainterTest : public RenderingTest { | |
| 22 public: | |
| 23 TextPainterTest() : m_renderText(nullptr) { } | |
| 24 | |
| 25 protected: | |
| 26 RenderText* renderText() { return m_renderText; } | |
| 27 | |
| 28 private: | |
| 29 virtual void SetUp() override | |
| 30 { | |
| 31 RenderingTest::SetUp(); | |
| 32 setBodyInnerHTML("Hello world"); | |
| 33 m_renderText = toRenderText(document().body()->firstChild()->renderer())
; | |
| 34 ASSERT_TRUE(m_renderText); | |
| 35 ASSERT_EQ("Hello world", m_renderText->text()); | |
| 36 } | |
| 37 | |
| 38 RenderText* m_renderText; | |
| 39 }; | |
| 40 | |
| 41 TEST_F(TextPainterTest, TextPaintingStyle_Simple) | |
| 42 { | |
| 43 document().body()->setInlineStyleProperty(CSSPropertyColor, CSSValueBlue); | |
| 44 document().view()->updateLayoutAndStyleIfNeededRecursive(); | |
| 45 | |
| 46 TextPainter::Style textStyle = TextPainter::textPaintingStyle( | |
| 47 *renderText(), renderText()->style(), false /* forceBlackText */, false
/* isPrinting */); | |
| 48 EXPECT_EQ(Color(0, 0, 255), textStyle.fillColor); | |
| 49 EXPECT_EQ(Color(0, 0, 255), textStyle.strokeColor); | |
| 50 EXPECT_EQ(Color(0, 0, 255), textStyle.emphasisMarkColor); | |
| 51 EXPECT_EQ(0, textStyle.strokeWidth); | |
| 52 EXPECT_EQ(nullptr, textStyle.shadow); | |
| 53 } | |
| 54 | |
| 55 TEST_F(TextPainterTest, TextPaintingStyle_AllProperties) | |
| 56 { | |
| 57 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextFillColor, CS
SValueRed); | |
| 58 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeColor,
CSSValueLime); | |
| 59 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextEmphasisColor
, CSSValueBlue); | |
| 60 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeWidth,
4, CSSPrimitiveValue::CSS_PX); | |
| 61 document().body()->setInlineStyleProperty(CSSPropertyTextShadow, "1px 2px 3p
x yellow"); | |
| 62 document().view()->updateLayoutAndStyleIfNeededRecursive(); | |
| 63 | |
| 64 TextPainter::Style textStyle = TextPainter::textPaintingStyle( | |
| 65 *renderText(), renderText()->style(), false /* forceBlackText */, false
/* isPrinting */); | |
| 66 EXPECT_EQ(Color(255, 0, 0), textStyle.fillColor); | |
| 67 EXPECT_EQ(Color(0, 255, 0), textStyle.strokeColor); | |
| 68 EXPECT_EQ(Color(0, 0, 255), textStyle.emphasisMarkColor); | |
| 69 EXPECT_EQ(4, textStyle.strokeWidth); | |
| 70 ASSERT_NE(nullptr, textStyle.shadow); | |
| 71 EXPECT_EQ(1u, textStyle.shadow->shadows().size()); | |
| 72 EXPECT_EQ(1, textStyle.shadow->shadows()[0].x()); | |
| 73 EXPECT_EQ(2, textStyle.shadow->shadows()[0].y()); | |
| 74 EXPECT_EQ(3, textStyle.shadow->shadows()[0].blur()); | |
| 75 EXPECT_EQ(Color(255, 255, 0), textStyle.shadow->shadows()[0].color()); | |
| 76 } | |
| 77 | |
| 78 TEST_F(TextPainterTest, TextPaintingStyle_ForceBlackText) | |
| 79 { | |
| 80 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextFillColor, CS
SValueRed); | |
| 81 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeColor,
CSSValueLime); | |
| 82 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextEmphasisColor
, CSSValueBlue); | |
| 83 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeWidth,
4, CSSPrimitiveValue::CSS_PX); | |
| 84 document().body()->setInlineStyleProperty(CSSPropertyTextShadow, "1px 2px 3p
x yellow"); | |
| 85 document().view()->updateLayoutAndStyleIfNeededRecursive(); | |
| 86 | |
| 87 TextPainter::Style textStyle = TextPainter::textPaintingStyle( | |
| 88 *renderText(), renderText()->style(), true /* forceBlackText */, false /
* isPrinting */); | |
| 89 EXPECT_EQ(Color::black, textStyle.fillColor); | |
| 90 EXPECT_EQ(Color::black, textStyle.strokeColor); | |
| 91 EXPECT_EQ(Color::black, textStyle.emphasisMarkColor); | |
| 92 EXPECT_EQ(4, textStyle.strokeWidth); | |
| 93 EXPECT_EQ(nullptr, textStyle.shadow); | |
| 94 } | |
| 95 | |
| 96 TEST_F(TextPainterTest, TextPaintingStyle_ForceBackgroundToWhite_NoAdjustmentNee
ded) | |
| 97 { | |
| 98 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextFillColor, CS
SValueRed); | |
| 99 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeColor,
CSSValueLime); | |
| 100 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextEmphasisColor
, CSSValueBlue); | |
| 101 document().body()->setInlineStyleProperty(CSSPropertyWebkitPrintColorAdjust,
CSSValueEconomy); | |
| 102 document().settings()->setShouldPrintBackgrounds(false); | |
| 103 document().view()->updateLayoutAndStyleIfNeededRecursive(); | |
| 104 | |
| 105 TextPainter::Style textStyle = TextPainter::textPaintingStyle( | |
| 106 *renderText(), renderText()->style(), false /* forceBlackText */, true /
* isPrinting */); | |
| 107 EXPECT_EQ(Color(255, 0, 0), textStyle.fillColor); | |
| 108 EXPECT_EQ(Color(0, 255, 0), textStyle.strokeColor); | |
| 109 EXPECT_EQ(Color(0, 0, 255), textStyle.emphasisMarkColor); | |
| 110 } | |
| 111 | |
| 112 TEST_F(TextPainterTest, TextPaintingStyle_ForceBackgroundToWhite_Darkened) | |
| 113 { | |
| 114 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextFillColor, "r
gb(255, 220, 220)"); | |
| 115 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextStrokeColor,
"rgb(220, 255, 220)"); | |
| 116 document().body()->setInlineStyleProperty(CSSPropertyWebkitTextEmphasisColor
, "rgb(220, 220, 255)"); | |
| 117 document().body()->setInlineStyleProperty(CSSPropertyWebkitPrintColorAdjust,
CSSValueEconomy); | |
| 118 document().settings()->setShouldPrintBackgrounds(false); | |
| 119 document().view()->updateLayoutAndStyleIfNeededRecursive(); | |
| 120 | |
| 121 TextPainter::Style textStyle = TextPainter::textPaintingStyle( | |
| 122 *renderText(), renderText()->style(), false /* forceBlackText */, true /
* isPrinting */); | |
| 123 EXPECT_EQ(Color(255, 220, 220).dark(), textStyle.fillColor); | |
| 124 EXPECT_EQ(Color(220, 255, 220).dark(), textStyle.strokeColor); | |
| 125 EXPECT_EQ(Color(220, 220, 255).dark(), textStyle.emphasisMarkColor); | |
| 126 } | |
| 127 | |
| 128 } // namespace | |
| 129 } // namespace blink | |
| OLD | NEW |