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.
- data/.gitignore +1 -0
- data/Rakefile +6 -0
- data/codec.gemspec +1 -1
- data/lib/codec.rb +8 -0
- data/lib/codec/base.rb +8 -47
- data/lib/codec/bitmap.rb +42 -36
- data/lib/codec/composed.rb +39 -66
- data/lib/codec/field.rb +1 -1
- data/lib/codec/fix.rb +83 -65
- data/lib/codec/logger.rb +2 -2
- data/lib/codec/packed.rb +40 -91
- data/lib/codec/prefix.rb +71 -71
- data/lib/codec/tlv.rb +116 -111
- data/lib/codec/version.rb +1 -1
- data/test/lib/codec/bitmap_test.rb +29 -20
- data/test/lib/codec/composed_test.rb +37 -23
- data/test/lib/codec/eightbits_test.rb +18 -14
- data/test/lib/codec/fix_test.rb +47 -35
- data/test/lib/codec/pckd_test.rb +33 -37
- data/test/lib/codec/prefix_test.rb +45 -67
- data/test/lib/codec/tlv_test.rb +41 -36
- data/test/test_helper.rb +3 -0
- metadata +14 -14
@@ -2,71 +2,43 @@ require_relative '../../test_helper'
|
|
2
2
|
|
3
3
|
describe Codec::Prefixedlength do
|
4
4
|
before do
|
5
|
-
@length = Codec::Numasc.new(
|
6
|
-
@content = Codec::String.new(
|
5
|
+
@length = Codec::Numasc.new(3)
|
6
|
+
@content = Codec::String.new(0)
|
7
7
|
@field = Codec::Field.new
|
8
8
|
@field.set_value("0012AB")
|
9
|
+
@f = Codec::Field.new
|
9
10
|
@buffer = "0060012AB"
|
10
11
|
end
|
11
12
|
|
12
|
-
subject { Codec::Prefixedlength.new(
|
13
|
-
|
14
|
-
it "must be a Prefixedlength codec" do
|
15
|
-
subject.must_be_instance_of(Codec::Prefixedlength)
|
16
|
-
end
|
13
|
+
subject { Codec::Prefixedlength.new(@length,@content) }
|
17
14
|
|
18
15
|
it "must generate a field with computed value" do
|
19
|
-
subject.decode(@buffer)
|
16
|
+
subject.decode(@buffer,@f)
|
17
|
+
@f.get_value.must_equal("0012AB")
|
20
18
|
end
|
21
19
|
|
22
|
-
it "
|
23
|
-
subject.decode(@buffer)
|
20
|
+
it "remaining buffer must be empty" do
|
21
|
+
subject.decode(@buffer,@f)
|
22
|
+
@buffer.must_be_empty
|
24
23
|
end
|
25
24
|
|
26
25
|
it "must encode value prefixed with length" do
|
27
|
-
|
26
|
+
buffer = ""
|
27
|
+
subject.encode(buffer, @field)
|
28
|
+
buffer.must_equal("0060012AB")
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
describe Codec::Prefixedlength do
|
32
|
-
before do
|
33
|
-
@length = Codec::Numasc.new('length',3)
|
34
|
-
@content = Codec::Strpck.new('content',0)
|
35
|
-
@field = Codec::Field.new
|
36
|
-
@field.set_value("0012AB")
|
37
|
-
@buffer = "006" +["0012AB"].pack("H*")
|
38
|
-
end
|
39
|
-
|
40
|
-
subject { Codec::Prefixedlength.new('Test_lvar',@length,@content) }
|
41
|
-
|
42
|
-
it "must be a Prefixedlength codec" do
|
43
|
-
subject.must_be_instance_of(Codec::Prefixedlength)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "must generate a field with computed value" do
|
47
|
-
subject.decode(@buffer).first.get_value.upcase.must_equal("0012AB")
|
48
|
-
end
|
49
|
-
|
50
|
-
it "must also return remaining data" do
|
51
|
-
subject.decode(@buffer).last.must_equal("")
|
52
|
-
end
|
53
|
-
|
54
|
-
it "must encode value prefixed with length" do
|
55
|
-
subject.encode(@field).must_equal(@buffer)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
32
|
describe Codec::Headerlength do
|
61
33
|
before do
|
62
|
-
tag = Codec::Binary.new(
|
63
|
-
length = Codec::Numbin.new(
|
64
|
-
value = Codec::Numbin.new(
|
65
|
-
tlv = Codec::Tlv.new(
|
66
|
-
@header = Codec::BaseComposed.new
|
34
|
+
tag = Codec::Binary.new(1)
|
35
|
+
length = Codec::Numbin.new(1)
|
36
|
+
value = Codec::Numbin.new(0)
|
37
|
+
tlv = Codec::Tlv.new(length,tag,value)
|
38
|
+
@header = Codec::BaseComposed.new
|
67
39
|
@header.add_sub_codec('H_TAG',tag)
|
68
|
-
@header.add_sub_codec('H_TLV',Codec::Prefixedlength.new(
|
69
|
-
@content = Codec::String.new(
|
40
|
+
@header.add_sub_codec('H_TLV',Codec::Prefixedlength.new(length,tlv))
|
41
|
+
@content = Codec::String.new(0)
|
70
42
|
len = 6
|
71
43
|
field_head = ['HEADER', [['H_TAG','AA'],['H_TLV',[['01',25],['02',len]]]]]
|
72
44
|
field_content = ['CONTENT','STRING']
|
@@ -79,28 +51,31 @@ describe Codec::Headerlength do
|
|
79
51
|
field_array = [field_content]
|
80
52
|
@field_without_head = Codec::Field.from_array('Test_Headerlength',field_array)
|
81
53
|
@buffer = ["AA06010119020106","STRING"].pack("H*A*")
|
54
|
+
@working_field = Codec::Field.new('Test_Headerlength')
|
82
55
|
end
|
83
56
|
|
84
|
-
subject { Codec::Headerlength.new('
|
85
|
-
|
86
|
-
it "must be a Headerlength codec" do
|
87
|
-
subject.must_be_instance_of(Codec::Headerlength)
|
88
|
-
end
|
57
|
+
subject { Codec::Headerlength.new(@header, 'HEADER',@content,'CONTENT','.H_TLV.02') }
|
89
58
|
|
90
59
|
it "must decode a field with computed value" do
|
91
|
-
subject.decode(@buffer)
|
60
|
+
subject.decode(@buffer,@working_field)
|
61
|
+
@working_field.must_equal(@field_with_length)
|
92
62
|
end
|
93
63
|
|
94
64
|
it "must also return remaining data" do
|
95
|
-
|
65
|
+
buffer = @buffer + "REMAIN"
|
66
|
+
subject.decode(buffer, @working_field)
|
67
|
+
buffer.must_equal("REMAIN")
|
96
68
|
end
|
97
69
|
|
98
70
|
it "must encode buffer with composed field [header,content]" do
|
99
|
-
|
71
|
+
buffer = ""
|
72
|
+
subject.encode(buffer, @field_without_length)
|
73
|
+
buffer.must_equal(@buffer)
|
100
74
|
end
|
101
75
|
|
102
76
|
it "must raise EncodingException if missing header field" do
|
103
|
-
|
77
|
+
buf =""
|
78
|
+
proc { subject.encode(buf, @field_without_head)}.must_raise(Codec::EncodingException)
|
104
79
|
end
|
105
80
|
|
106
81
|
end
|
@@ -111,31 +86,34 @@ describe Codec::Tagged do
|
|
111
86
|
@field2 = Codec::Field.new('02','ABC')
|
112
87
|
@buffer1 = "01012"
|
113
88
|
@buffer2 = "02ABC"
|
89
|
+
@working_field = Codec::Field.new
|
114
90
|
end
|
115
91
|
|
116
|
-
subject { c = Codec::Tagged.new(
|
117
|
-
c.add_sub_codec('01',Codec::Numasc.new(
|
118
|
-
c.add_sub_codec('02',Codec::String.new(
|
92
|
+
subject { c = Codec::Tagged.new(Codec::String.new(2))
|
93
|
+
c.add_sub_codec('01',Codec::Numasc.new(3))
|
94
|
+
c.add_sub_codec('02',Codec::String.new(3))
|
119
95
|
c
|
120
96
|
}
|
121
97
|
|
122
|
-
it "must be a Tagged codec" do
|
123
|
-
subject.must_be_instance_of(Codec::Tagged)
|
124
|
-
end
|
125
|
-
|
126
98
|
it "must generate a field with computed value" do
|
127
|
-
subject.decode(@buffer1)
|
99
|
+
subject.decode(@buffer1,@working_field)
|
100
|
+
@working_field.must_equal(@field1)
|
128
101
|
end
|
129
102
|
|
130
103
|
it "must generate a field with computed value" do
|
131
|
-
subject.decode(@buffer2)
|
104
|
+
subject.decode(@buffer2,@working_field)
|
105
|
+
@working_field.must_equal(@field2)
|
132
106
|
end
|
133
107
|
|
134
108
|
it "must encode value prefixed with length" do
|
135
|
-
|
109
|
+
buffer = ""
|
110
|
+
subject.encode(buffer, @field1)
|
111
|
+
buffer.must_equal(@buffer1)
|
136
112
|
end
|
137
113
|
|
138
114
|
it "must encode value prefixed with length" do
|
139
|
-
|
115
|
+
buffer =""
|
116
|
+
subject.encode(buffer, @field2)
|
117
|
+
buffer.must_equal(@buffer2)
|
140
118
|
end
|
141
119
|
end
|
data/test/lib/codec/tlv_test.rb
CHANGED
@@ -1,37 +1,38 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
|
-
|
2
|
+
|
3
3
|
describe Codec::Tlv do
|
4
|
-
subject { Codec::Tlv.new(
|
5
|
-
Codec::Binary.new(
|
4
|
+
subject { Codec::Tlv.new(Codec::Numbin.new(1),
|
5
|
+
Codec::Binary.new(1),
|
6
|
+
Codec::Binary.new(0))
|
6
7
|
}
|
7
8
|
|
8
9
|
before do
|
9
10
|
@buffer = ["950580000000009C0100"].pack("H*")
|
10
11
|
@field = Codec::Field.from_array('Tlv',[['95','8000000000'],['9C','00']])
|
11
|
-
|
12
|
-
|
13
|
-
it "must be a Tlv codec" do
|
14
|
-
subject.must_be_instance_of(Codec::Tlv)
|
12
|
+
@wf = Codec::Field.new('Tlv')
|
15
13
|
end
|
16
14
|
|
17
15
|
it "must generate composed field from buffer" do
|
18
|
-
subject.decode(@buffer)
|
19
|
-
|
16
|
+
subject.decode(@buffer,@wf)
|
17
|
+
@wf.must_equal(@field)
|
20
18
|
end
|
21
19
|
|
22
20
|
it "must generate buffer from composed field" do
|
23
|
-
|
21
|
+
buff = ""
|
22
|
+
subject.encode(buff, @field)
|
23
|
+
buff.must_equal(@buffer)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe Codec::Tlv do
|
28
|
-
subject { Codec::Tlv.new(
|
29
|
-
Codec::Binary.new(
|
28
|
+
subject { Codec::Tlv.new( Codec::Numbin.new(1),
|
29
|
+
Codec::Binary.new(1),
|
30
|
+
Codec::Binary.new(0))
|
30
31
|
}
|
31
32
|
|
32
33
|
before do
|
33
|
-
tvr_codec = Codec::BaseComposed.new(
|
34
|
-
one_byte_codec = Codec::Binary.new(
|
34
|
+
tvr_codec = Codec::BaseComposed.new()
|
35
|
+
one_byte_codec = Codec::Binary.new(1)
|
35
36
|
(1..5).each do |i|
|
36
37
|
tvr_codec.add_sub_codec("BIT#{i}",one_byte_codec)
|
37
38
|
end
|
@@ -41,63 +42,67 @@ describe Codec::Tlv do
|
|
41
42
|
@field = Codec::Field.from_array('Tlv',
|
42
43
|
[['95',[['BIT1','80'],['BIT2','00'],['BIT3','00'],
|
43
44
|
['BIT4','00'],['BIT5','00']]],['9C','00']])
|
45
|
+
@wf = Codec::Field.new('Tlv')
|
44
46
|
end
|
45
47
|
|
46
|
-
it "must be a Tlv codec" do
|
47
|
-
subject.must_be_instance_of(Codec::Tlv)
|
48
|
-
end
|
49
|
-
|
50
48
|
it "must generate composed field from buffer" do
|
51
|
-
|
52
|
-
|
49
|
+
Codec::Logger.debug {"====== start failing test =========\n"}
|
50
|
+
subject.decode(@buffer,@wf)
|
51
|
+
@wf.must_equal(@field)
|
52
|
+
Codec::Logger.debug {"====== end failing test =========\n"}
|
53
53
|
end
|
54
54
|
|
55
55
|
it "must generate buffer from composed field" do
|
56
|
-
|
56
|
+
buff = ""
|
57
|
+
subject.encode(buff, @field)
|
58
|
+
buff.must_equal(@buffer)
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
60
62
|
|
61
63
|
describe Codec::Tlv do
|
62
64
|
subject {
|
63
|
-
tag = Codec::Binary.new(
|
64
|
-
length = Codec::Numbin.new(
|
65
|
-
value = Codec::Numbin.new(
|
66
|
-
Codec::Tlv.new(
|
65
|
+
tag = Codec::Binary.new(1)
|
66
|
+
length = Codec::Numbin.new(1)
|
67
|
+
value = Codec::Numbin.new(0)
|
68
|
+
Codec::Tlv.new(length,tag,value) }
|
67
69
|
before do
|
68
70
|
@buffer = ["9501009C010181020200"].pack("H*")
|
69
71
|
@field = Codec::Field.from_array('TAG',
|
70
|
-
[['95',0],['9C',1],['81',512]])
|
72
|
+
[['95',0],['9C',1],['81',512]])
|
73
|
+
@wf = Codec::Field.new('TAG')
|
71
74
|
end
|
72
75
|
|
73
76
|
it "must decode TLV buffer to field" do
|
74
|
-
subject.decode(@buffer)
|
77
|
+
subject.decode(@buffer,@wf)
|
78
|
+
@wf.must_equal(@field)
|
75
79
|
end
|
76
80
|
|
77
81
|
it "must encode TLV field to buffer" do
|
78
|
-
|
82
|
+
buff = ""
|
83
|
+
subject.encode(buff, @field)
|
84
|
+
buff.must_equal(@buffer)
|
79
85
|
end
|
80
86
|
end
|
81
87
|
|
82
88
|
describe Codec::Bertlv do
|
83
|
-
subject { Codec::Bertlv.new
|
89
|
+
subject { Codec::Bertlv.new }
|
84
90
|
|
85
91
|
before do
|
92
|
+
@wf = Codec::Field.new('Bertlv')
|
86
93
|
@tlv_buf = ["9F100A0102030405060708091095058000000000"].pack("H*")
|
87
94
|
@field = Codec::Field.from_array('Bertlv',
|
88
95
|
[['9F10','01020304050607080910'],['95','8000000000']])
|
89
96
|
end
|
90
97
|
|
91
|
-
it "must be a Tlv codec" do
|
92
|
-
subject.must_be_instance_of(Codec::Bertlv)
|
93
|
-
end
|
94
|
-
|
95
98
|
it "must generate composed field from buffer" do
|
96
|
-
subject.decode(@tlv_buf)
|
97
|
-
|
99
|
+
subject.decode(@tlv_buf,@wf)
|
100
|
+
@wf.must_equal(@field)
|
98
101
|
end
|
99
102
|
|
100
103
|
it "must generate buffer from composed field" do
|
101
|
-
|
104
|
+
buff = ""
|
105
|
+
subject.encode(buff, @field)
|
106
|
+
buff.must_equal(@tlv_buf)
|
102
107
|
end
|
103
108
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,42 +9,42 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: log4r
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
22
|
-
type: :
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: bundler
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
37
|
+
version: '1.3'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
45
|
+
version: '1.3'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rake
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|