cddl 0.6.0 → 0.6.1
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.
- 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
|