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/oned/BC_OnedEAN8Writer.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace {
9
TEST(OnedEAN8WriterTest,Encode)10 TEST(OnedEAN8WriterTest, Encode) {
11 CBC_OnedEAN8Writer writer;
12 int32_t width;
13 int32_t height;
14 uint8_t* encoded;
15 const char* expected;
16
17 // EAN-8 barcodes encode 8-digit numbers into 67 modules in a unidimensional
18 // disposition.
19 encoded = writer.Encode("", BCFORMAT_EAN_8, width, height);
20 EXPECT_EQ(nullptr, encoded);
21 FX_Free(encoded);
22
23 encoded = writer.Encode("123", BCFORMAT_EAN_8, width, height);
24 EXPECT_EQ(nullptr, encoded);
25 FX_Free(encoded);
26
27 encoded = writer.Encode("1234567", BCFORMAT_EAN_8, width, height);
28 EXPECT_EQ(nullptr, encoded);
29 FX_Free(encoded);
30
31 encoded = writer.Encode("123456789", BCFORMAT_EAN_8, width, height);
32 EXPECT_EQ(nullptr, encoded);
33 FX_Free(encoded);
34
35 encoded = writer.Encode("12345670", BCFORMAT_EAN_8, width, height);
36 EXPECT_NE(nullptr, encoded);
37 EXPECT_EQ(1, height);
38 EXPECT_EQ(67, width);
39
40 expected =
41 "# #" // Start
42 " ## #" // 1 L
43 " # ##" // 2 L
44 " #### #" // 3 L
45 " # ##" // 4 L
46 " # # " // Middle
47 "# ### " // 5 R
48 "# # " // 6 R
49 "# # " // 7 R
50 "### # " // 0 R
51 "# #"; // End
52 for (int i = 0; i < 67; i++) {
53 EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
54 }
55 FX_Free(encoded);
56
57 encoded = writer.Encode("99441104", BCFORMAT_EAN_8, width, height);
58 EXPECT_NE(nullptr, encoded);
59 EXPECT_EQ(1, height);
60 EXPECT_EQ(67, width);
61
62 expected =
63 "# #" // Start
64 " # ##" // 9 L
65 " # ##" // 9 L
66 " # ##" // 4 L
67 " # ##" // 4 L
68 " # # " // Middle
69 "## ## " // 1 R
70 "## ## " // 1 R
71 "### # " // 0 R
72 "# ### " // 4 R
73 "# #"; // End
74 for (int i = 0; i < 67; i++) {
75 EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
76 }
77 FX_Free(encoded);
78 }
79
TEST(OnedEAN8WriterTest,Checksum)80 TEST(OnedEAN8WriterTest, Checksum) {
81 CBC_OnedEAN8Writer writer;
82 EXPECT_EQ(0, writer.CalcChecksum(""));
83 EXPECT_EQ(6, writer.CalcChecksum("123"));
84 EXPECT_EQ(0, writer.CalcChecksum("1234567"));
85 EXPECT_EQ(4, writer.CalcChecksum("9944110"));
86 }
87
88 } // namespace
89