• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The PDFium Authors
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 
20 class BarcodeTest : public testing::Test {
21  public:
SetUp()22   void SetUp() override {
23     BC_Library_Init();
24 
25     auto device = std::make_unique<CFX_DefaultRenderDevice>();
26     auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
27     if (bitmap->Create(640, 480, FXDIB_Format::kBgrx)) {
28       bitmap_ = bitmap;
29     }
30     ASSERT_TRUE(bitmap_);
31     ASSERT_TRUE(device->Attach(bitmap_));
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() { return barcode_->RenderDevice(device_.get(), matrix_); }
51 
BitmapChecksum()52   std::string BitmapChecksum() {
53     return GenerateMD5Base16(bitmap_->GetBuffer());
54   }
55 
56   // Manually insert calls to this as needed for debugging.
SaveBitmap(const std::string & filename)57   void SaveBitmap(const std::string& filename) {
58     BitmapSaver::WriteBitmapToPng(bitmap_.Get(), filename);
59   }
60 
61  protected:
62   CFX_Matrix matrix_;
63   std::unique_ptr<CFX_Barcode> barcode_;
64   std::unique_ptr<CFX_RenderDevice> device_;
65   RetainPtr<CFX_DIBitmap> bitmap_;
66 };
67 
68 // https://crbug.com/pdfium/738
69 #if defined(PDF_USE_SKIA)
70 #define MAYBE_Code39 DISABLED_Code39
71 #else
72 #define MAYBE_Code39 Code39
73 #endif
TEST_F(BarcodeTest,MAYBE_Code39)74 TEST_F(BarcodeTest, MAYBE_Code39) {
75   Create(BC_TYPE::kCode39);
76   EXPECT_TRUE(barcode()->Encode(L"CLAMS"));
77   RenderDevice();
78   EXPECT_EQ("cd4cd3f36da38ff58d9f621827018903", BitmapChecksum());
79 }
80 
81 // https://crbug.com/pdfium/738
82 #if defined(PDF_USE_SKIA)
83 #define MAYBE_CodaBar DISABLED_CodaBar
84 #else
85 #define MAYBE_CodaBar CodaBar
86 #endif
TEST_F(BarcodeTest,MAYBE_CodaBar)87 TEST_F(BarcodeTest, MAYBE_CodaBar) {
88   Create(BC_TYPE::kCodabar);
89   EXPECT_TRUE(barcode()->Encode(L"$123-456"));
90   RenderDevice();
91   EXPECT_EQ("5fad4fc19f099001a0fe83c89430c977", BitmapChecksum());
92 }
93 
TEST_F(BarcodeTest,CodaBarLetters)94 TEST_F(BarcodeTest, CodaBarLetters) {
95   Create(BC_TYPE::kCodabar);
96   EXPECT_FALSE(barcode()->Encode(L"clams"));
97 }
98 
99 // https://crbug.com/pdfium/738
100 #if defined(PDF_USE_SKIA)
101 #define MAYBE_Code128 DISABLED_Code128
102 #else
103 #define MAYBE_Code128 Code128
104 #endif
TEST_F(BarcodeTest,MAYBE_Code128)105 TEST_F(BarcodeTest, MAYBE_Code128) {
106   Create(BC_TYPE::kCode128);
107   EXPECT_TRUE(barcode()->Encode(L"Clams"));
108   RenderDevice();
109   EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
110 }
111 
112 // https://crbug.com/pdfium/738
113 #if defined(PDF_USE_SKIA)
114 #define MAYBE_Code128B DISABLED_Code128B
115 #else
116 #define MAYBE_Code128B Code128B
117 #endif
TEST_F(BarcodeTest,MAYBE_Code128B)118 TEST_F(BarcodeTest, MAYBE_Code128B) {
119   Create(BC_TYPE::kCode128B);
120   EXPECT_TRUE(barcode()->Encode(L"Clams"));
121   RenderDevice();
122   EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
123 }
124 
125 // https://crbug.com/pdfium/738
126 #if defined(PDF_USE_SKIA)
127 #define MAYBE_Code128C DISABLED_Code128C
128 #else
129 #define MAYBE_Code128C Code128C
130 #endif
TEST_F(BarcodeTest,MAYBE_Code128C)131 TEST_F(BarcodeTest, MAYBE_Code128C) {
132   Create(BC_TYPE::kCode128C);
133   EXPECT_TRUE(barcode()->Encode(L"123456"));
134   RenderDevice();
135   EXPECT_EQ("fba730a807ba6363f9bd2bc7f8c56d1f", BitmapChecksum());
136 }
137 
138 // https://crbug.com/pdfium/738
139 #if defined(PDF_USE_SKIA)
140 #define MAYBE_Code128CLetters DISABLED_Code128CLetters
141 #else
142 #define MAYBE_Code128CLetters Code128CLetters
143 #endif
TEST_F(BarcodeTest,MAYBE_Code128CLetters)144 TEST_F(BarcodeTest, MAYBE_Code128CLetters) {
145   Create(BC_TYPE::kCode128C);
146   EXPECT_TRUE(barcode()->Encode(L"clams"));
147   RenderDevice();
148   EXPECT_EQ("6284ec8503d5a948c9518108da33cdd3", BitmapChecksum());
149 }
150 
151 // https://crbug.com/pdfium/738
152 #if defined(PDF_USE_SKIA)
153 #define MAYBE_Ean8 DISABLED_Ean8
154 #else
155 #define MAYBE_Ean8 Ean8
156 #endif
TEST_F(BarcodeTest,MAYBE_Ean8)157 TEST_F(BarcodeTest, MAYBE_Ean8) {
158   Create(BC_TYPE::kEAN8);
159   EXPECT_TRUE(barcode()->Encode(L"123456"));
160   RenderDevice();
161   EXPECT_EQ("aff88491ac46ca6217d780d185300cde", BitmapChecksum());
162 }
163 
TEST_F(BarcodeTest,Ean8Letters)164 TEST_F(BarcodeTest, Ean8Letters) {
165   Create(BC_TYPE::kEAN8);
166   EXPECT_FALSE(barcode()->Encode(L"clams"));
167 }
168 
169 // https://crbug.com/pdfium/738
170 #if defined(PDF_USE_SKIA)
171 #define MAYBE_UPCA DISABLED_UPCA
172 #else
173 #define MAYBE_UPCA UPCA
174 #endif
TEST_F(BarcodeTest,MAYBE_UPCA)175 TEST_F(BarcodeTest, MAYBE_UPCA) {
176   Create(BC_TYPE::kUPCA);
177   EXPECT_TRUE(barcode()->Encode(L"123456"));
178   RenderDevice();
179   EXPECT_EQ("fe26a5714cff7ffe3f9b02183efc435b", BitmapChecksum());
180 }
181 
TEST_F(BarcodeTest,UPCALetters)182 TEST_F(BarcodeTest, UPCALetters) {
183   Create(BC_TYPE::kUPCA);
184   EXPECT_FALSE(barcode()->Encode(L"clams"));
185 }
186 
187 // https://crbug.com/pdfium/738
188 #if defined(PDF_USE_SKIA)
189 #define MAYBE_Ean13 DISABLED_Ean13
190 #else
191 #define MAYBE_Ean13 Ean13
192 #endif
TEST_F(BarcodeTest,MAYBE_Ean13)193 TEST_F(BarcodeTest, MAYBE_Ean13) {
194   Create(BC_TYPE::kEAN13);
195   EXPECT_TRUE(barcode()->Encode(L"123456"));
196   RenderDevice();
197   EXPECT_EQ("72d2190b98d635c32834bf67552e561e", BitmapChecksum());
198 }
199 
TEST_F(BarcodeTest,Ean13Letters)200 TEST_F(BarcodeTest, Ean13Letters) {
201   Create(BC_TYPE::kEAN13);
202   EXPECT_FALSE(barcode()->Encode(L"clams"));
203 }
204 
205 // https://crbug.com/pdfium/738
206 #if defined(PDF_USE_SKIA)
207 #define MAYBE_Pdf417 DISABLED_Pdf417
208 #else
209 #define MAYBE_Pdf417 Pdf417
210 #endif
TEST_F(BarcodeTest,MAYBE_Pdf417)211 TEST_F(BarcodeTest, MAYBE_Pdf417) {
212   Create(BC_TYPE::kPDF417);
213   EXPECT_TRUE(barcode()->Encode(L"clams"));
214   RenderDevice();
215   EXPECT_EQ("191e35d11613901b7d5d51033689aa89", BitmapChecksum());
216 }
217 
218 // https://crbug.com/pdfium/738
219 #if defined(PDF_USE_SKIA)
220 #define MAYBE_DataMatrix DISABLED_DataMatrix
221 #else
222 #define MAYBE_DataMatrix DataMatrix
223 #endif
TEST_F(BarcodeTest,MAYBE_DataMatrix)224 TEST_F(BarcodeTest, MAYBE_DataMatrix) {
225   Create(BC_TYPE::kDataMatrix);
226   EXPECT_TRUE(barcode()->Encode(L"clams"));
227   RenderDevice();
228   EXPECT_EQ("5e5cd9a680b86fcd4ffd53ed36e3c980", BitmapChecksum());
229 }
230 
231 // https://crbug.com/pdfium/738
232 #if defined(PDF_USE_SKIA)
233 #define MAYBE_QrCode DISABLED_QrCode
234 #else
235 #define MAYBE_QrCode QrCode
236 #endif
TEST_F(BarcodeTest,MAYBE_QrCode)237 TEST_F(BarcodeTest, MAYBE_QrCode) {
238   Create(BC_TYPE::kQRCode);
239   EXPECT_TRUE(barcode()->Encode(L"clams"));
240   RenderDevice();
241   EXPECT_EQ("4751c6e0f67749fabe24f787128decee", BitmapChecksum());
242 }
243