cddl 0.8.5 → 0.8.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/cddl.gemspec +1 -1
- data/data/cddl.abnf +6 -1
- data/lib/cddl.rb +13 -12
- data/test-data/ambig.cddl +2 -0
- data/test-data/kevin5.cddl +5 -0
- data/test-data/map-group.cddl +13 -0
- data/test-data/mapkey.cddl +2 -0
- data/test-data/toerless0.cddl +14 -0
- data/test-data/toerless1.cddl +11 -0
- data/test/test-cddl.rb +50 -2
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8ba44459ee2f7bf888218b60e75e52c6dbf90b38cb498b3de091ae7e5e525213
|
4
|
+
data.tar.gz: 8fcb86e2209fb4264f55663a47a37a9b150347f32704af94f0be27357d012d18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65f7adeb64757a58a0b548a5c33fcf78ca0e3bb9ae442032d40ddc45c098de7471657437772f1fed07716bcb829467b75d8eaf4982ed04be78ce2abbca780684
|
7
|
+
data.tar.gz: 6274c24c143aed5cba8d35f17e0beab84fe6af515fd4e44c11133bf3296c68f84cbd8f526616ad6cc2b8ff397f56d60ea2cf16e1d09990dc7f9aec50be5929ef
|
data/cddl.gemspec
CHANGED
data/data/cddl.abnf
CHANGED
@@ -50,7 +50,9 @@ occur = [uint] "*" [uint]
|
|
50
50
|
/ "?"
|
51
51
|
|
52
52
|
uint = ["0x" / "0b"] "0"
|
53
|
-
/
|
53
|
+
/ DIGIT1 *DIGIT
|
54
|
+
/ "0x" 1*HEXDIG
|
55
|
+
/ "0b" 1*BINDIG
|
54
56
|
|
55
57
|
value = number
|
56
58
|
/ text
|
@@ -77,6 +79,9 @@ ALPHA = %x41-5A / %x61-7A
|
|
77
79
|
EALPHA = %x41-5A / %x61-7A / "@" / "_" / "$"
|
78
80
|
DIGIT = %x30-39
|
79
81
|
DIGIT1 = %x31-39
|
82
|
+
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
83
|
+
BINDIG = %x30-31
|
84
|
+
|
80
85
|
S = *WS
|
81
86
|
WS = SP / NL
|
82
87
|
SP = %x20
|
data/lib/cddl.rb
CHANGED
@@ -320,7 +320,8 @@ module CDDL
|
|
320
320
|
end
|
321
321
|
when :member
|
322
322
|
st = where[1]
|
323
|
-
|
323
|
+
fudge = 4 * (1 - (@recursion / MAX_RECURSE.to_f))**3 # get less generate-happy with more recursion
|
324
|
+
en = [where[2], [st, fudge].max].min # truncate to fudge unless must be more
|
324
325
|
st += rand(en + 1 - st) if en != st
|
325
326
|
kr = where[3]
|
326
327
|
vr = where[4]
|
@@ -526,7 +527,7 @@ module CDDL
|
|
526
527
|
[:prim, 7, 23] => [true, :undefined, :undefined],
|
527
528
|
}
|
528
529
|
|
529
|
-
def extract_value(t)
|
530
|
+
def extract_value(t) # []
|
530
531
|
if vt = VALUE_TYPE[t[0]]
|
531
532
|
[true, t[1], vt]
|
532
533
|
elsif v = SIMPLE_VALUE[t]
|
@@ -661,7 +662,7 @@ module CDDL
|
|
661
662
|
# this is mostly quadratic; let's do the linear thing if possible
|
662
663
|
simple, simpleval = extract_value(k)
|
663
664
|
if simple
|
664
|
-
|
665
|
+
puts "SIMPLE: #{d_check.inspect} #{simpleval}" if ENV["CDDL_TRACE"]
|
665
666
|
# add occurrence check; check that val is present in the first place
|
666
667
|
actual = d.fetch(simpleval, :not_found)
|
667
668
|
if actual == :not_found
|
@@ -673,7 +674,7 @@ module CDDL
|
|
673
674
|
end
|
674
675
|
end
|
675
676
|
else
|
676
|
-
|
677
|
+
puts "COMPLEX: #{k.inspect} #{simple.inspect} #{simpleval.inspect}" if ENV["CDDL_TRACE"]
|
677
678
|
keys = d_check.keys
|
678
679
|
ta, keys = keys.partition{ |key| validate1(key, k)}
|
679
680
|
# XXX check ta.size against s/e
|
@@ -964,12 +965,12 @@ module CDDL
|
|
964
965
|
else
|
965
966
|
val = eval(n.to_s)
|
966
967
|
# warn val
|
967
|
-
|
968
|
-
when Integer; :int
|
969
|
-
when Numeric; :float
|
970
|
-
when String; :text
|
968
|
+
case val
|
969
|
+
when Integer; [:int, val]
|
970
|
+
when Numeric; [:float, val]
|
971
|
+
when String; [:text, val.force_encoding(Encoding::UTF_8)]
|
971
972
|
else fail "huh? value #{val.inspect}"
|
972
|
-
|
973
|
+
end
|
973
974
|
end
|
974
975
|
end
|
975
976
|
|
@@ -1009,7 +1010,7 @@ module CDDL
|
|
1009
1010
|
fail [n, n.children, mk, mk.children].inspect
|
1010
1011
|
end
|
1011
1012
|
name = bw.to_s
|
1012
|
-
[[:member, *occ, [:text, name], type(nt)]]
|
1013
|
+
[[:member, *occ, [:text, name.force_encoding(Encoding::UTF_8)], type(nt)]]
|
1013
1014
|
end
|
1014
1015
|
else
|
1015
1016
|
t = if nbw = nt.bareword
|
@@ -1021,8 +1022,8 @@ module CDDL
|
|
1021
1022
|
else
|
1022
1023
|
type(nt, true) # type can actually be a group here!
|
1023
1024
|
end
|
1024
|
-
|
1025
|
-
if t[0] == :grpent && (
|
1025
|
+
pp ["t is", t] if ENV["CDDL_TRACE"]
|
1026
|
+
if t[0] == :grpent && (occ == [1, 1])
|
1026
1027
|
# go through the members here and multiply the occs
|
1027
1028
|
t1 = t[1..-1].flatten(1)
|
1028
1029
|
if t1[0] == :recurse_grpent
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
foo = { 1*relement }
|
3
|
+
|
4
|
+
context-element = 4711
|
5
|
+
|
6
|
+
relement = $$relement .within relement-generic
|
7
|
+
|
8
|
+
relement-generic = ( relement-codepoint => relement-value ) ; [1]
|
9
|
+
relement-codepoint = uint ; [1]
|
10
|
+
relement-value = any ; [1]
|
11
|
+
|
12
|
+
$$relement //= ( &(sender-loop-count:1) => 1..255 ) ; [2]
|
13
|
+
$$relement //= ( &(srv-element:2) => context-element ) ; [2]
|
14
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
foo = foo-specific .within foo-generic
|
2
|
+
foo-specific = { 1*$$relement }
|
3
|
+
foo-generic = { 1*relement-generic }
|
4
|
+
|
5
|
+
relement-generic = ( relement-codepoint => relement-value ) ; [1]
|
6
|
+
relement-codepoint = uint ; [1]
|
7
|
+
relement-value = any ; [1]
|
8
|
+
|
9
|
+
$$relement //= ( &(sender-loop-count:1) => 1..255 ) ; [2]
|
10
|
+
$$relement //= ( &(srv-element:2) => context-element ) ; [2]
|
11
|
+
context-element = "and so on"
|
data/test/test-cddl.rb
CHANGED
@@ -59,9 +59,9 @@ class TestABNF < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
def test_generate_hex_bin
|
61
61
|
parser = CDDL::Parser.new <<HERE
|
62
|
-
test = [0x4711, 0b1011001110001111000]
|
62
|
+
test = [0x4711, 0xabcDEF, 0b1011001110001111000]
|
63
63
|
HERE
|
64
|
-
assert_equal [0x4711, 0b1011001110001111000], parser.generate
|
64
|
+
assert_equal [0x4711, 0xabcDEF, 0b1011001110001111000], parser.generate
|
65
65
|
end
|
66
66
|
|
67
67
|
def test_generate_le
|
@@ -202,6 +202,54 @@ HERE
|
|
202
202
|
assert parser.validate_for_test({"one" => 1, "two" => 1}, false)
|
203
203
|
end
|
204
204
|
|
205
|
+
def test_validate_a_nontrivial_group_map
|
206
|
+
parser = CDDL::Parser.new <<HERE
|
207
|
+
test = {* (text => 1, text => 2)}
|
208
|
+
HERE
|
209
|
+
assert parser.validate_for_test({})
|
210
|
+
assert parser.validate_for_test({"one" => 2, "two" => 1})
|
211
|
+
assert parser.validate_for_test({"one" => 1, "two" => 2})
|
212
|
+
refute parser.validate_for_test({"one" => 1}, false)
|
213
|
+
assert parser.validate_for_test({"one" => 1, "two" => 2, "uno" => 1, "due" => 2})
|
214
|
+
end
|
215
|
+
|
216
|
+
|
217
|
+
def test_murray
|
218
|
+
parser = CDDL::Parser.new <<HERE
|
219
|
+
a = {
|
220
|
+
b
|
221
|
+
}
|
222
|
+
|
223
|
+
b = (
|
224
|
+
(x: int // y: int), z: int
|
225
|
+
)
|
226
|
+
HERE
|
227
|
+
assert parser.validate_for_test({})
|
228
|
+
assert parser.validate_for_test({"x" => 2, "z" => 1})
|
229
|
+
assert parser.validate_for_test({"y" => 1, "z" => 2})
|
230
|
+
refute parser.validate_for_test({"z" => 1}, false)
|
231
|
+
assert parser.validate_for_test({"one" => 1, "two" => 2, "uno" => 1, "due" => 2})
|
232
|
+
end
|
233
|
+
|
234
|
+
|
235
|
+
def test_murray_workaround
|
236
|
+
parser = CDDL::Parser.new <<HERE
|
237
|
+
a = {
|
238
|
+
b
|
239
|
+
}
|
240
|
+
|
241
|
+
b = ( z: int
|
242
|
+
(x: int // y: int)
|
243
|
+
)
|
244
|
+
HERE
|
245
|
+
assert parser.validate_for_test({})
|
246
|
+
assert parser.validate_for_test({"x" => 2, "z" => 1})
|
247
|
+
assert parser.validate_for_test({"y" => 1, "z" => 2})
|
248
|
+
refute parser.validate_for_test({"z" => 1}, false)
|
249
|
+
assert parser.validate_for_test({"one" => 1, "two" => 2, "uno" => 1, "due" => 2})
|
250
|
+
end
|
251
|
+
|
252
|
+
|
205
253
|
def test_validate_a_string
|
206
254
|
parser = CDDL::Parser.new <<HERE
|
207
255
|
test = [* one: "one"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cddl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- test-data/7071-concise.cddl
|
99
99
|
- test-data/7071-verbose.cddl
|
100
100
|
- test-data/a.cddl
|
101
|
+
- test-data/ambig.cddl
|
101
102
|
- test-data/b.cddl
|
102
103
|
- test-data/badaddr.cddl
|
103
104
|
- test-data/basic_syntax_example.cddl
|
@@ -117,10 +118,15 @@ files:
|
|
117
118
|
- test-data/ifmap-metadata-2.2v9_fh-cabo.cddl
|
118
119
|
- test-data/ifmap2.cddl
|
119
120
|
- test-data/jcr-ex.cddl
|
121
|
+
- test-data/kevin5.cddl
|
122
|
+
- test-data/map-group.cddl
|
123
|
+
- test-data/mapkey.cddl
|
120
124
|
- test-data/minimal.cddl
|
121
125
|
- test-data/patch1.cddl
|
122
126
|
- test-data/reused_named_group.cddl
|
123
127
|
- test-data/structure.cddl
|
128
|
+
- test-data/toerless0.cddl
|
129
|
+
- test-data/toerless1.cddl
|
124
130
|
- test-data/two_anonymous_groups.cddl
|
125
131
|
- test-data/wrong1.cddl
|
126
132
|
- test-data/wrong1a.cddl
|
@@ -148,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
154
|
version: '0'
|
149
155
|
requirements: []
|
150
156
|
rubyforge_project:
|
151
|
-
rubygems_version: 2.6
|
157
|
+
rubygems_version: 2.7.6
|
152
158
|
signing_key:
|
153
159
|
specification_version: 4
|
154
160
|
summary: CDDL generator and validator.
|