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 #include "fxbarcode/cfx_barcode.h"
6
7 #include <memory>
8 #include <string>
9 #include <utility>
10
11 #include "core/fxcrt/fx_coordinates.h"
12 #include "core/fxcrt/fx_string.h"
13 #include "core/fxge/cfx_defaultrenderdevice.h"
14 #include "core/fxge/cfx_renderdevice.h"
15 #include "core/fxge/dib/cfx_dibitmap.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "testing/utils/bitmap_saver.h"
18 #include "testing/utils/hash.h"
19 #include "third_party/base/ptr_util.h"
20
21 class BarcodeTest : public testing::Test {
22 public:
SetUp()23 void SetUp() override {
24 BC_Library_Init();
25
26 auto device = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
27 auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
28 if (bitmap->Create(640, 480, FXDIB_Rgb32))
29 bitmap_ = bitmap;
30 ASSERT_TRUE(bitmap_);
31 ASSERT_TRUE(device->Attach(bitmap_, false, nullptr, false));
32 device_ = std::move(device);
33 }
34
TearDown()35 void TearDown() override {
36 bitmap_.Reset();
37 device_.reset();
38 barcode_.reset();
39 BC_Library_Destroy();
40 }
41
barcode() const42 CFX_Barcode* barcode() const { return barcode_.get(); }
43
Create(BC_TYPE type)44 void Create(BC_TYPE type) {
45 barcode_ = CFX_Barcode::Create(type);
46 barcode_->SetHeight(298);
47 barcode_->SetWidth(418);
48 }
49
RenderDevice()50 bool RenderDevice() {
51 return barcode_->RenderDevice(device_.get(), &matrix_);
52 }
53
BitmapChecksum()54 std::string BitmapChecksum() {
55 return GenerateMD5Base16(bitmap_->GetBuffer(),
56 bitmap_->GetPitch() * bitmap_->GetHeight());
57 }
58
59 // Manually insert calls to this as needed for debugging.
SaveBitmap(const std::string & filename)60 void SaveBitmap(const std::string& filename) {
61 BitmapSaver::WriteBitmapToPng(bitmap_.Get(), filename);
62 }
63
64 protected:
65 CFX_Matrix matrix_;
66 std::unique_ptr<CFX_Barcode> barcode_;
67 std::unique_ptr<CFX_RenderDevice> device_;
68 RetainPtr<CFX_DIBitmap> bitmap_;
69 };
70
71 // https://crbug.com/pdfium/738
72 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
73 #define MAYBE_Code39 DISABLED_Code39
74 #else
75 #define MAYBE_Code39 Code39
76 #endif
TEST_F(BarcodeTest,MAYBE_Code39)77 TEST_F(BarcodeTest, MAYBE_Code39) {
78 Create(BC_CODE39);
79 EXPECT_TRUE(barcode()->Encode(L"CLAMS"));
80 RenderDevice();
81 EXPECT_EQ("cd4cd3f36da38ff58d9f621827018903", BitmapChecksum());
82 }
83
84 // https://crbug.com/pdfium/738
85 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
86 #define MAYBE_CodaBar DISABLED_CodaBar
87 #else
88 #define MAYBE_CodaBar CodaBar
89 #endif
TEST_F(BarcodeTest,MAYBE_CodaBar)90 TEST_F(BarcodeTest, MAYBE_CodaBar) {
91 Create(BC_CODABAR);
92 EXPECT_TRUE(barcode()->Encode(L"$123-456"));
93 RenderDevice();
94 EXPECT_EQ("5fad4fc19f099001a0fe83c89430c977", BitmapChecksum());
95 }
96
TEST_F(BarcodeTest,DISABLED_CodaBarLetters)97 TEST_F(BarcodeTest, DISABLED_CodaBarLetters) {
98 Create(BC_CODABAR);
99 EXPECT_FALSE(barcode()->Encode(L"clams"));
100 }
101
102 // https://crbug.com/pdfium/738
103 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
104 #define MAYBE_Code128 DISABLED_Code128
105 #else
106 #define MAYBE_Code128 Code128
107 #endif
TEST_F(BarcodeTest,MAYBE_Code128)108 TEST_F(BarcodeTest, MAYBE_Code128) {
109 Create(BC_CODE128);
110 EXPECT_TRUE(barcode()->Encode(L"Clams"));
111 RenderDevice();
112 EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
113 }
114
115 // https://crbug.com/pdfium/738
116 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
117 #define MAYBE_Code128B DISABLED_Code128B
118 #else
119 #define MAYBE_Code128B Code128B
120 #endif
TEST_F(BarcodeTest,MAYBE_Code128B)121 TEST_F(BarcodeTest, MAYBE_Code128B) {
122 Create(BC_CODE128_B);
123 EXPECT_TRUE(barcode()->Encode(L"Clams"));
124 RenderDevice();
125 EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
126 }
127
128 // https://crbug.com/pdfium/738
129 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
130 #define MAYBE_Code128C DISABLED_Code128C
131 #else
132 #define MAYBE_Code128C Code128C
133 #endif
TEST_F(BarcodeTest,MAYBE_Code128C)134 TEST_F(BarcodeTest, MAYBE_Code128C) {
135 Create(BC_CODE128_C);
136 EXPECT_TRUE(barcode()->Encode(L"123456"));
137 RenderDevice();
138 EXPECT_EQ("fba730a807ba6363f9bd2bc7f8c56d1f", BitmapChecksum());
139 }
140
TEST_F(BarcodeTest,DISABLED_Code128CLetters)141 TEST_F(BarcodeTest, DISABLED_Code128CLetters) {
142 Create(BC_CODE128_C);
143 EXPECT_FALSE(barcode()->Encode(L"clams"));
144 }
145
146 // https://crbug.com/pdfium/738
147 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
148 #define MAYBE_Ean8 DISABLED_Ean8
149 #else
150 #define MAYBE_Ean8 Ean8
151 #endif
TEST_F(BarcodeTest,MAYBE_Ean8)152 TEST_F(BarcodeTest, MAYBE_Ean8) {
153 Create(BC_EAN8);
154 EXPECT_TRUE(barcode()->Encode(L"123456"));
155 RenderDevice();
156 EXPECT_EQ("aff88491ac46ca6217d780d185300cde", BitmapChecksum());
157 }
158
TEST_F(BarcodeTest,DISABLED_Ean8Letters)159 TEST_F(BarcodeTest, DISABLED_Ean8Letters) {
160 Create(BC_EAN8);
161 EXPECT_FALSE(barcode()->Encode(L"clams"));
162 }
163
164 // https://crbug.com/pdfium/738
165 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
166 #define MAYBE_UPCA DISABLED_UPCA
167 #else
168 #define MAYBE_UPCA UPCA
169 #endif
TEST_F(BarcodeTest,MAYBE_UPCA)170 TEST_F(BarcodeTest, MAYBE_UPCA) {
171 Create(BC_UPCA);
172 EXPECT_TRUE(barcode()->Encode(L"123456"));
173 RenderDevice();
174 EXPECT_EQ("fe26a5714cff7ffe3f9b02183efc435b", BitmapChecksum());
175 }
176
TEST_F(BarcodeTest,DISABLED_UPCALetters)177 TEST_F(BarcodeTest, DISABLED_UPCALetters) {
178 Create(BC_UPCA);
179 EXPECT_FALSE(barcode()->Encode(L"clams"));
180 }
181
182 // https://crbug.com/pdfium/738
183 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
184 #define MAYBE_Ean13 DISABLED_Ean13
185 #else
186 #define MAYBE_Ean13 Ean13
187 #endif
TEST_F(BarcodeTest,MAYBE_Ean13)188 TEST_F(BarcodeTest, MAYBE_Ean13) {
189 Create(BC_EAN13);
190 EXPECT_TRUE(barcode()->Encode(L"123456"));
191 RenderDevice();
192 EXPECT_EQ("72d2190b98d635c32834bf67552e561e", BitmapChecksum());
193 }
194
TEST_F(BarcodeTest,DISABLED_Ean13Letters)195 TEST_F(BarcodeTest, DISABLED_Ean13Letters) {
196 Create(BC_EAN13);
197 EXPECT_FALSE(barcode()->Encode(L"clams"));
198 }
199
200 // https://crbug.com/pdfium/738
201 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
202 #define MAYBE_Pdf417 DISABLED_Pdf417
203 #else
204 #define MAYBE_Pdf417 Pdf417
205 #endif
TEST_F(BarcodeTest,MAYBE_Pdf417)206 TEST_F(BarcodeTest, MAYBE_Pdf417) {
207 Create(BC_PDF417);
208 EXPECT_TRUE(barcode()->Encode(L"clams"));
209 RenderDevice();
210 EXPECT_EQ("191e35d11613901b7d5d51033689aa89", BitmapChecksum());
211 }
212
213 // https://crbug.com/pdfium/738
214 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
215 #define MAYBE_DataMatrix DISABLED_DataMatrix
216 #else
217 #define MAYBE_DataMatrix DataMatrix
218 #endif
TEST_F(BarcodeTest,MAYBE_DataMatrix)219 TEST_F(BarcodeTest, MAYBE_DataMatrix) {
220 Create(BC_DATAMATRIX);
221 EXPECT_TRUE(barcode()->Encode(L"clams"));
222 RenderDevice();
223 EXPECT_EQ("5e5cd9a680b86fcd4ffd53ed36e3c980", BitmapChecksum());
224 }
225
226 // https://crbug.com/pdfium/738
227 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
228 #define MAYBE_QrCode DISABLED_QrCode
229 #else
230 #define MAYBE_QrCode QrCode
231 #endif
TEST_F(BarcodeTest,MAYBE_QrCode)232 TEST_F(BarcodeTest, MAYBE_QrCode) {
233 Create(BC_QR_CODE);
234 EXPECT_TRUE(barcode()->Encode(L"clams"));
235 RenderDevice();
236 EXPECT_EQ("4751c6e0f67749fabe24f787128decee", BitmapChecksum());
237 }
238