1 // Copyright 2017 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 "third_party/blink/renderer/core/css/cssom/css_unit_value.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/css/css_primitive_value.h"
9 
10 namespace blink {
11 namespace {
12 const float kEpsilon = 0.001f;
13 }
14 
TEST(CSSUnitValueTest,PixelToOtherUnit)15 TEST(CSSUnitValueTest, PixelToOtherUnit) {
16   CSSUnitValue* pxValue =
17       CSSUnitValue::Create(96, CSSPrimitiveValue::UnitType::kPixels);
18 
19   EXPECT_NEAR(96, pxValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
20               kEpsilon);
21   EXPECT_NEAR(2.54,
22               pxValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
23               kEpsilon);
24   EXPECT_NEAR(25.4,
25               pxValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
26               kEpsilon);
27   EXPECT_NEAR(1, pxValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
28               kEpsilon);
29   EXPECT_NEAR(72, pxValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
30               kEpsilon);
31   EXPECT_NEAR(6, pxValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
32               kEpsilon);
33   EXPECT_NEAR(
34       101.6,
35       pxValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
36       kEpsilon);
37 }
38 
TEST(CSSUnitValueTest,CentimeterToOtherUnit)39 TEST(CSSUnitValueTest, CentimeterToOtherUnit) {
40   CSSUnitValue* cmValue =
41       CSSUnitValue::Create(2.54, CSSPrimitiveValue::UnitType::kCentimeters);
42 
43   EXPECT_NEAR(96, cmValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
44               kEpsilon);
45   EXPECT_NEAR(2.54,
46               cmValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
47               kEpsilon);
48   EXPECT_NEAR(25.4,
49               cmValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
50               kEpsilon);
51   EXPECT_NEAR(1, cmValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
52               kEpsilon);
53   EXPECT_NEAR(72, cmValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
54               kEpsilon);
55   EXPECT_NEAR(6, cmValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
56               kEpsilon);
57   EXPECT_NEAR(
58       101.6,
59       cmValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
60       kEpsilon);
61 }
62 
TEST(CSSUnitValueTest,MillimeterToOtherUnit)63 TEST(CSSUnitValueTest, MillimeterToOtherUnit) {
64   CSSUnitValue* mmValue =
65       CSSUnitValue::Create(25.4, CSSPrimitiveValue::UnitType::kMillimeters);
66 
67   EXPECT_NEAR(96, mmValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
68               kEpsilon);
69   EXPECT_NEAR(2.54,
70               mmValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
71               kEpsilon);
72   EXPECT_NEAR(25.4,
73               mmValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
74               kEpsilon);
75   EXPECT_NEAR(1, mmValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
76               kEpsilon);
77   EXPECT_NEAR(72, mmValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
78               kEpsilon);
79   EXPECT_NEAR(6, mmValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
80               kEpsilon);
81   EXPECT_NEAR(
82       101.6,
83       mmValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
84       kEpsilon);
85 }
86 
TEST(CSSUnitValueTest,InchesToOtherUnit)87 TEST(CSSUnitValueTest, InchesToOtherUnit) {
88   CSSUnitValue* inValue =
89       CSSUnitValue::Create(1, CSSPrimitiveValue::UnitType::kInches);
90 
91   EXPECT_NEAR(96, inValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
92               kEpsilon);
93   EXPECT_NEAR(2.54,
94               inValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
95               kEpsilon);
96   EXPECT_NEAR(25.4,
97               inValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
98               kEpsilon);
99   EXPECT_NEAR(1, inValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
100               kEpsilon);
101   EXPECT_NEAR(72, inValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
102               kEpsilon);
103   EXPECT_NEAR(6, inValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
104               kEpsilon);
105   EXPECT_NEAR(
106       101.6,
107       inValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
108       kEpsilon);
109 }
110 
TEST(CSSUnitValueTest,PointToOtherUnit)111 TEST(CSSUnitValueTest, PointToOtherUnit) {
112   CSSUnitValue* ptValue =
113       CSSUnitValue::Create(72, CSSPrimitiveValue::UnitType::kPoints);
114 
115   EXPECT_NEAR(96, ptValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
116               kEpsilon);
117   EXPECT_NEAR(2.54,
118               ptValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
119               kEpsilon);
120   EXPECT_NEAR(25.4,
121               ptValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
122               kEpsilon);
123   EXPECT_NEAR(1, ptValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
124               kEpsilon);
125   EXPECT_NEAR(72, ptValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
126               kEpsilon);
127   EXPECT_NEAR(6, ptValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
128               kEpsilon);
129   EXPECT_NEAR(
130       101.6,
131       ptValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
132       kEpsilon);
133 }
134 
TEST(CSSUnitValueTest,PicaToOtherUnit)135 TEST(CSSUnitValueTest, PicaToOtherUnit) {
136   CSSUnitValue* pcValue =
137       CSSUnitValue::Create(6, CSSPrimitiveValue::UnitType::kPicas);
138 
139   EXPECT_NEAR(96, pcValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
140               kEpsilon);
141   EXPECT_NEAR(2.54,
142               pcValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
143               kEpsilon);
144   EXPECT_NEAR(25.4,
145               pcValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
146               kEpsilon);
147   EXPECT_NEAR(1, pcValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
148               kEpsilon);
149   EXPECT_NEAR(72, pcValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
150               kEpsilon);
151   EXPECT_NEAR(6, pcValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
152               kEpsilon);
153   EXPECT_NEAR(
154       101.6,
155       pcValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
156       kEpsilon);
157 }
158 
TEST(CSSUnitValueTest,QuarterMillimeterToOtherUnit)159 TEST(CSSUnitValueTest, QuarterMillimeterToOtherUnit) {
160   CSSUnitValue* qValue = CSSUnitValue::Create(
161       101.6, CSSPrimitiveValue::UnitType::kQuarterMillimeters);
162 
163   EXPECT_NEAR(96, qValue->to(CSSPrimitiveValue::UnitType::kPixels)->value(),
164               kEpsilon);
165   EXPECT_NEAR(2.54,
166               qValue->to(CSSPrimitiveValue::UnitType::kCentimeters)->value(),
167               kEpsilon);
168   EXPECT_NEAR(25.4,
169               qValue->to(CSSPrimitiveValue::UnitType::kMillimeters)->value(),
170               kEpsilon);
171   EXPECT_NEAR(1, qValue->to(CSSPrimitiveValue::UnitType::kInches)->value(),
172               kEpsilon);
173   EXPECT_NEAR(72, qValue->to(CSSPrimitiveValue::UnitType::kPoints)->value(),
174               kEpsilon);
175   EXPECT_NEAR(6, qValue->to(CSSPrimitiveValue::UnitType::kPicas)->value(),
176               kEpsilon);
177   EXPECT_NEAR(
178       101.6,
179       qValue->to(CSSPrimitiveValue::UnitType::kQuarterMillimeters)->value(),
180       kEpsilon);
181 }
182 
183 }  // namespace blink
184