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