blob: f60be84782e83130a34f20bae85a1a030b712912 [file] [log] [blame]
// Copyright 2016 The Chromium 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 "core/layout/LayoutObject.h"
#include "core/layout/LayoutTestHelper.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
class TextAutosizerTest : public RenderingTest {
private:
void SetUp() override {
RenderingTest::SetUp();
document().settings()->setTextAutosizingEnabled(true);
document().settings()->setTextAutosizingWindowSizeOverride(
IntSize(320, 480));
}
};
TEST_F(TextAutosizerTest, SimpleParagraph) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// (specified font-size = 16px) * (viewport width = 800px) /
// (window width = 320px) = 40px.
EXPECT_FLOAT_EQ(40.f, autosized->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, TextSizeAdjustDisablesAutosizing) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjustAuto' style='text-size-adjust: auto;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>"
"<div id='textSizeAdjustNone' style='text-size-adjust: none;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>"
"<div id='textSizeAdjust100' style='text-size-adjust: 100%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
LayoutObject* textSizeAdjustAuto =
document().getElementById("textSizeAdjustAuto")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustAuto->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(40.f, textSizeAdjustAuto->style()->computedFontSize());
LayoutObject* textSizeAdjustNone =
document().getElementById("textSizeAdjustNone")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustNone->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(16.f, textSizeAdjustNone->style()->computedFontSize());
LayoutObject* textSizeAdjust100 =
document().getElementById("textSizeAdjust100")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjust100->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(16.f, textSizeAdjust100->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ParagraphWithChangingTextSizeAdjustment) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" .none { text-size-adjust: none; }"
" .small { text-size-adjust: 50%; }"
" .large { text-size-adjust: 150%; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* autosizedDiv = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(40.f,
autosizedDiv->layoutObject()->style()->computedFontSize());
autosizedDiv->setAttribute(HTMLNames::classAttr, "none");
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->computedFontSize());
autosizedDiv->setAttribute(HTMLNames::classAttr, "small");
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(8.f,
autosizedDiv->layoutObject()->style()->computedFontSize());
autosizedDiv->setAttribute(HTMLNames::classAttr, "large");
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(24.f,
autosizedDiv->layoutObject()->style()->computedFontSize());
autosizedDiv->removeAttribute(HTMLNames::classAttr);
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(16.f,
autosizedDiv->layoutObject()->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(40.f,
autosizedDiv->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ZeroTextSizeAdjustment) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjustZero' style='text-size-adjust: 0%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
LayoutObject* textSizeAdjustZero =
document().getElementById("textSizeAdjustZero")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustZero->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(0.f, textSizeAdjustZero->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, NegativeTextSizeAdjustment) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
// Negative values should be treated as auto.
"<div id='textSizeAdjustNegative' style='text-size-adjust: -10%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
LayoutObject* textSizeAdjustNegative =
document().getElementById("textSizeAdjustNegative")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustNegative->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(40.f, textSizeAdjustNegative->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, TextSizeAdjustmentPixelUnits) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
// Non-percentage values should be treated as auto.
"<div id='textSizeAdjustPixels' style='text-size-adjust: 0.1px;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
LayoutObject* textSizeAdjustPixels =
document().getElementById("textSizeAdjustPixels")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustPixels->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(40.f, textSizeAdjustPixels->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, NestedTextSizeAdjust) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjustA' style='text-size-adjust: 47%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
" <div id='textSizeAdjustB' style='text-size-adjust: 53%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
" </div>"
"</div>");
LayoutObject* textSizeAdjustA =
document().getElementById("textSizeAdjustA")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustA->style()->specifiedFontSize());
// 16px * 47% = 7.52
EXPECT_FLOAT_EQ(7.52f, textSizeAdjustA->style()->computedFontSize());
LayoutObject* textSizeAdjustB =
document().getElementById("textSizeAdjustB")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjustB->style()->specifiedFontSize());
// 16px * 53% = 8.48
EXPECT_FLOAT_EQ(8.48f, textSizeAdjustB->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, PrefixedTextSizeAdjustIsAlias) {
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjust' style='-webkit-text-size-adjust: 50%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
LayoutObject* textSizeAdjust =
document().getElementById("textSizeAdjust")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjust->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(8.f, textSizeAdjust->style()->computedFontSize());
EXPECT_FLOAT_EQ(.5f,
textSizeAdjust->style()->getTextSizeAdjust().multiplier());
}
TEST_F(TextAutosizerTest, AccessibilityFontScaleFactor) {
document().settings()->setAccessibilityFontScaleFactor(1.5);
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// 1.5 * (specified font-size = 16px) * (viewport width = 800px) /
// (window width = 320px) = 60px.
EXPECT_FLOAT_EQ(60.f, autosized->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, AccessibilityFontScaleFactorWithTextSizeAdjustNone) {
document().settings()->setAccessibilityFontScaleFactor(1.5);
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" #autosized { width: 400px; text-size-adjust: 100%; }"
" #notAutosized { width: 100px; text-size-adjust: 100%; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>"
"<div id='notAutosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// 1.5 * (specified font-size = 16px) = 24px.
EXPECT_FLOAT_EQ(24.f, autosized->layoutObject()->style()->computedFontSize());
// Because this does not autosize (due to the width), no accessibility font
// scale factor should be applied.
Element* notAutosized = document().getElementById("notAutosized");
EXPECT_FLOAT_EQ(16.f,
notAutosized->layoutObject()->style()->specifiedFontSize());
// specified font-size = 16px.
EXPECT_FLOAT_EQ(16.f,
notAutosized->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ChangingAccessibilityFontScaleFactor) {
document().settings()->setAccessibilityFontScaleFactor(1);
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// 1.0 * (specified font-size = 16px) * (viewport width = 800px) /
// (window width = 320px) = 40px.
EXPECT_FLOAT_EQ(40.f, autosized->layoutObject()->style()->computedFontSize());
document().settings()->setAccessibilityFontScaleFactor(2);
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// 2.0 * (specified font-size = 16px) * (viewport width = 800px) /
// (window width = 320px) = 80px.
EXPECT_FLOAT_EQ(80.f, autosized->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, TextSizeAdjustDoesNotDisableAccessibility) {
document().settings()->setAccessibilityFontScaleFactor(1.5);
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjustNone' style='text-size-adjust: none;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>"
"<div id='textSizeAdjustDouble' style='text-size-adjust: 200%;'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
Element* textSizeAdjustNone = document().getElementById("textSizeAdjustNone");
EXPECT_FLOAT_EQ(
16.f, textSizeAdjustNone->layoutObject()->style()->specifiedFontSize());
// 1.5 * (specified font-size = 16px) = 24px.
EXPECT_FLOAT_EQ(
24.f, textSizeAdjustNone->layoutObject()->style()->computedFontSize());
Element* textSizeAdjustDouble =
document().getElementById("textSizeAdjustDouble");
EXPECT_FLOAT_EQ(
16.f, textSizeAdjustDouble->layoutObject()->style()->specifiedFontSize());
// 1.5 * (specified font-size = 16px) * (text size adjustment = 2) = 48px.
EXPECT_FLOAT_EQ(
48.f, textSizeAdjustDouble->layoutObject()->style()->computedFontSize());
// Changing the accessibility font scale factor should change the adjusted
// size.
document().settings()->setAccessibilityFontScaleFactor(2);
document().view()->updateAllLifecyclePhases();
EXPECT_FLOAT_EQ(
16.f, textSizeAdjustNone->layoutObject()->style()->specifiedFontSize());
// 2.0 * (specified font-size = 16px) = 32px.
EXPECT_FLOAT_EQ(
32.f, textSizeAdjustNone->layoutObject()->style()->computedFontSize());
EXPECT_FLOAT_EQ(
16.f, textSizeAdjustDouble->layoutObject()->style()->specifiedFontSize());
// 2.0 * (specified font-size = 16px) * (text size adjustment = 2) = 64px.
EXPECT_FLOAT_EQ(
64.f, textSizeAdjustDouble->layoutObject()->style()->computedFontSize());
}
// https://crbug.com/646237
TEST_F(TextAutosizerTest, DISABLED_TextSizeAdjustWithoutNeedingAutosizing) {
document().settings()->setTextAutosizingWindowSizeOverride(IntSize(800, 600));
setBodyInnerHTML(
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='textSizeAdjust' style='text-size-adjust: 150%;'>"
" Text"
"</div>");
LayoutObject* textSizeAdjust =
document().getElementById("textSizeAdjust")->layoutObject();
EXPECT_FLOAT_EQ(16.f, textSizeAdjust->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(24.f, textSizeAdjust->style()->computedFontSize());
EXPECT_FLOAT_EQ(1.5f,
textSizeAdjust->style()->getTextSizeAdjust().multiplier());
}
TEST_F(TextAutosizerTest, DeviceScaleAdjustmentWithViewport) {
setBodyInnerHTML(
"<meta name='viewport' content='width=800'>"
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
"</style>"
"<div id='autosized'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
" eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim"
" ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut"
" aliquip ex ea commodo consequat. Duis aute irure dolor in"
" reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla"
" pariatur. Excepteur sint occaecat cupidatat non proident, sunt in"
" culpa qui officia deserunt mollit anim id est laborum."
"</div>");
document().settings()->setViewportMetaEnabled(true);
document().settings()->setDeviceScaleAdjustment(1.5f);
document().view()->updateAllLifecyclePhases();
Element* autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// (specified font-size = 16px) * (viewport width = 800px) /
// (window width = 320px) = 40px.
// The device scale adjustment of 1.5 is ignored.
EXPECT_FLOAT_EQ(40.f, autosized->layoutObject()->style()->computedFontSize());
document().settings()->setViewportMetaEnabled(false);
document().view()->updateAllLifecyclePhases();
autosized = document().getElementById("autosized");
EXPECT_FLOAT_EQ(16.f,
autosized->layoutObject()->style()->specifiedFontSize());
// (device scale adjustment = 1.5) * (specified font-size = 16px) *
// (viewport width = 800px) / (window width = 320px) = 60px.
EXPECT_FLOAT_EQ(60.f, autosized->layoutObject()->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ChangingSuperClusterFirstText) {
setBodyInnerHTML(
"<meta name='viewport' content='width=800'>"
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" .supercluster { width:560px; }"
"</style>"
"<div class='supercluster'>"
" <div id='longText'>short blah blah</div>"
"</div>"
"<div class='supercluster'>"
" <div id='shortText'>short blah blah</div>"
"</div>");
document().view()->updateAllLifecyclePhases();
Element* longTextElement = document().getElementById("longText");
longTextElement->setInnerHTML(
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
"do eiusmod tempor"
" incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud"
" exercitation ullamco laboris nisi ut aliquip ex ea commodo "
"consequat. Duis aute irure"
" dolor in reprehenderit in voluptate velit esse cillum dolore eu "
"fugiat nulla pariatur."
" Excepteur sint occaecat cupidatat non proident, sunt in culpa "
"qui officia deserunt"
" mollit anim id est laborum.",
ASSERT_NO_EXCEPTION);
document().view()->updateAllLifecyclePhases();
LayoutObject* longText =
document().getElementById("longText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, longText->style()->specifiedFontSize());
//(specified font-size = 16px) * (block width = 560px) /
// (window width = 320px) = 28px.
EXPECT_FLOAT_EQ(28.f, longText->style()->computedFontSize());
LayoutObject* shortText =
document().getElementById("shortText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, shortText->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(28.f, shortText->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ChangingSuperClusterSecondText) {
setBodyInnerHTML(
"<meta name='viewport' content='width=800'>"
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" .supercluster { width:560px; }"
"</style>"
"<div class='supercluster'>"
" <div id='shortText'>short blah blah</div>"
"</div>"
"<div class='supercluster'>"
" <div id='longText'>short blah blah</div>"
"</div>");
document().view()->updateAllLifecyclePhases();
Element* longTextElement = document().getElementById("longText");
longTextElement->setInnerHTML(
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
"do eiusmod tempor"
" incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud"
" exercitation ullamco laboris nisi ut aliquip ex ea commodo "
"consequat. Duis aute irure"
" dolor in reprehenderit in voluptate velit esse cillum dolore eu "
"fugiat nulla pariatur."
" Excepteur sint occaecat cupidatat non proident, sunt in culpa "
"qui officia deserunt"
" mollit anim id est laborum.",
ASSERT_NO_EXCEPTION);
document().view()->updateAllLifecyclePhases();
LayoutObject* longText =
document().getElementById("longText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, longText->style()->specifiedFontSize());
//(specified font-size = 16px) * (block width = 560px) /
// (window width = 320px) = 28px.
EXPECT_FLOAT_EQ(28.f, longText->style()->computedFontSize());
LayoutObject* shortText =
document().getElementById("shortText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, shortText->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(28.f, shortText->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, AddingSuperCluster) {
setBodyInnerHTML(
"<meta name='viewport' content='width=800'>"
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" .supercluster { width:560px; }"
"</style>"
"<div>"
" <div class='supercluster' id='shortText'>"
" short blah blah"
" </div>"
"</div>"
"<div id='container'></div>");
document().view()->updateAllLifecyclePhases();
Element* container = document().getElementById("container");
container->setInnerHTML(
"<div class='supercluster' id='longText'>"
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
"do eiusmod tempor"
" incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud"
" exercitation ullamco laboris nisi ut aliquip ex ea commodo "
"consequat. Duis aute irure"
" dolor in reprehenderit in voluptate velit esse cillum dolore eu "
"fugiat nulla pariatur."
" Excepteur sint occaecat cupidatat non proident, sunt in culpa "
"qui officia deserunt"
" mollit anim id est laborum."
"</div>",
ASSERT_NO_EXCEPTION);
document().view()->updateAllLifecyclePhases();
LayoutObject* longText =
document().getElementById("longText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, longText->style()->specifiedFontSize());
//(specified font-size = 16px) * (block width = 560px) /
// (window width = 320px) = 28px.
EXPECT_FLOAT_EQ(28.f, longText->style()->computedFontSize());
LayoutObject* shortText =
document().getElementById("shortText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, shortText->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(28.f, shortText->style()->computedFontSize());
}
TEST_F(TextAutosizerTest, ChangingInheritedClusterTextInsideSuperCluster) {
setBodyInnerHTML(
"<meta name='viewport' content='width=800'>"
"<style>"
" html { font-size: 16px; }"
" body { width: 800px; margin: 0; overflow-y: hidden; }"
" .supercluster { width:560px; }"
" .cluster{width:560px;}"
"</style>"
"<div class='supercluster'>"
" <div class='cluster' id='longText'>short blah blah</div>"
"</div>"
"<div class='supercluster'>"
" <div class='cluster' id='shortText'>short blah blah</div>"
"</div>");
document().view()->updateAllLifecyclePhases();
Element* longTextElement = document().getElementById("longText");
longTextElement->setInnerHTML(
" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed "
"do eiusmod tempor"
" incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud"
" exercitation ullamco laboris nisi ut aliquip ex ea commodo "
"consequat. Duis aute irure"
" dolor in reprehenderit in voluptate velit esse cillum dolore eu "
"fugiat nulla pariatur."
" Excepteur sint occaecat cupidatat non proident, sunt in culpa "
"qui officia deserunt"
" mollit anim id est laborum.",
ASSERT_NO_EXCEPTION);
document().view()->updateAllLifecyclePhases();
LayoutObject* longText =
document().getElementById("longText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, longText->style()->specifiedFontSize());
//(specified font-size = 16px) * (block width = 560px) /
// (window width = 320px) = 28px.
EXPECT_FLOAT_EQ(28.f, longText->style()->computedFontSize());
LayoutObject* shortText =
document().getElementById("shortText")->layoutObject();
EXPECT_FLOAT_EQ(16.f, shortText->style()->specifiedFontSize());
EXPECT_FLOAT_EQ(28.f, shortText->style()->computedFontSize());
}
} // namespace blink