cddl 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cddl.gemspec +1 -1
- data/data/cddl.abnf +1 -1
- data/lib/cddl.rb +18 -6
- data/test/test-cddl.rb +25 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e2adafcd62e2e19c64d3b561c3f4fa020551ded
|
4
|
+
data.tar.gz: 42cfe0856afa556943bdcf10c8805bf9acf87d13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e3aaa3ec40b05a3b0afb50a13e7cf169c33cb55634289379bc481a7831fc4faf490536828097e490a172a776dc7b2c30f3b83f975595dfdc857f5b15f8c4988
|
7
|
+
data.tar.gz: 30308d4da1eb610ebba0d9fd67906b4615a2d701bed333a0afc4695b92d2c2a49f0a6819c61a58784c26e834e57ea496f6aaf214c314c274624bd553aec25c75
|
data/cddl.gemspec
CHANGED
data/data/cddl.abnf
CHANGED
@@ -34,7 +34,7 @@ group = grpchoice S *("//" S grpchoice S)
|
|
34
34
|
grpchoice = *grpent
|
35
35
|
|
36
36
|
grpent = [occur S] [memberkey S] type optcom
|
37
|
-
/ [occur S] groupname [genericarg] optcom
|
37
|
+
/ [occur S] groupname [genericarg] optcom ; preempted by previous
|
38
38
|
/ [occur S] "(" S group S ")" optcom
|
39
39
|
|
40
40
|
memberkey = type1 S "=>"
|
data/lib/cddl.rb
CHANGED
@@ -236,9 +236,14 @@ module CDDL
|
|
236
236
|
vr = where[4]
|
237
237
|
if inmap
|
238
238
|
unless kr
|
239
|
-
|
239
|
+
case vr[0]
|
240
|
+
when :grpent
|
240
241
|
fail "grpent in map #{vr.inspect}" unless vr.size == 2
|
241
|
-
g = generate1(vr[1], true)
|
242
|
+
g = Array.new(st) { generate1(vr[1], true) }.flatten(1)
|
243
|
+
# warn "GGG #{g.inspect}"
|
244
|
+
return g
|
245
|
+
when :grpchoice
|
246
|
+
g = Array.new(st) { generate1(vr, true) }.flatten(1)
|
242
247
|
# warn "GGG #{g.inspect}"
|
243
248
|
return g
|
244
249
|
else
|
@@ -448,10 +453,17 @@ module CDDL
|
|
448
453
|
}
|
449
454
|
when :member
|
450
455
|
unless k
|
451
|
-
|
456
|
+
case v[0]
|
457
|
+
when :grpent
|
458
|
+
entries = v[1..-1]
|
459
|
+
when :grpchoice
|
460
|
+
entries = [v]
|
461
|
+
else
|
462
|
+
fail "member name not known for group entry #{r} in map"
|
463
|
+
end
|
452
464
|
d_check1 = d_check.dup
|
453
|
-
# XXX this is ignoring occur = [s, _e]
|
454
|
-
return map_check(d, d_check1,
|
465
|
+
# XXX this is ignoring occur = [s, _e] FIXME!
|
466
|
+
return map_check(d, d_check1, entries) && d_check.replace(d_check1)
|
455
467
|
end
|
456
468
|
# this is mostly quadratic; let's do the linear thing if possible
|
457
469
|
simple, simpleval = extract_value(k)
|
@@ -832,7 +844,7 @@ module CDDL
|
|
832
844
|
end
|
833
845
|
when :recurse_grpent # XXX we don't have the entry yet
|
834
846
|
when :member
|
835
|
-
fail "map entry without member key given: #{member}" unless member[3] || member[4][0] == :grpent
|
847
|
+
fail "map entry without member key given: #{member}" unless member[3] || member[4][0] == :grpent || member[4][0] == :grpchoice
|
836
848
|
else
|
837
849
|
fail ["type1 member", member].inspect unless member[0] == :member
|
838
850
|
end
|
data/test/test-cddl.rb
CHANGED
@@ -1237,6 +1237,31 @@ HERE
|
|
1237
1237
|
assert parser.validate({})
|
1238
1238
|
end
|
1239
1239
|
|
1240
|
+
def test_aaa_validate_more_socket_in_star
|
1241
|
+
parser = CDDL::Parser.new <<HERE
|
1242
|
+
tcp-header = {seq: uint, ack: uint, * $$tcp-option}
|
1243
|
+
|
1244
|
+
; later, in a different file
|
1245
|
+
|
1246
|
+
$$tcp-option //= (
|
1247
|
+
sack: [+(left: uint, right: uint)]
|
1248
|
+
)
|
1249
|
+
|
1250
|
+
; and, maybe in another file
|
1251
|
+
|
1252
|
+
$$tcp-option //= (
|
1253
|
+
sack-permitted: true
|
1254
|
+
)
|
1255
|
+
HERE
|
1256
|
+
# puts "empty_group_sp AST:"
|
1257
|
+
# puts parser.ast_debug
|
1258
|
+
# puts "simple_type_augmented RULES:"
|
1259
|
+
# pp parser.rules
|
1260
|
+
g = parser.generate
|
1261
|
+
pp g
|
1262
|
+
assert parser.validate(g)
|
1263
|
+
end
|
1264
|
+
|
1240
1265
|
|
1241
1266
|
def test_simple_type_augmented_uninitialized
|
1242
1267
|
parser = CDDL::Parser.new <<HERE
|