• 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 #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