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.
@@ -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