codec 0.0.12 → 1.0.0

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.
@@ -1,3 +1,3 @@
1
1
  module Codec
2
- VERSION = "0.0.12"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -2,43 +2,45 @@ require_relative '../../test_helper'
2
2
 
3
3
  describe Codec::Bitmap do
4
4
 
5
- subject { Codec::Bitmap.new('Bitmap',2) }
5
+ subject { Codec::Bitmap.new(2) }
6
6
 
7
7
  before do
8
- subject.add_sub_codec('1',Codec::Numasc.new('*',3))
9
- subject.add_sub_codec('2', Codec::String.new('*',5))
10
- subject.add_sub_codec('3', Codec::String.new('*',3))
11
- subject.add_sub_codec('15', Codec::Numbin.new('*',2))
8
+ subject.add_sub_codec('1',Codec::Numasc.new(3))
9
+ subject.add_sub_codec('2', Codec::String.new(5))
10
+ subject.add_sub_codec('3', Codec::String.new(3))
11
+ subject.add_sub_codec('15', Codec::Numbin.new(2))
12
12
  @buffer = ["1100000000000010","012ABCDE","0012"].pack("B*A*H*")
13
13
  @field = Codec::Field.from_array('Bitmap',[['1',12],['2','ABCDE'],['15',18]])
14
14
  end
15
15
 
16
- it "must be a BaseComposed codec" do
16
+ it "must be a Bitmap codec" do
17
17
  subject.must_be_instance_of(Codec::Bitmap)
18
18
  end
19
19
 
20
20
  it "must generate composed field from buffer" do
21
- subject.decode(@buffer).first.must_equal(@field)
21
+ f = Codec::Field.new('Bitmap')
22
+ subject.decode(@buffer, f)
23
+ f.must_equal(@field)
22
24
  end
23
25
 
24
26
  end
25
27
 
26
28
  describe Codec::Bitmap do
27
29
 
28
- subject { Codec::Bitmap.new('MultipleBitmap',2) }
30
+ subject { Codec::Bitmap.new(2) }
29
31
 
30
32
  before do
31
33
  subject.add_extended_bitmap('1')
32
- subject.add_sub_codec('2',Codec::Numasc.new('*',3))
33
- subject.add_sub_codec('3', Codec::String.new('*',5))
34
- subject.add_sub_codec('4', Codec::String.new('*',3))
35
- subject.add_sub_codec('18', Codec::Numbin.new('*',2))
36
- subject.add_sub_codec('21', Codec::String.new('*',5))
34
+ subject.add_sub_codec('2',Codec::Numasc.new(3))
35
+ subject.add_sub_codec('3', Codec::String.new(5))
36
+ subject.add_sub_codec('4', Codec::String.new(3))
37
+ subject.add_sub_codec('18', Codec::Numbin.new(2))
38
+ subject.add_sub_codec('21', Codec::String.new(5))
37
39
  @buffer_1 = ["11000000000000000100100000000000","012","0012","ABCDE"].pack("B*A*H*A*")
38
40
  @buffer_2 = ["0110000000000000","012","ABCDE"].pack("B*A3A5")
39
- @field_1 = Codec::Field.from_array('MultipleBitmap',[['2',12],['18',18],['21',"ABCDE"]])
40
- @field_2 = Codec::Field.from_array('MultipleBitmap',[['2',12],['3','ABCDE']])
41
- @field_3 = Codec::Field.from_array('MultipleBitmap',[['2',12],['41',18],['21',"ABCDE"]])
41
+ @field_1 = Codec::Field.from_array('test1',[['2',12],['18',18],['21',"ABCDE"]])
42
+ @field_2 = Codec::Field.from_array('test2',[['2',12],['3','ABCDE']])
43
+ @field_3 = Codec::Field.from_array('test3',[['2',12],['41',18],['21',"ABCDE"]])
42
44
  end
43
45
 
44
46
  it "must be a Bitmap codec" do
@@ -46,19 +48,26 @@ describe Codec::Bitmap do
46
48
  end
47
49
 
48
50
  it "must generate composed field from buffer with extended bitmap" do
49
- subject.decode(@buffer_1).first.must_equal(@field_1)
51
+ f1 = Codec::Field.new('test1')
52
+ subject.decode(@buffer_1,f1)
53
+ f1.must_equal(@field_1)
50
54
  end
51
55
 
52
56
  it "must generate composed field from buffer without extended bitmap" do
53
- subject.decode(@buffer_2).first.must_equal(@field_2)
57
+ f2 = Codec::Field.new('test2')
58
+ subject.decode(@buffer_2,f2)
59
+ f2.must_equal(@field_2)
54
60
  end
55
61
 
56
62
  it "must generate buffer from composed field" do
57
- subject.encode(@field_1).must_equal(@buffer_1)
63
+ buf1 = ""
64
+ subject.encode(buf1, @field_1)
65
+ buf1.unpack("H*").first.must_equal(@buffer_1.unpack("H*").first)
58
66
  end
59
67
 
60
68
  it "must raise Encoding exception if subfield is unknown" do
61
- proc { subject.encode(@field_3) }.must_raise(Codec::EncodingException)
69
+ buf = ""
70
+ proc { subject.encode(buf, @field_3) }.must_raise(Codec::EncodingException)
62
71
  end
63
72
 
64
73
  end
@@ -1,13 +1,13 @@
1
1
  require_relative '../../test_helper'
2
2
 
3
3
  describe Codec::BaseComposed do
4
- subject { Codec::BaseComposed.new('BaseComposed') }
4
+ subject { Codec::BaseComposed.new }
5
5
 
6
6
  before do
7
- subject.add_sub_codec('CHP1', Codec::Numasc.new('CHP1',3))
8
- subject.add_sub_codec('CHP2', Codec::String.new('CHP2',5))
9
- subject.add_sub_codec('CHP3', Codec::String.new('CHP3',4))
10
- subject.add_sub_codec('CHP4', Codec::Numasc.new('CH4',4))
7
+ subject.add_sub_codec('CHP1', Codec::Numasc.new(3))
8
+ subject.add_sub_codec('CHP2', Codec::String.new(5))
9
+ subject.add_sub_codec('CHP3', Codec::String.new(4))
10
+ subject.add_sub_codec('CHP4', Codec::Numasc.new(4))
11
11
  field_array = [['CHP1',12],['CHP2','ABCDE'],['CHP3','WXYZ'],['CHP4',23]]
12
12
  @buffer_test1 = "012ABCDEWXYZ0023"
13
13
  @field_test1 = Codec::Field.from_array('BaseComposed', field_array)
@@ -20,29 +20,38 @@ describe Codec::BaseComposed do
20
20
  end
21
21
 
22
22
  it "must generate a field with computed value" do
23
- subject.decode(@buffer_test1).first.must_equal(@field_test1)
23
+ f1 = Codec::Field.new("BaseComposed")
24
+ subject.decode(@buffer_test1,f1)
25
+ f1.must_equal(@field_test1)
24
26
  end
25
27
 
26
28
  it "must encode buffer with composed field" do
27
- subject.encode(@field_test1).must_equal(@buffer_test1)
29
+ buf1 = ""
30
+ subject.encode(buf1, @field_test1)
31
+ buf1.must_equal(@buffer_test1)
28
32
  end
29
33
 
30
34
  it "must encode buffer with composed field without codec's last field " do
31
- subject.encode(@field_test2).must_equal(@buffer_test2)
35
+ buf = ""
36
+ subject.encode(buf, @field_test2)
37
+ buf.must_equal(@buffer_test2)
32
38
  end
33
39
 
34
40
  it "must handle remaining data" do
35
- subject.decode("012ABCDEWXYZ0023123").last.must_equal("123")
41
+ buf = "012ABCDEWXYZ0023123"
42
+ f = Codec::Field.new
43
+ subject.decode(buf,f)
44
+ buf.must_equal("123")
36
45
  end
37
46
  end
38
47
 
39
- describe Codec::CompleteComposed do
40
- subject { Codec::CompleteComposed.new('CompleteComposed') }
48
+ describe Codec::BaseComposed do
49
+ subject { Codec::BaseComposed.new(true) }
41
50
 
42
51
  before do
43
- test_1 = [['CHP1',Codec::Numasc.new('*',3),12],
44
- ['CHP2',Codec::String.new('*',5),"ABCDE"],
45
- ['CHP3',Codec::String.new('*',4),"WXYZ"]]
52
+ test_1 = [['CHP1',Codec::Numasc.new(3),12],
53
+ ['CHP2',Codec::String.new(5),"ABCDE"],
54
+ ['CHP3',Codec::String.new(4),"WXYZ"]]
46
55
  field_array = test_1.collect{|id,codec,value| [id,value]}
47
56
  @field_1 = Codec::Field.from_array('CompleteComposed',field_array)
48
57
  test_1.each { |id,codec,value| subject.add_sub_codec(id,codec) }
@@ -51,29 +60,34 @@ describe Codec::CompleteComposed do
51
60
  @buffer_3 = "012ABCDE"
52
61
  @field_2 = Codec::Field.from_array('CompleteComposed',field_array[0,2])
53
62
  end
54
-
55
- it "must be a CompleteComposed codec" do
56
- subject.must_be_instance_of(Codec::CompleteComposed)
57
- end
58
63
 
59
64
  it "must generate a field with computed value" do
60
- subject.decode(@buffer_1).first.must_equal(@field_1)
65
+ f = Codec::Field.new("CompleteComposed")
66
+ subject.decode(@buffer_1,f)
67
+ f.must_equal(@field_1)
61
68
  end
62
69
 
63
70
  it "must handle remaining data" do
64
- subject.decode(@buffer_1).last.must_equal("123")
71
+ buf = @buffer_1
72
+ f = Codec::Field.new("CompleteComposed")
73
+ subject.decode(buf, f)
74
+ buf.must_equal("123")
65
75
  end
66
76
 
67
77
  it "must raise BufferUnderflow if missing field" do
68
- proc { subject.decode(@buffer_3)}.must_raise(Codec::BufferUnderflow)
78
+ f = Codec::Field.new("CompleteComposed")
79
+ proc { subject.decode(@buffer_3,f) }.must_raise(Codec::BufferUnderflow)
69
80
  end
70
81
 
71
82
  it "must encode expected buffer" do
72
- subject.encode(@field_1).must_equal(@buffer_2)
83
+ buf = ""
84
+ subject.encode(buf, @field_1)
85
+ buf.must_equal(@buffer_2)
73
86
  end
74
87
 
75
88
  it "must raise EncodingException if missing field" do
76
- proc { subject.encode(@field_2)}.must_raise(Codec::EncodingException)
89
+ buf = ""
90
+ proc { subject.encode(buf, @field_2)}.must_raise(Codec::EncodingException)
77
91
  end
78
92
 
79
93
  end
@@ -3,36 +3,40 @@ require_relative '../../test_helper'
3
3
 
4
4
  describe Codec::Ascii do
5
5
 
6
- subject { Codec::Ascii.new('test',3) }
7
-
8
- it "must be a Codec::Ascii" do
9
- subject.must_be_instance_of(Codec::Ascii)
10
- end
6
+ subject { Codec::Ascii.new(3) }
11
7
 
12
8
  it "must encode field from utf-8 to ascii" do
13
- subject.encode(Codec::Field.new('test','été')).must_equal(["827482"].pack("H*"))
9
+ f = Codec::Field.new('test','été')
10
+ buff =""
11
+ subject.encode(buff, f)
12
+ buff.must_equal(["827482"].pack("H*"))
14
13
  end
15
14
 
16
15
  it "must decode from ascii stream to utf-8 field" do
17
- subject.decode(["827482"].pack("H*")).first.must_equal(Codec::Field.new('test','été'))
16
+ buff = ["827482"].pack("H*")
17
+ f = Codec::Field.new('test')
18
+ subject.decode(buff,f)
19
+ f.must_equal(Codec::Field.new('test','été'))
18
20
  end
19
21
 
20
22
  end
21
23
 
22
24
  describe Codec::Ebcdic do
23
25
 
24
- subject { Codec::Ebcdic.new('test',3) }
25
-
26
- it "must be a Codec::Ebcdic" do
27
- subject.must_be_instance_of(Codec::Ebcdic)
28
- end
26
+ subject { Codec::Ebcdic.new(3) }
29
27
 
30
28
  it "must encode field from utf-8 to Ebcdic" do
31
- subject.encode(Codec::Field.new('test','été')).must_equal(["85A385"].pack("H*"))
29
+ f = Codec::Field.new('test','été')
30
+ buff =""
31
+ subject.encode(buff, f)
32
+ buff.must_equal(["85A385"].pack("H*"))
32
33
  end
33
34
 
34
35
  it "must decode from Ebcdic stream to utf-8 field" do
35
- subject.decode(["85A385"].pack("H*")).first.must_equal(Codec::Field.new('test','ete'))
36
+ buff = ["85A385"].pack("H*")
37
+ f = Codec::Field.new('test')
38
+ subject.decode(buff, f)
39
+ f.must_equal(Codec::Field.new('test','ete'))
36
40
  end
37
41
 
38
42
  end
@@ -1,7 +1,7 @@
1
1
  require_relative '../../test_helper'
2
2
 
3
3
  describe Codec::Numbin do
4
- subject { Codec::Numbin.new('Test',4) }
4
+ subject { Codec::Numbin.new(4) }
5
5
 
6
6
  before do
7
7
  @f256 = Codec::Field.new
@@ -13,89 +13,101 @@ describe Codec::Numbin do
13
13
  end
14
14
 
15
15
  it "must generate a field with computed value" do
16
- subject.decode(["00000100"].pack("H*")).first.get_value.to_i.must_equal(256)
16
+ f = Codec::Field.new
17
+ subject.decode(["00000100"].pack("H*"),f)
18
+ f.get_value.to_i.must_equal(256)
17
19
  end
18
20
 
19
- it "must generate a field with computed value" do
20
- subject.decode(["00000100"].pack("H*")).last.size.must_equal(0)
21
+ it "remaining buffer must be empty" do
22
+ f = Codec::Field.new
23
+ buf = ["00000100"].pack("H*")
24
+ subject.decode(buf,f)
25
+ buf.must_be_empty
21
26
  end
22
27
 
23
28
  it "must generate a field with computed value" do
24
- subject.encode(@f256).must_equal(["00000100"].pack("H*"))
29
+ buf = ""
30
+ subject.encode(buf, @f256)
31
+ buf.must_equal(["00000100"].pack("H*"))
25
32
  end
26
33
  end
27
34
 
28
35
  describe Codec::Numasc do
29
- subject { Codec::Numasc.new('Test',4) }
36
+ subject { Codec::Numasc.new(4) }
30
37
 
31
38
  before do
32
39
  @f12 = Codec::Field.new
33
40
  @f12.set_value(12)
34
41
  end
35
42
 
36
- it "must be a codec" do
37
- subject.must_be_instance_of(Codec::Numasc)
38
- end
39
-
40
43
  it "must generate a field with computed value" do
41
- subject.decode("0012").first.get_value.to_i.must_equal(12)
44
+ f = Codec::Field.new
45
+ subject.decode("0012",f)
46
+ f.get_value.must_equal(12)
42
47
  end
43
48
 
44
- it "must generate a field with computed value" do
45
- subject.decode("0012").last.size.must_equal(0)
49
+ it "remaining buffer must be empty" do
50
+ buf = "0012"
51
+ f = Codec::Field.new
52
+ subject.decode(buf,f)
53
+ buf.must_be_empty
46
54
  end
47
55
 
48
56
  it "must generate a field with computed value" do
49
- subject.encode(@f12).must_equal("0012")
57
+ buf = ""
58
+ subject.encode(buf, @f12)
59
+ buf.must_equal("0012")
50
60
  end
51
61
  end
52
62
 
53
63
  describe Codec::String do
54
- subject { Codec::String.new('Test',10) }
55
- before do
56
- @fstring = Codec::Field.new
57
- @fstring.set_value("TEST")
58
- end
59
-
60
- it "must be a codec" do
61
- subject.must_be_instance_of(Codec::String)
62
- end
64
+ subject { Codec::String.new(10) }
63
65
 
64
66
  it "must generate a field with computed value" do
65
- subject.decode("Testing string").first.get_value.must_equal("Testing st")
67
+ f = Codec::Field.new
68
+ subject.decode("Testing string",f)
69
+ f.get_value.must_equal("Testing st")
66
70
  end
67
71
 
68
72
  it "must also return remaining data" do
69
- subject.decode("Testing string").last.must_equal("ring")
73
+ buf = "Testing string"
74
+ f = Codec::Field.new
75
+ subject.decode(buf, f)
76
+ buf.must_equal("ring")
70
77
  end
71
78
 
72
79
  it "must generate a buffer with corresponding value padded with space" do
73
- subject.encode(@fstring).must_equal("TEST ")
80
+ f = Codec::Field.new
81
+ f.set_value("TEST")
82
+ buf = ""
83
+ subject.encode(buf, f)
84
+ buf.must_equal("TEST ")
74
85
  end
75
86
  end
76
87
 
77
88
  describe Codec::Binary do
78
- subject { Codec::Binary.new('Test',8) }
89
+ subject { Codec::Binary.new(8) }
79
90
  before do
80
91
  @unpack_buffer = "ABCDEF0123456789"
81
92
  @bin_buffer = [@unpack_buffer].pack("H*")
93
+ @computed_f = Codec::Field.new
82
94
  @fbin = Codec::Field.new
83
95
  @fbin.set_value(@unpack_buffer)
84
96
  end
85
97
 
86
- it "must be a codec" do
87
- subject.must_be_instance_of(Codec::Binary)
88
- end
89
-
90
98
  it "must generate a field with computed value" do
91
- subject.decode(@bin_buffer).first.get_value.must_equal(@unpack_buffer)
99
+ subject.decode(@bin_buffer,@computed_f)
100
+ @computed_f.get_value.must_equal(@unpack_buffer)
92
101
  end
93
102
 
94
- it "must return no remaining data" do
95
- subject.decode(@bin_buffer).last.must_equal("")
103
+ it "remaining buffer must be empty" do
104
+ subject.decode(@bin_buffer,@computed_f)
105
+ @bin_buffer.must_be_empty
96
106
  end
97
107
 
98
108
  it "must regenerate corresponding buffer" do
99
- subject.encode(@fbin).must_equal(@bin_buffer)
109
+ buf = ""
110
+ subject.encode(buf, @fbin)
111
+ buf.must_equal(@bin_buffer)
100
112
  end
101
113
  end
@@ -1,71 +1,67 @@
1
1
  require_relative '../../test_helper'
2
2
 
3
- describe Codec::Packed do
4
- subject { Codec::Packed.new('Test',6) }
3
+ # No more required encode return the field length for upper codec layer
4
+ # describe Codec::Packed do
5
+ # subject { Codec::Packed.new(6) }
6
+ #
7
+ # it "must retrieve field length" do
8
+ # f_pck = Codec::Field.new
9
+ # f_pck.set_value(123)
10
+ # subject.get_length(@f_pck).must_equal(6)
11
+ # end
12
+ #
13
+ # end
5
14
 
6
- before do
7
- @f_pck = Codec::Field.new
8
- @f_pck.set_value("123")
9
- end
10
-
11
- it "must be a codec" do
12
- subject.must_be_instance_of(Codec::Packed)
13
- end
14
-
15
- it "must retrieve field length" do
16
- subject.get_length(@f_pck).must_equal(6)
17
- end
18
-
19
- end
20
-
21
- describe Codec::Numpck do
22
- subject { Codec::Numpck.new('Test',5) }
15
+ describe "Numeric packed" do
16
+ subject { Codec::Packed.new(5) }
23
17
 
24
18
  before do
25
19
  @f12 = Codec::Field.new
26
20
  @f12.set_value(12)
21
+ @f = Codec::Field.new
27
22
  @pck_buff = ["000012"].pack("H*")
28
23
  end
29
24
 
30
- it "must be a codec" do
31
- subject.must_be_instance_of(Codec::Numpck)
32
- end
33
-
34
25
  it "must generate a field with computed value" do
35
- subject.decode(@pck_buff).first.get_value.to_i.must_equal(12)
26
+ subject.decode(@pck_buff,@f)
27
+ @f.get_value.must_equal(12)
36
28
  end
37
29
 
38
- it "must not remain data" do
39
- subject.decode(@pck_buff).last.size.must_equal(0)
30
+ it "remaining buffer must be empty" do
31
+ subject.decode(@pck_buff,@f)
32
+ @pck_buff.must_be_empty
40
33
  end
41
34
 
42
35
  it "must generate a field with computed value" do
43
- subject.encode(@f12).must_equal(@pck_buff)
36
+ buf=""
37
+ subject.encode(buf, @f12)
38
+ buf.must_equal(@pck_buff)
44
39
  end
45
40
  end
46
41
 
47
- describe Codec::Strpck do
48
- subject { Codec::Strpck.new('Test',11) }
42
+ describe "Packed rigth padded with F" do
43
+ subject { Codec::Packed.new(11,false,true,true) }
49
44
  before do
50
45
  @unpack_buffer = "497011D9010"
51
46
  @bin_buffer = [@unpack_buffer + "F"].pack("H*")
52
47
  @fbin = Codec::Field.new
53
48
  @fbin.set_value(@unpack_buffer)
54
- end
55
-
56
- it "must be a codec" do
57
- subject.must_be_instance_of(Codec::Strpck)
49
+ @f = Codec::Field.new
58
50
  end
59
51
 
60
52
  it "must generate a field with computed value" do
61
- subject.decode(@bin_buffer).first.get_value.upcase.must_equal(@unpack_buffer)
53
+ subject.decode(@bin_buffer,@f)
54
+ @f.get_value.upcase.must_equal(@unpack_buffer)
62
55
  end
63
56
 
64
- it "must return no remaining data" do
65
- subject.decode(@bin_buffer).last.must_equal("")
57
+ it "remaining buffer must be empty" do
58
+ subject.decode(@bin_buffer,@f)
59
+ @bin_buffer.must_be_empty
66
60
  end
67
61
 
68
62
  it "must regenerate corresponding buffer" do
69
- subject.encode(@fbin).must_equal(@bin_buffer)
63
+ buf = ""
64
+ subject.encode(buf, @fbin)
65
+ buf.must_equal(@bin_buffer)
70
66
  end
71
67
  end