sqed 0.0.1

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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +27 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +18 -0
  5. data/Gemfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +36 -0
  8. data/Rakefile +9 -0
  9. data/lib/sqed.rb +111 -0
  10. data/lib/sqed/boundaries.rb +79 -0
  11. data/lib/sqed/boundary_finder.rb +150 -0
  12. data/lib/sqed/boundary_finder/color_line_finder.rb +83 -0
  13. data/lib/sqed/boundary_finder/cross_finder.rb +23 -0
  14. data/lib/sqed/boundary_finder/stage_finder.rb +139 -0
  15. data/lib/sqed/extractor.rb +45 -0
  16. data/lib/sqed/parser.rb +11 -0
  17. data/lib/sqed/parser/barcode_parser.rb +27 -0
  18. data/lib/sqed/parser/ocr_parser.rb +52 -0
  19. data/lib/sqed/result.rb +15 -0
  20. data/lib/sqed/version.rb +3 -0
  21. data/lib/sqed_config.rb +112 -0
  22. data/spec/lib/sqed/boundaries_spec.rb +35 -0
  23. data/spec/lib/sqed/boundary_finder/color_line_finder_spec.rb +167 -0
  24. data/spec/lib/sqed/boundary_finder/cross_finder_spec.rb +28 -0
  25. data/spec/lib/sqed/boundary_finder/stage_finder_spec.rb +9 -0
  26. data/spec/lib/sqed/boundary_finder_spec.rb +108 -0
  27. data/spec/lib/sqed/extractor_spec.rb +82 -0
  28. data/spec/lib/sqed/parser_spec.rb +6 -0
  29. data/spec/lib/sqed/result_spec.rb +17 -0
  30. data/spec/lib/sqed_spec.rb +200 -0
  31. data/spec/spec_helper.rb +34 -0
  32. data/spec/support/files/2Dbarcode.png +0 -0
  33. data/spec/support/files/CrossyBlackLinesSpecimen.jpg +0 -0
  34. data/spec/support/files/CrossyGreenLinesSpecimen.jpg +0 -0
  35. data/spec/support/files/Quadrant_2_3.jpg +0 -0
  36. data/spec/support/files/black_stage_green_line_specimen.jpg +0 -0
  37. data/spec/support/files/boundary_cross_green.jpg +0 -0
  38. data/spec/support/files/boundary_left_t_yellow.jpg +0 -0
  39. data/spec/support/files/boundary_offset_cross_red.jpg +0 -0
  40. data/spec/support/files/boundary_right_t_green.jpg +0 -0
  41. data/spec/support/files/greenlineimage.jpg +0 -0
  42. data/spec/support/files/label_images/black_stage_green_line_specimen_label.jpg +0 -0
  43. data/spec/support/files/test0.jpg +0 -0
  44. data/spec/support/files/test1.jpg +0 -0
  45. data/spec/support/files/test2.jpg +0 -0
  46. data/spec/support/files/test3.jpg +0 -0
  47. data/spec/support/files/test4.jpg +0 -0
  48. data/spec/support/files/test4OLD.jpg +0 -0
  49. data/spec/support/files/test_barcode.JPG +0 -0
  50. data/spec/support/files/test_ocr0.jpg +0 -0
  51. data/spec/support/files/types_21.jpg +0 -0
  52. data/spec/support/files/types_8.jpg +0 -0
  53. data/spec/support/image_helpers.rb +78 -0
  54. data/sqed.gemspec +31 -0
  55. metadata +244 -0
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::Boundaries do
4
+
5
+ let(:s) { Sqed::Boundaries.new}
6
+ let(:layout) {:horizontal_split}
7
+
8
+ specify "#coordinates defaults to a Hash when no layout provided" do
9
+ expect(s.coordinates).to eq({})
10
+ end
11
+
12
+ context 'with a layout provided' do
13
+ before {
14
+ s.layout = layout
15
+ }
16
+
17
+ specify "coordinates can be initialized after the fact (bad idea likely)" do
18
+ expect(s.initialize_coordinates).to be_truthy
19
+ end
20
+
21
+ specify "#coordinates has one coordinate system for each section (key in layout)" do
22
+ s.initialize_coordinates
23
+ expect(s.coordinates.keys.sort).to eq([0,1])
24
+ end
25
+
26
+ specify "#each" do
27
+ s.initialize_coordinates
28
+ s.each do |k,v|
29
+ expect([0,1].include?(k)).to be(true)
30
+ expect(v).to eq([nil, nil, nil, nil])
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::BoundaryFinder::ColorLineFinder do
4
+
5
+ let(:image) { ImageHelpers.crossy_green_line_specimen }
6
+
7
+ let(:b) { Sqed::BoundaryFinder::StageFinder.new(image: image) }
8
+ let(:c) {b.boundaries}
9
+ let(:d) { image.crop(*c.for(0), true) }
10
+
11
+ let(:e) { Sqed::BoundaryFinder::ColorLineFinder.new(image: d, layout: :right_t) }
12
+ let(:f) { e.boundaries }
13
+ let(:g) { Sqed::BoundaryFinder::ColorLineFinder.new(image: d, layout: :offset_cross)}
14
+ let(:h) { g.boundaries }
15
+ let(:gv) { Sqed::BoundaryFinder::ColorLineFinder.new(image: d, layout: :vertical_split) }
16
+ let(:hv) { gv.boundaries }
17
+
18
+ let(:ah) { ImageHelpers.offset_cross_red }
19
+ let(:bh) { Sqed::BoundaryFinder::StageFinder.new(image: ah) }
20
+ let(:ch) { bh.boundaries }
21
+ let(:dh) { ah.crop(*ch.for(0), true) }
22
+ let(:gh) { Sqed::BoundaryFinder::ColorLineFinder.new(image: dh, layout: :horizontal_split, boundary_color: :red) } # was :horizontal_split
23
+ let(:hh) { gh.boundaries }
24
+
25
+ let(:ibs) { ImageHelpers.black_stage_green_line_specimen }
26
+ let(:bbs) { Sqed::BoundaryFinder::StageFinder.new(image: ibs) }
27
+ let(:cbs) { bbs.boundaries }
28
+ let(:dbs) { ibs.crop(*cbs.for(0), true) }
29
+ let(:gbs) { Sqed::BoundaryFinder::ColorLineFinder.new(image: dbs, layout: :offset_cross) }
30
+ let(:hbs) { gbs.boundaries }
31
+
32
+ specify 'initial image columns are as expected for :image above' do
33
+ expect(image.columns).to eq(3264)
34
+ expect(image.rows).to eq(2452)
35
+ end
36
+
37
+ context 'stage image is properly found (sanity check, should be tests in stage finder)' do
38
+ specify 'stage image boundaries are correct' do
39
+ pct = 0.02
40
+ expect(in_range(c.x_for(0), pct, 407)).to be(true)
41
+ expect(in_range(c.y_for(0), pct, 301)).to be(true)
42
+ expect(in_range(c.width_for(0), pct, 2587)).to be(true)
43
+ expect(in_range(c.height_for(0), pct, 1990)).to be(true)
44
+ end
45
+
46
+ specify 'stage image size is correct' do
47
+ expect(d.columns).to be_within(50).of(2587)
48
+ expect(d.rows).to be_within(40).of(1990)
49
+ end
50
+ end
51
+
52
+ specify "CrossGreenLinesSpecimen using right_t layout should yield 3 rectangular boundaries" do
53
+ # use the f object for right_t
54
+ f.each do |i, coord|
55
+ q = d.crop(*coord, true)
56
+ q.write("tmp/q0#{i}.jpg")
57
+ end
58
+
59
+ expect(f.count).to eq(3)
60
+ pct = 0.02
61
+
62
+ expect(f.x_for(0)).to be_within(1).of(1)
63
+ expect(f.y_for(0)).to be_within(1).of(1)
64
+ expect(f.width_for(0)).to be_within(pct*2051).of(2051)
65
+ expect(f.height_for(0)).to be_within(pct*1990).of(1990)
66
+
67
+ expect(f.x_for(1)).to be_within(pct*2099).of(2099)
68
+ expect(f.y_for(1)).to be_within(1).of(1)
69
+ expect(f.width_for(1)).to be_within(pct*438).of(488)
70
+ expect(f.height_for(1)).to be_within(pct*987).of(987)
71
+
72
+ expect(f.x_for(2)).to be_within(pct*2099).of(2099)
73
+ expect(f.y_for(2)).to be_within(pct*1026).of(1026)
74
+ expect(f.width_for(2)).to be_within(pct*488).of(488)
75
+ expect(f.height_for(2)).to be_within(pct*964).of(964)
76
+ end
77
+
78
+ specify "CrossGreenLinesSpecimen using offset_cross layout should yield 4 rectangular boundaries" do
79
+ h.each do |i, coord|
80
+ q = d.crop(*coord, true)
81
+ q.write("tmp/q1#{i}.jpg")
82
+ end
83
+
84
+ expect(h.count).to eq(4)
85
+
86
+ pct = 0.02
87
+
88
+ expect(h.x_for(0)).to be_within(pct*2099).of(0)
89
+ expect(h.y_for(0)).to be_within(pct*0).of(0)
90
+ expect(h.width_for(0)).to be_within(pct*2051).of(2051)
91
+ expect(h.height_for(0)).to be_within(pct*1054).of(1054)
92
+
93
+ expect(h.x_for(1)).to be_within(pct*2099).of(2099)
94
+ expect(h.y_for(1)).to be_within(pct*0).of(0)
95
+ expect(h.width_for(1)).to be_within(pct*488).of(488)
96
+ expect(h.height_for(1)).to be_within(pct*987).of(987)
97
+
98
+ expect(h.x_for(2)).to be_within(pct*2099).of(2099)
99
+ expect(h.y_for(2)).to be_within(pct*1026).of(1026)
100
+ expect(h.width_for(2)).to be_within(pct*488).of(488)
101
+ expect(h.height_for(2)).to be_within(pct*964).of(964)
102
+
103
+ expect(h.x_for(3)).to be_within(0).of(0)
104
+ expect(h.y_for(3)).to be_within(pct*1093).of(1093)
105
+ expect(h.width_for(3)).to be_within(pct*2051).of(2051)
106
+ expect(h.height_for(3)).to be_within(pct*897).of(897)
107
+ end
108
+
109
+ specify "CrossGreenLinesSpecimen using vertical_split layout should yield 2 rectangular boundaries" do
110
+ hv.each do |k, v|
111
+ q = d.crop(*v, true)
112
+ q.write("tmp/q2#{k}.jpg")
113
+ end
114
+ expect(hv.count).to eq(2)
115
+
116
+ expect(hv.x_for(0)).to be_within(0.02*0).of(0)
117
+ expect(hv.y_for(0)).to be_within(0.02*0).of(0)
118
+ expect(hv.width_for(0)).to be_within(0.02*2051).of(2051)
119
+ expect(hv.height_for(0)).to be_within(0.02*1990).of(1990)
120
+
121
+ expect(hv.x_for(1)).to be_within(0.02*2099).of(2099)
122
+ expect(hv.y_for(1)).to be_within(0.02*0).of(0)
123
+ expect(hv.width_for(1)).to be_within(0.02*488).of(488)
124
+ expect(hv.height_for(1)).to be_within(0.02*1990).of(1990)
125
+ end
126
+
127
+ specify "boundary_offset_cross_red using horizontal_split layout should yield 2 rectangular boundaries" do
128
+ hh.each do |k, v|
129
+ q = dh.crop(*v, true)
130
+ q.write("tmp/q3#{k}.jpg")
131
+ end
132
+
133
+ expect(hh.count).to eq(2)
134
+ expect([[0, 0, 798, 146] , [0, 0, 799, 145]]).to include(hh.coordinates[0]) # for quadrant 0
135
+ expect(hh.coordinates[0]).to eq([0, 0, 799, 145]).or eq([0, 0, 798, 146]) # for quadrant 0
136
+ expect(hh.coordinates[1]).to eq([0, 154, 799, 445]) # for quadrant 1
137
+ end
138
+
139
+ specify "offset cross method on black stage specimen should yield 4 rectangular boundaries for 0" do
140
+ (hbs.first[0]..hbs.count - 1).each do |j|
141
+ q = dbs.crop(*hbs.for(j), true)
142
+ q.write("tmp/qb#{j}.jpg")
143
+ end
144
+ expect(hbs.coordinates.keys.count).to eq(4)
145
+
146
+ pct = 0.02
147
+
148
+ expect(hbs.width_for(0)).to be_within(pct*2999).of(2999)
149
+ expect(hbs.height_for(0)).to be_within(pct*506).of(506)
150
+ end
151
+
152
+ specify "offset cross method on black stage specimen should yield 4 rectangular boundaries for 1" do
153
+ expect(hbs.width_for(1)).to be_within(0.02*447).of(447)
154
+ expect(hbs.height_for(1)).to be_within(0.02*487).of(487)
155
+ end
156
+
157
+ specify "offset cross method on black stage specimen should yield 4 rectangular boundaries for 2" do
158
+ expect(hbs.width_for(2)).to be_within(0.02*447).of(447)
159
+ expect(hbs.height_for(2)).to be_within(0.02*1680).of(1680)
160
+ end
161
+
162
+ specify "offset cross method on black stage specimen should yield 4 rectangular boundaries for 3" do
163
+ expect(hbs.width_for(3)).to be_within(0.02*2999).of(2999)
164
+ expect(hbs.height_for(3)).to be_within(0.02*1677).of(1677)
165
+ end
166
+
167
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::BoundaryFinder::CrossFinder do
4
+ let(:image) { ImageHelpers.of_size(800, 600) }
5
+ let(:b) {Sqed::BoundaryFinder::CrossFinder.new(image: image)}
6
+ let(:c) {b.boundaries}
7
+
8
+ specify '#boundaries returns a Sqed::Boundaries instance' do
9
+ expect(b.boundaries.class).to eq(Sqed::Boundaries)
10
+ end
11
+
12
+ specify 'the 0th image starts at x = 0' do
13
+ expect(c.x_for(0)).to eq(0)
14
+ end
15
+
16
+ specify 'the 0th image starts at y = 0' do
17
+ expect(c.y_for(0)).to eq(0)
18
+ end
19
+
20
+ specify 'the 0th image has width = 400' do
21
+ expect(c.width_for(0)).to eq(400)
22
+ end
23
+
24
+ specify 'the 0th image has height = 300' do
25
+ expect(c.height_for(0)).to eq(300)
26
+ end
27
+
28
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::BoundaryFinder::StageFinder do
4
+ let(:b) {Sqed::BoundaryFinder::StageFinder.new(image: ImageHelpers.standard_cross_green )}
5
+
6
+ specify '#is border contains a proc' do
7
+ expect(b.is_border.class).to eq(Proc)
8
+ end
9
+ end
@@ -0,0 +1,108 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::BoundaryFinder do
4
+
5
+ specify 'when no image provided, #new raises' do
6
+ expect { Sqed::BoundaryFinder.new() }.to raise_error
7
+ end
8
+
9
+ context 'when initiated with an image' do
10
+ let(:b) {Sqed::BoundaryFinder.new(image: ImageHelpers.standard_cross_green, layout: :offset_cross)}
11
+
12
+ context 'attributes' do
13
+ specify '#img' do
14
+ expect(b).to respond_to(:img)
15
+ end
16
+ end
17
+
18
+ specify '#boundaries' do
19
+ expect(b.boundaries.class).to eq(Sqed::Boundaries)
20
+ end
21
+ end
22
+
23
+ context '.color_boundary_finder(image: image, sample_subdivision: 10)' do
24
+ specify 'finds the vertical dividing line in a standard cross, with border still present' do
25
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.standard_cross_green)[1]
26
+ expect(center).to be > 492
27
+ expect(center).to be < 504
28
+ end
29
+
30
+ specify 'finds the vertical dividing line in a standard cross, with border still present, when more precise' do
31
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.standard_cross_green, sample_cutoff_factor: 0.7)[1]
32
+ expect(center).to be > 492
33
+ expect(center).to be < 504
34
+ end
35
+
36
+ specify 'finds the vertical dividing line in a right t green cross, with border still present' do
37
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.right_t_green)[1]
38
+ expect(center).to be > 695
39
+ expect(center).to be < 705
40
+ end
41
+
42
+ specify 'finds the vertical dividing line a real image, with border still present' do
43
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen)[1]
44
+ expect(center).to be > 2452
45
+ expect(center).to be < 2495
46
+ end
47
+
48
+ specify 'finds the vertical dividing line a real image, with border still present, with 10x fewer subsamples' do
49
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 100 )[1]
50
+ expect(center).to be > 2452
51
+ expect(center).to be < 2495
52
+ end
53
+
54
+ specify 'finds the vertical dividing line a real image, with border still present, with 50x fewer subsamples' do
55
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 500 )[1]
56
+ expect(center).to be > 2452
57
+ expect(center).to be < 2495
58
+ end
59
+
60
+ specify 'FAILS to find the vertical dividing line a real image, with border still present, with 200x fewer subsamples' do
61
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 2000 )
62
+ expect(center).to be nil
63
+ end
64
+
65
+ specify 'finds the vertical dividing line another real image, with border still present' do
66
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image)[1]
67
+ expect(center).to be > 2445
68
+ expect(center).to be < 2495
69
+ end
70
+
71
+ specify 'finds the vertical dividing line another real image, with border still present, and 20x fewer subsamples' do
72
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, sample_subdivision_size: 200)[1]
73
+ expect(center).to be > 2445
74
+ expect(center).to be < 2495
75
+ end
76
+
77
+ specify 'finds the vertical dividing line another real image, with border still present, and 50x fewer subsamples' do
78
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, sample_subdivision_size: 500)[1]
79
+ expect(center).to be > 2445
80
+ expect(center).to be < 2495
81
+ end
82
+
83
+ specify 'FAILS to find the vertical dividing line in a standard cross, with border still present, when even more precise' do
84
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.standard_cross_green, sample_cutoff_factor: 1)
85
+ expect(center).to be nil
86
+ end
87
+
88
+ specify 'finds the horizontal dividing line another real image, with border still present' do
89
+ center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, scan: :columns)[1]
90
+ expect(center).to be > 1282
91
+ expect(center).to be < 1332
92
+ end
93
+
94
+ end
95
+
96
+ context '.frequency_stats(frequency_hash, samples_taken)' do
97
+ # i is a Hash of position => count (it is unordered, but constructed ordered here in assignment)
98
+ let(:i) { {1 => 1, 2 => 3, 3 => 15, 4 => 14, 5 => 13 }}
99
+ specify 'returns the median position (rounds up)' do
100
+ expect( Sqed::BoundaryFinder.frequency_stats(i, 12)).to eq([3, 4, 5])
101
+ end
102
+
103
+ specify 'returns nil if no count is greater than samples taken' do
104
+ expect( Sqed::BoundaryFinder.frequency_stats(i, 15)).to eq(nil)
105
+ end
106
+ end
107
+
108
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::Extractor do
4
+
5
+ let(:s) {Sqed::Extractor.new}
6
+
7
+ # context 'attributes' do
8
+ # specify '#image' do
9
+ # # expect that s.image is a method
10
+ # expect(s).to respond_to(:image)
11
+ # end
12
+
13
+ # specify 'autocropper/edgeDetector works' do
14
+ # this_image = ImageHelpers.ocr_image
15
+ # expect(Sqed::AutoCropper.new(this_image)).to be_truthy
16
+ # end
17
+
18
+ # specify 'Sqed.new(image: file) assigns to image' do
19
+ # specify 'Sqed.new(image:file) "works"' do
20
+ # expect(Sqed.new(image: ImageHelpers.test0_image)).to be_truthy
21
+ # end
22
+ # end
23
+
24
+ # specify 'green line parser does something' do
25
+ # this_image = ImageHelpers.greenline_image
26
+ # cropped_image = Sqed::AutoCropper.new(this_image).img
27
+ # a = Sqed::GreenLineFinder.new(cropped_image)
28
+ # b = 0
29
+ # end
30
+
31
+ # specify 'Sqed.new(image: file) assigns to image' do
32
+ # a = Sqed.new(image: ImageHelpers.test0_image)
33
+ # expect(a.image == ImageHelpers.test0_image).to be(true)
34
+ # end
35
+ # end
36
+
37
+ # specify 'zbar barcode decodes' do
38
+ # eb = Sqed::BarcodeParser.new(image: ImageHelpers.barcode_image) # was barcode_image
39
+ # bc = eb.barcodes
40
+ # expect(bc).to be_truthy
41
+ # expect(bc[2]).to eq('CODE-128:013117001040986')
42
+ # expect(bc[3]).to eq('CODE-128:SDLXHD1QTDVGJ')
43
+ # expect(bc[4]).to eq('CODE-128:1PPD368LL/A')
44
+ # expect(bc[5]).to eq('EAN-13:0885909541171')
45
+ # expect(bc[6]).to eq('EAN-13:885909270334')
46
+ # expect(bc[7]).to be(nil)
47
+ # end
48
+
49
+ # specify 'INHS specimen labels' do
50
+ # eg = Sqed.new(image: ImageHelpers.labels_image)
51
+ # # eg = Sqed.new(image: ImageHelpers.foo3_image)
52
+ # eg.image.rotate!(270.0)
53
+ # eg.image.write('foo5.jpg')
54
+ # egt = eg.text_from_quadrant(3)
55
+ # expect(egt).to match(/529 234/)
56
+ # end
57
+
58
+ # context "foo.jpg" do
59
+ # let(:eg) { Sqed.new(image: ImageHelpers.ocr_image) }
60
+
61
+ # specify 'all together' do
62
+ # # eg = Sqed.new(image: ImageHelpers.ocr_image)
63
+ # egt = eg.text_from_quadrant(3)
64
+
65
+ # expect(egt).to match(/Designed by Apple in California/)
66
+ # expect(egt).to match(/8 85909 27035/)
67
+ # expect(egt).to match(/EASY/)
68
+ # expect(eg.text_from_quadrant(3)).to match(/013‘1700104U986/) #ACTUALLY 013117001040986
69
+
70
+ # eg = Sqed.new(image: ImageHelpers.ocr_image)
71
+ # egb = eg.text_from_quadrant(2)
72
+ # u = 1 #pre-test breakpoint
73
+ # expect(egb.barcodes[0]).to eq('QR-Code:http://youtu.be/h9fkPPp8Y1c')
74
+ # expect(egb.barcodes[1]).to eq('EAN-13:0885909270354')
75
+ # expect(egb.barcodes[2]).to eq('CODE-128:013117001040986')
76
+ # expect(egb.barcodes[3]).to eq('CODE-128:SDLXHD1QTDVGJ')
77
+ # expect(egb.barcodes[4]).to eq('CODE-128:1PPD368LL/A')
78
+ # expect(egb.barcodes[5]).to eq('EAN-13:0885909541171')
79
+ # expect(egb.barcodes[6]).to be(nil)
80
+ # end
81
+ # end
82
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::Parser do
4
+
5
+ let(:s) {Sqed::Parser.new}
6
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqed::Result do
4
+ let(:r) {Sqed::Result.new}
5
+
6
+ context "attributes are derived from SqedConfig::LAYOUT_SECTION_TYPES" do
7
+ SqedConfig::LAYOUT_SECTION_TYPES.each do |type|
8
+ specify "##{type}" do
9
+ expect(r.respond_to?(type.to_sym)).to be_truthy
10
+ end
11
+
12
+ specify "##{type}_image" do
13
+ expect(r.respond_to?("#{type}_image".to_sym)).to be_truthy
14
+ end
15
+ end
16
+ end
17
+ end