barcode1dtools 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +21 -0
- data/lib/barcode1dtools.rb +119 -0
- data/lib/barcode1dtools/ean13.rb +389 -0
- data/lib/barcode1dtools/ean8.rb +252 -0
- data/lib/barcode1dtools/interleaved2of5.rb +248 -0
- data/lib/barcode1dtools/upc_a.rb +143 -0
- data/lib/barcode1dtools/upc_e.rb +274 -0
- data/lib/barcode1dtools/upc_supplemental_2.rb +221 -0
- data/lib/barcode1dtools/upc_supplemental_5.rb +246 -0
- data/test/test_barcode1d.rb +56 -0
- data/test/test_barcode1dean13.rb +102 -0
- data/test/test_barcode1dean8.rb +95 -0
- data/test/test_barcode1di2of5.rb +86 -0
- data/test/test_barcode1dupca.rb +102 -0
- data/test/test_barcode1dupce.rb +127 -0
- data/test/test_barcode1dupcsupp2.rb +89 -0
- data/test/test_barcode1dupcsupp5.rb +94 -0
- metadata +93 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2012 Michael Chaney Consulting Corporation
|
3
|
+
#
|
4
|
+
# Released under the terms of the MIT License or the GNU
|
5
|
+
# General Public License, v. 2
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'barcode1dtools'
|
10
|
+
|
11
|
+
class Barcode1DToolsInterleaved2of5Test < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a random number from 1 to 10 digits long
|
19
|
+
def random_x_digit_number
|
20
|
+
(rand*10000000000).to_int
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_checksum_generation
|
24
|
+
assert_equal 5, Barcode1DTools::Interleaved2of5.generate_check_digit_for(123456789)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_checksum_validation
|
28
|
+
assert Barcode1DTools::Interleaved2of5.validate_check_digit_for(1234567895)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_attr_readers
|
32
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(123456789, :checksum_included => false)
|
33
|
+
assert_equal 5, i2of5.check_digit
|
34
|
+
assert_equal 123456789, i2of5.value
|
35
|
+
assert_equal '1234567895', i2of5.encoded_string
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_checksum_error
|
39
|
+
# proper checksum is 5
|
40
|
+
assert_raise(Barcode1DTools::ChecksumError) { Barcode1DTools::Interleaved2of5.new(1234567890, :checksum_included => true) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_skip_checksum
|
44
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(1234567890, :skip_checksum => true)
|
45
|
+
assert_nil i2of5.check_digit
|
46
|
+
assert_equal 1234567890, i2of5.value
|
47
|
+
assert_equal '1234567890', i2of5.encoded_string
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_add_leading_zero
|
51
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(123, :skip_checksum => true)
|
52
|
+
assert_equal '0123', i2of5.encoded_string
|
53
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(12)
|
54
|
+
assert_equal '0123', i2of5.encoded_string
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_bad_character_errors
|
58
|
+
# Characters that cannot be encoded
|
59
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::Interleaved2of5.new('thisisnotgood', :checksum_included => false) }
|
60
|
+
end
|
61
|
+
|
62
|
+
# Only need to test wn, as bars and rle are based on wn
|
63
|
+
def test_barcode_generation
|
64
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(602003, :skip_checksum => true)
|
65
|
+
assert_equal "nnnnnnwnwwnwnnnnwnnwnwwnnwnwwnwnnnwnn", i2of5.wn
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_decode_error
|
69
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::Interleaved2of5.decode('x') }
|
70
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::Interleaved2of5.decode('x'*60) }
|
71
|
+
# proper start & stop, but crap in middle
|
72
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::Interleaved2of5.decode('nnnnwwwwnn') }
|
73
|
+
# wrong start/stop
|
74
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::Interleaved2of5.decode('nwwnwnwnwnwnwnw') }
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_decoding
|
78
|
+
random_i2of5_num=random_x_digit_number
|
79
|
+
i2of5 = Barcode1DTools::Interleaved2of5.new(random_i2of5_num, :skip_checksum => true)
|
80
|
+
i2of52 = Barcode1DTools::Interleaved2of5.decode(i2of5.wn)
|
81
|
+
assert_equal i2of5.value, i2of52.value
|
82
|
+
# Should also work in reverse
|
83
|
+
i2of54 = Barcode1DTools::Interleaved2of5.decode(i2of5.wn.reverse)
|
84
|
+
assert_equal i2of5.value, i2of54.value
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2012 Michael Chaney Consulting Corporation
|
3
|
+
#
|
4
|
+
# Released under the terms of the MIT License or the GNU
|
5
|
+
# General Public License, v. 2
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'barcode1dtools'
|
10
|
+
|
11
|
+
class Barcode1DToolsUPC_ATest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a random UPC-A sans checksum
|
19
|
+
def random_11_digit_number
|
20
|
+
(0..10).collect { |x| ((rand * 10).to_i % 10).to_s }.join
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_checksum_generation
|
24
|
+
assert_equal 7, Barcode1DTools::UPC_A.generate_check_digit_for('07820601001')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_checksum_validation
|
28
|
+
assert Barcode1DTools::UPC_A.validate_check_digit_for('884088516338')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_attr_readers
|
32
|
+
upc_a = Barcode1DTools::UPC_A.new('88408851633', :checksum_included => false)
|
33
|
+
assert_equal 8, upc_a.check_digit
|
34
|
+
assert_equal '88408851633', upc_a.value
|
35
|
+
assert_equal '884088516338', upc_a.encoded_string
|
36
|
+
assert_equal '8', upc_a.number_system
|
37
|
+
assert_equal '84088', upc_a.manufacturers_code
|
38
|
+
assert_equal '51633', upc_a.product_code
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_value_fixup
|
42
|
+
upc_a = Barcode1DTools::UPC_A.new('88408851633', :checksum_included => false)
|
43
|
+
assert_equal 8, upc_a.check_digit
|
44
|
+
assert_equal '88408851633', upc_a.value
|
45
|
+
assert_equal '884088516338', upc_a.encoded_string
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_checksum_error
|
49
|
+
# proper checksum is 8
|
50
|
+
assert_raise(Barcode1DTools::ChecksumError) { Barcode1DTools::UPC_A.new('884088516331', :checksum_included => true) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_value_length_errors
|
54
|
+
# One digit too short
|
55
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.new('0123456789', :checksum_included => false) }
|
56
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.new('01234567890', :checksum_included => true) }
|
57
|
+
# One digit too long
|
58
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.new('012345678901', :checksum_included => false) }
|
59
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.new('0123456789012', :checksum_included => true) }
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_bad_character_errors
|
63
|
+
# Characters that cannot be encoded
|
64
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.new('thisisnotgood', :checksum_included => false) }
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_width
|
68
|
+
upc_a = Barcode1DTools::UPC_A.new('041343005796', :checksum_included => true)
|
69
|
+
assert_equal 95, upc_a.width
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_barcode_generation
|
73
|
+
upc_a = Barcode1DTools::UPC_A.new('012676510226', :checksum_included => true)
|
74
|
+
assert_equal "10100011010011001001001101011110111011010111101010100111011001101110010110110011011001010000101", upc_a.bars
|
75
|
+
assert_equal "11132112221212211141312111411111123122213211212221221114111", upc_a.rle
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_wn_raises_error
|
79
|
+
upc_a = Barcode1DTools::UPC_A.new('012676510226', :checksum_included => true)
|
80
|
+
assert_raise(Barcode1DTools::NotImplementedError) { upc_a.wn }
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_decode_error
|
84
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.decode('x') }
|
85
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.decode('x'*60) }
|
86
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.decode('x'*96) }
|
87
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.decode('x'*94) }
|
88
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_A.decode('111000011111000011111') }
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_decoding
|
92
|
+
random_ean_num=random_11_digit_number
|
93
|
+
ean = Barcode1DTools::UPC_A.new(random_ean_num)
|
94
|
+
ean2 = Barcode1DTools::UPC_A.decode(ean.bars)
|
95
|
+
assert_equal ean.value, ean2.value
|
96
|
+
ean3 = Barcode1DTools::UPC_A.decode(ean.rle)
|
97
|
+
assert_equal ean.value, ean3.value
|
98
|
+
# Should also work in reverse
|
99
|
+
ean4 = Barcode1DTools::UPC_A.decode(ean.bars.reverse)
|
100
|
+
assert_equal ean.value, ean4.value
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2012 Michael Chaney Consulting Corporation
|
3
|
+
#
|
4
|
+
# Released under the terms of the MIT License or the GNU
|
5
|
+
# General Public License, v. 2
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'barcode1dtools'
|
10
|
+
|
11
|
+
class Barcode1DToolsUPC_ETest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a random UPC-E sans checksum and initial "0"
|
19
|
+
def random_upce_number(type = rand(4))
|
20
|
+
if type == 0
|
21
|
+
# manufacturer # is xx000, xx100, or xx200, with a 3-digit
|
22
|
+
# product number. The manufacturer # is split between the
|
23
|
+
# first two digits and the final digit.
|
24
|
+
sprintf('%02d%03d%1d', rand(100), rand(1000), rand(3))
|
25
|
+
elsif type == 1
|
26
|
+
# manufacturer # is xx300, xx400, xx500, xx600, xx700, xx800,
|
27
|
+
# or xx900, with a 2-digit item number. The final digit is 3.
|
28
|
+
sprintf('%02d%1d%02d3', rand(100), rand(7)+3, rand(100))
|
29
|
+
elsif type == 2
|
30
|
+
# manufacturer # is xxx10, xxx20, xxx30, xxx40, xxx50, xxx60,
|
31
|
+
# xxx70, xxx80, or xxx90, with a single-digit item number.
|
32
|
+
# The final digit is 4.
|
33
|
+
sprintf('%03d%1d%1d4', rand(1000), rand(9)+1, rand(10))
|
34
|
+
else
|
35
|
+
# manufacturer # is xxxx1, xxxx2, xxxx3, xxxx4, xxxx5, xxxx6,
|
36
|
+
# xxxx7, xxxx8, or xxxx9, and the single-digit item number
|
37
|
+
# is between 5 and 9.
|
38
|
+
sprintf('%04d%1d%1d', rand(10000), rand(9)+1, rand(5)+5)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_checksum_generation
|
43
|
+
assert_equal 3, Barcode1DTools::UPC_E.generate_check_digit_for('333333')
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_checksum_validation
|
47
|
+
assert Barcode1DTools::UPC_E.validate_check_digit_for('03333333')
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_upc_a_upc_e_conversion
|
51
|
+
assert_equal '03330000033', Barcode1DTools::UPC_E.upce_value_to_upca_value('0333333')
|
52
|
+
upce_value_0 = '0' + random_upce_number(0)
|
53
|
+
assert_equal upce_value_0, Barcode1DTools::UPC_E.upca_value_to_upce_value(Barcode1DTools::UPC_E.upce_value_to_upca_value(upce_value_0))
|
54
|
+
upce_value_1 = '0' + random_upce_number(1)
|
55
|
+
assert_equal upce_value_1, Barcode1DTools::UPC_E.upca_value_to_upce_value(Barcode1DTools::UPC_E.upce_value_to_upca_value(upce_value_1))
|
56
|
+
upce_value_2 = '0' + random_upce_number(2)
|
57
|
+
assert_equal upce_value_2, Barcode1DTools::UPC_E.upca_value_to_upce_value(Barcode1DTools::UPC_E.upce_value_to_upca_value(upce_value_2))
|
58
|
+
upce_value_3 = '0' + random_upce_number(3)
|
59
|
+
assert_equal upce_value_3, Barcode1DTools::UPC_E.upca_value_to_upce_value(Barcode1DTools::UPC_E.upce_value_to_upca_value(upce_value_3))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_attr_readers
|
63
|
+
upc_e = Barcode1DTools::UPC_E.new('333333', :checksum_included => false)
|
64
|
+
assert_equal 3, upc_e.check_digit
|
65
|
+
assert_equal '333333', upc_e.value
|
66
|
+
assert_equal '3333333', upc_e.encoded_string
|
67
|
+
assert_equal '0', upc_e.number_system
|
68
|
+
assert_equal '33300', upc_e.manufacturers_code
|
69
|
+
assert_equal '00033', upc_e.product_code
|
70
|
+
assert_equal '03330000033', upc_e.upca_value
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_checksum_error
|
74
|
+
# proper checksum is 3
|
75
|
+
assert_raise(Barcode1DTools::ChecksumError) { Barcode1DTools::UPC_E.new('3333331', :checksum_included => true) }
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_value_length_errors
|
79
|
+
# One digit too short
|
80
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.new('33333', :checksum_included => false) }
|
81
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.new('333333', :checksum_included => true) }
|
82
|
+
# One digit too long
|
83
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.new('03333333', :checksum_included => false) }
|
84
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.new('033333332', :checksum_included => true) }
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_bad_character_errors
|
88
|
+
# Characters that cannot be encoded
|
89
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.new('thisisnotgood', :checksum_included => false) }
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_width
|
93
|
+
upc_e = Barcode1DTools::UPC_E.new(random_upce_number)
|
94
|
+
assert_equal 51, upc_e.width
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_barcode_generation
|
98
|
+
upc_e = Barcode1DTools::UPC_E.new('01245714', :checksum_included => true)
|
99
|
+
assert_equal "101011001100100110011101011100101110110011001010101", upc_e.bars
|
100
|
+
assert_equal "111122221222311132113122221111111", upc_e.rle
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_wn_raises_error
|
104
|
+
upc_e = Barcode1DTools::UPC_E.new(random_upce_number)
|
105
|
+
assert_raise(Barcode1DTools::NotImplementedError) { upc_e.wn }
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_decode_error
|
109
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.decode('x') }
|
110
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.decode('x'*60) }
|
111
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.decode('x'*96) }
|
112
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.decode('x'*94) }
|
113
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_E.decode('111000011111000011111') }
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_decoding
|
117
|
+
random_upce_num=random_upce_number
|
118
|
+
upce = Barcode1DTools::UPC_E.new('0'+random_upce_num)
|
119
|
+
upce2 = Barcode1DTools::UPC_E.decode(upce.bars)
|
120
|
+
assert_equal upce.value, upce2.value
|
121
|
+
upce3 = Barcode1DTools::UPC_E.decode(upce.rle)
|
122
|
+
assert_equal upce.value, upce3.value
|
123
|
+
# Should also work in reverse
|
124
|
+
upce4 = Barcode1DTools::UPC_E.decode(upce.bars.reverse)
|
125
|
+
assert_equal upce.value, upce4.value
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2012 Michael Chaney Consulting Corporation
|
3
|
+
#
|
4
|
+
# Released under the terms of the MIT License or the GNU
|
5
|
+
# General Public License, v. 2
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'barcode1dtools'
|
10
|
+
|
11
|
+
class Barcode1DToolsUPC_Supp2Test < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a random 2-digit number
|
19
|
+
def random_2_digit_number
|
20
|
+
rand(100)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_checksum_generation
|
24
|
+
assert_equal 3, Barcode1DTools::UPC_Supplemental_2.generate_check_digit_for('23')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_checksum_validation
|
28
|
+
assert Barcode1DTools::UPC_Supplemental_2.validate_check_digit_for('233')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_attr_readers
|
32
|
+
upc_supp_2 = Barcode1DTools::UPC_Supplemental_2.new('23', :checksum_included => false)
|
33
|
+
assert_equal 3, upc_supp_2.check_digit
|
34
|
+
assert_equal 23, upc_supp_2.value
|
35
|
+
assert_equal '233', upc_supp_2.encoded_string
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_checksum_error
|
39
|
+
# proper checksum is 3
|
40
|
+
assert_raise(Barcode1DTools::ChecksumError) { Barcode1DTools::UPC_Supplemental_2.new('231', :checksum_included => true) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_value_length_errors
|
44
|
+
# One digit too long
|
45
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.new('233', :checksum_included => false) }
|
46
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.new('2333', :checksum_included => true) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_bad_character_errors
|
50
|
+
# Characters that cannot be encoded
|
51
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.new('thisisnotgood', :checksum_included => false) }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_width
|
55
|
+
upc_supp_2 = Barcode1DTools::UPC_Supplemental_2.new(random_2_digit_number)
|
56
|
+
assert_equal 20, upc_supp_2.width
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_barcode_generation
|
60
|
+
upc_supp_2 = Barcode1DTools::UPC_Supplemental_2.new('233', :checksum_included => true)
|
61
|
+
assert_equal "10110011011010100001", upc_supp_2.bars
|
62
|
+
assert_equal "1122212111141", upc_supp_2.rle
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_wn_raises_error
|
66
|
+
upc_supp_2 = Barcode1DTools::UPC_Supplemental_2.new(random_2_digit_number)
|
67
|
+
assert_raise(Barcode1DTools::NotImplementedError) { upc_supp_2.wn }
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_decode_error
|
71
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.decode('x') }
|
72
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.decode('x'*60) }
|
73
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.decode('x'*96) }
|
74
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.decode('x'*94) }
|
75
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_2.decode('11100001111100001111') }
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_decoding
|
79
|
+
random_upcsupp2_num=random_2_digit_number
|
80
|
+
upcsupp2 = Barcode1DTools::UPC_Supplemental_2.new(random_upcsupp2_num)
|
81
|
+
upcsupp22 = Barcode1DTools::UPC_Supplemental_2.decode(upcsupp2.bars)
|
82
|
+
assert_equal upcsupp2.value, upcsupp22.value
|
83
|
+
upcsupp23 = Barcode1DTools::UPC_Supplemental_2.decode(upcsupp2.rle)
|
84
|
+
assert_equal upcsupp2.value, upcsupp23.value
|
85
|
+
# Should also work in reverse
|
86
|
+
upcsupp24 = Barcode1DTools::UPC_Supplemental_2.decode(upcsupp2.bars.reverse)
|
87
|
+
assert_equal upcsupp2.value, upcsupp24.value
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2012 Michael Chaney Consulting Corporation
|
3
|
+
#
|
4
|
+
# Released under the terms of the MIT License or the GNU
|
5
|
+
# General Public License, v. 2
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'barcode1dtools'
|
10
|
+
|
11
|
+
class Barcode1DToolsUPC_Supp5Test < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
# Creates a random 2-digit number
|
19
|
+
def random_5_digit_number
|
20
|
+
sprintf('%05d',rand(100000))
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_checksum_generation
|
24
|
+
assert_equal 7, Barcode1DTools::UPC_Supplemental_5.generate_check_digit_for('53999')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_checksum_validation
|
28
|
+
assert Barcode1DTools::UPC_Supplemental_5.validate_check_digit_for('539997')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_attr_readers
|
32
|
+
upc_supp_5 = Barcode1DTools::UPC_Supplemental_5.new('53999', :checksum_included => false)
|
33
|
+
assert_equal 7, upc_supp_5.check_digit
|
34
|
+
assert_equal '53999', upc_supp_5.value
|
35
|
+
assert_equal '539997', upc_supp_5.encoded_string
|
36
|
+
assert_equal '5', upc_supp_5.currency_code
|
37
|
+
assert_equal '3999', upc_supp_5.price
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_checksum_error
|
41
|
+
# proper checksum is 7
|
42
|
+
assert_raise(Barcode1DTools::ChecksumError) { Barcode1DTools::UPC_Supplemental_5.new('539990', :checksum_included => true) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_value_length_errors
|
46
|
+
# One digit too short
|
47
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.new('5399', :checksum_included => false) }
|
48
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.new('53999', :checksum_included => true) }
|
49
|
+
# One digit too long
|
50
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.new('539999', :checksum_included => false) }
|
51
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.new('5399979', :checksum_included => true) }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_bad_character_errors
|
55
|
+
# Characters that cannot be encoded
|
56
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.new('thisisnotgood', :checksum_included => false) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_width
|
60
|
+
upc_supp_5 = Barcode1DTools::UPC_Supplemental_5.new(random_5_digit_number)
|
61
|
+
assert_equal 47, upc_supp_5.width
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_barcode_generation
|
65
|
+
upc_supp_5 = Barcode1DTools::UPC_Supplemental_5.new('539997', :checksum_included => true)
|
66
|
+
assert_equal "10110110001010100001010001011010010111010001011", upc_supp_5.bars
|
67
|
+
assert_equal "1121231111141113112112113113112", upc_supp_5.rle
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_wn_raises_error
|
71
|
+
upc_supp_5 = Barcode1DTools::UPC_Supplemental_5.new(random_5_digit_number)
|
72
|
+
assert_raise(Barcode1DTools::NotImplementedError) { upc_supp_5.wn }
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_decode_error
|
76
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.decode('x') }
|
77
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.decode('x'*60) }
|
78
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.decode('x'*96) }
|
79
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.decode('x'*94) }
|
80
|
+
assert_raise(Barcode1DTools::UnencodableCharactersError) { Barcode1DTools::UPC_Supplemental_5.decode('1110000111110000111110010101001') }
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_decoding
|
84
|
+
random_upcsupp5_num=random_5_digit_number
|
85
|
+
upcsupp5 = Barcode1DTools::UPC_Supplemental_5.new(random_upcsupp5_num)
|
86
|
+
upcsupp52 = Barcode1DTools::UPC_Supplemental_5.decode(upcsupp5.bars)
|
87
|
+
assert_equal upcsupp5.value, upcsupp52.value
|
88
|
+
upcsupp53 = Barcode1DTools::UPC_Supplemental_5.decode(upcsupp5.rle)
|
89
|
+
assert_equal upcsupp5.value, upcsupp53.value
|
90
|
+
# Should also work in reverse
|
91
|
+
upcsupp54 = Barcode1DTools::UPC_Supplemental_5.decode(upcsupp5.bars.reverse)
|
92
|
+
assert_equal upcsupp5.value, upcsupp54.value
|
93
|
+
end
|
94
|
+
end
|