codec 0.0.12 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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