1 // Copyright 2017 PDFium 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/fpdfapi/page/cpdf_devicecs.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
TEST(CPDF_DeviceCSTest,GetRGBFromGray)10 TEST(CPDF_DeviceCSTest, GetRGBFromGray) {
11 float R;
12 float G;
13 float B;
14 CPDF_DeviceCS device_gray(PDFCS_DEVICEGRAY);
15
16 // Test normal values. For gray, only first value from buf should be used.
17 float buf[3] = {0.43f, 0.11f, 0.34f};
18 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
19 EXPECT_FLOAT_EQ(0.43f, R);
20 EXPECT_FLOAT_EQ(0.43f, G);
21 EXPECT_FLOAT_EQ(0.43f, B);
22 buf[0] = 0.872f;
23 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
24 EXPECT_FLOAT_EQ(0.872f, R);
25 EXPECT_FLOAT_EQ(0.872f, G);
26 EXPECT_FLOAT_EQ(0.872f, B);
27
28 // Test boundary values
29 buf[0] = {0.0f};
30 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
31 EXPECT_FLOAT_EQ(0.0f, R);
32 EXPECT_FLOAT_EQ(0.0f, G);
33 EXPECT_FLOAT_EQ(0.0f, B);
34 buf[0] = 1.0f;
35 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
36 EXPECT_FLOAT_EQ(1.0f, R);
37 EXPECT_FLOAT_EQ(1.0f, G);
38 EXPECT_FLOAT_EQ(1.0f, B);
39
40 // Test out of range values
41 buf[0] = -0.01f;
42 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
43 EXPECT_FLOAT_EQ(0.0f, R);
44 EXPECT_FLOAT_EQ(0.0f, G);
45 EXPECT_FLOAT_EQ(0.0f, B);
46 buf[0] = 12.5f;
47 ASSERT_TRUE(device_gray.GetRGB(buf, &R, &G, &B));
48 EXPECT_FLOAT_EQ(1.0f, R);
49 EXPECT_FLOAT_EQ(1.0f, G);
50 EXPECT_FLOAT_EQ(1.0f, B);
51 }
52
TEST(CPDF_DeviceCSTest,GetRGBFromRGB)53 TEST(CPDF_DeviceCSTest, GetRGBFromRGB) {
54 float R;
55 float G;
56 float B;
57 CPDF_DeviceCS device_rgb(PDFCS_DEVICERGB);
58
59 // Test normal values
60 float buf[3] = {0.13f, 1.0f, 0.652f};
61 ASSERT_TRUE(device_rgb.GetRGB(buf, &R, &G, &B));
62 EXPECT_FLOAT_EQ(0.13f, R);
63 EXPECT_FLOAT_EQ(1.0f, G);
64 EXPECT_FLOAT_EQ(0.652f, B);
65 buf[0] = 0.0f;
66 buf[1] = 0.52f;
67 buf[2] = 0.78f;
68 ASSERT_TRUE(device_rgb.GetRGB(buf, &R, &G, &B));
69 EXPECT_FLOAT_EQ(0.0f, R);
70 EXPECT_FLOAT_EQ(0.52f, G);
71 EXPECT_FLOAT_EQ(0.78f, B);
72
73 // Test out of range values
74 buf[0] = -10.5f;
75 buf[1] = 100.0f;
76 ASSERT_TRUE(device_rgb.GetRGB(buf, &R, &G, &B));
77 EXPECT_FLOAT_EQ(0.0f, R);
78 EXPECT_FLOAT_EQ(1.0f, G);
79 EXPECT_FLOAT_EQ(0.78f, B);
80 }
81
TEST(CPDF_DeviceCSTest,GetRGBFromCMYK)82 TEST(CPDF_DeviceCSTest, GetRGBFromCMYK) {
83 float R;
84 float G;
85 float B;
86 CPDF_DeviceCS device_cmyk(PDFCS_DEVICECMYK);
87
88 // Test normal values
89 float buf[4] = {0.6f, 0.5f, 0.3f, 0.9f};
90 ASSERT_TRUE(device_cmyk.GetRGB(buf, &R, &G, &B));
91 EXPECT_FLOAT_EQ(0.0627451f, R);
92 EXPECT_FLOAT_EQ(0.0627451f, G);
93 EXPECT_FLOAT_EQ(0.10588236f, B);
94 buf[0] = 0.15f;
95 buf[2] = 0.0f;
96 ASSERT_TRUE(device_cmyk.GetRGB(buf, &R, &G, &B));
97 EXPECT_FLOAT_EQ(0.2f, R);
98 EXPECT_FLOAT_EQ(0.0862745f, G);
99 EXPECT_FLOAT_EQ(0.16470589f, B);
100 buf[2] = 1.0f;
101 buf[3] = 0.0f;
102 ASSERT_TRUE(device_cmyk.GetRGB(buf, &R, &G, &B));
103 EXPECT_FLOAT_EQ(0.85098046f, R);
104 EXPECT_FLOAT_EQ(0.552941f, G);
105 EXPECT_FLOAT_EQ(0.15686275f, B);
106
107 // Test out of range values
108 buf[2] = 1.5f;
109 buf[3] = -0.6f;
110 ASSERT_TRUE(device_cmyk.GetRGB(buf, &R, &G, &B));
111 EXPECT_FLOAT_EQ(0.85098046f, R);
112 EXPECT_FLOAT_EQ(0.552941f, G);
113 EXPECT_FLOAT_EQ(0.15686275f, B);
114 }
115