1 // Copyright 2013 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 "printing/printing_utils.h"
6 
7 #include <stddef.h>
8 
9 #include <limits>
10 #include <string>
11 
12 #include "base/strings/utf_string_conversions.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "ui/gfx/geometry/size.h"
15 
16 namespace printing {
17 
18 namespace {
19 
20 constexpr size_t kTestLength = 8;
21 constexpr gfx::Size kIsoA4Microns(210000, 297000);
22 constexpr gfx::Size kNaLetterMicrons(216000, 279000);
23 
Simplify(const std::string & title)24 std::string Simplify(const std::string& title) {
25   return base::UTF16ToUTF8(
26       SimplifyDocumentTitleWithLength(base::UTF8ToUTF16(title), kTestLength));
27 }
28 
Format(const std::string & owner,const std::string & title)29 std::string Format(const std::string& owner, const std::string& title) {
30   return base::UTF16ToUTF8(FormatDocumentTitleWithOwnerAndLength(
31       base::UTF8ToUTF16(owner), base::UTF8ToUTF16(title), kTestLength));
32 }
33 
34 }  // namespace
35 
TEST(PrintingUtilsTest,SimplifyDocumentTitle)36 TEST(PrintingUtilsTest, SimplifyDocumentTitle) {
37   EXPECT_EQ("", Simplify(""));
38   EXPECT_EQ("abcdefgh", Simplify("abcdefgh"));
39   EXPECT_EQ("abc...ij", Simplify("abcdefghij"));
40   EXPECT_EQ("Controls", Simplify("C\ron\nt\15rols"));
41   EXPECT_EQ("C__foo_", Simplify("C:\\foo\\"));
42   EXPECT_EQ("C__foo_", Simplify("C:/foo/"));
43   EXPECT_EQ("a_b_c", Simplify("a<b\"c"));
44   EXPECT_EQ("d_e_f_", Simplify("d*e?f~"));
45   EXPECT_EQ("", Simplify("\n\r\n\r\t\r"));
46 }
47 
TEST(PrintingUtilsTest,FormatDocumentTitleWithOwner)48 TEST(PrintingUtilsTest, FormatDocumentTitleWithOwner) {
49   EXPECT_EQ(": ", Format("", ""));
50   EXPECT_EQ("abc: ", Format("abc", ""));
51   EXPECT_EQ(": 123", Format("", "123"));
52   EXPECT_EQ("abc: 123", Format("abc", "123"));
53   EXPECT_EQ("abc: 0.9", Format("abc", "0123456789"));
54   EXPECT_EQ("ab...j: ", Format("abcdefghij", "123"));
55   EXPECT_EQ("xyz: _.o", Format("xyz", "\\f\\oo"));
56   EXPECT_EQ("ab...j: ", Format("abcdefghij", "0123456789"));
57 }
58 
TEST(PrintingUtilsTest,GetDefaultPaperSizeFromLocaleMicrons)59 TEST(PrintingUtilsTest, GetDefaultPaperSizeFromLocaleMicrons) {
60   // Valid locales
61   EXPECT_EQ(kNaLetterMicrons, GetDefaultPaperSizeFromLocaleMicrons("en-US"));
62   EXPECT_EQ(kNaLetterMicrons, GetDefaultPaperSizeFromLocaleMicrons("en_US"));
63   EXPECT_EQ(kNaLetterMicrons, GetDefaultPaperSizeFromLocaleMicrons("fr-CA"));
64   EXPECT_EQ(kNaLetterMicrons, GetDefaultPaperSizeFromLocaleMicrons("es-CL"));
65   EXPECT_EQ(kIsoA4Microns, GetDefaultPaperSizeFromLocaleMicrons("en_UK"));
66   EXPECT_EQ(kIsoA4Microns, GetDefaultPaperSizeFromLocaleMicrons("fa-IR"));
67 
68   // Empty locale
69   EXPECT_EQ(kIsoA4Microns, GetDefaultPaperSizeFromLocaleMicrons(""));
70 
71   // Non-existing locale
72   EXPECT_EQ(kIsoA4Microns,
73             GetDefaultPaperSizeFromLocaleMicrons("locale-does-not-exist"));
74 }
75 
TEST(PrintingUtilsTest,SizesEqualWithinEpsilon)76 TEST(PrintingUtilsTest, SizesEqualWithinEpsilon) {
77   constexpr int kMaxInt = std::numeric_limits<int>::max();
78 
79   // Large sizes
80   EXPECT_TRUE(SizesEqualWithinEpsilon(gfx::Size(kMaxInt, kMaxInt),
81                                       gfx::Size(kMaxInt - 1, kMaxInt - 1), 1));
82   EXPECT_FALSE(SizesEqualWithinEpsilon(gfx::Size(kMaxInt, kMaxInt),
83                                        gfx::Size(kMaxInt - 1, kMaxInt - 2), 1));
84   EXPECT_TRUE(SizesEqualWithinEpsilon(gfx::Size(kMaxInt, kMaxInt),
85                                       gfx::Size(0, 0), kMaxInt));
86   EXPECT_FALSE(SizesEqualWithinEpsilon(gfx::Size(kMaxInt, kMaxInt),
87                                        gfx::Size(0, 0), kMaxInt - 1));
88 
89   // Empty sizes
90   EXPECT_TRUE(SizesEqualWithinEpsilon(gfx::Size(0, 0), gfx::Size(0, 0), 0));
91   EXPECT_TRUE(SizesEqualWithinEpsilon(gfx::Size(1, 0), gfx::Size(0, 2), 0));
92   EXPECT_TRUE(SizesEqualWithinEpsilon(gfx::Size(1, -2), gfx::Size(-1, 2), 0));
93 
94   // Common paper sizes
95   EXPECT_FALSE(SizesEqualWithinEpsilon(kNaLetterMicrons, kIsoA4Microns, 1000));
96   EXPECT_TRUE(SizesEqualWithinEpsilon(kNaLetterMicrons,
97                                       gfx::Size(215900, 279400), 500));
98   EXPECT_TRUE(
99       SizesEqualWithinEpsilon(kIsoA4Microns, gfx::Size(210500, 296500), 500));
100 }
101 
102 }  // namespace printing
103