• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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