cddl 0.7.4 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cddl.gemspec +2 -2
- data/lib/cddl.rb +58 -1
- data/test/test-cddl.rb +90 -0
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f2111d3dcde0aece7da0e1cf03c4272247aee32
|
4
|
+
data.tar.gz: b67e1acb473b033a2297c8a14fe94a3729316f06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ee61cf0a7772ee11af3623afc996b991715f594c638b35946ffc56fef1b3e85930c8ea04b8e390e28fe611741674c9a5eeac6a9393c3a492e047428c41c20ef
|
7
|
+
data.tar.gz: 1008940ffc91f0b2fec830cac7bf34aa32eb3c9fde85f9d2bc6157c3429405bd4f786d29f8793649fd89778fa1bc1f75d0e797568de8536a21346508d781d060
|
data/cddl.gemspec
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'cddl'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.8.0'
|
4
4
|
s.summary = "CDDL generator and validator."
|
5
5
|
s.description = %{A parser, generator, and validator for CDDL}
|
6
6
|
s.add_dependency('cbor-diag')
|
7
7
|
s.add_dependency('abnc')
|
8
8
|
s.add_dependency('json')
|
9
|
-
s.add_dependency('regexp-examples', '1.1.0')
|
9
|
+
s.add_dependency('regexp-examples') # , '1.1.0')
|
10
10
|
s.add_dependency('colorize')
|
11
11
|
s.files = `git ls-files`.split("\n").grep(/^[a-z]/)
|
12
12
|
s.files = Dir['lib/**/*.rb'] + %w(cddl.gemspec) + Dir['data/**/*.abnf'] + Dir['data/**/*.cddl'] + Dir['test-data/**/*.cddl'] + Dir['test/**/*.rb']
|
data/lib/cddl.rb
CHANGED
@@ -422,6 +422,47 @@ module CDDL
|
|
422
422
|
a |= (1 << v)
|
423
423
|
end
|
424
424
|
end
|
425
|
+
when :default
|
426
|
+
# Hmm.
|
427
|
+
unless $default_warned
|
428
|
+
warn "*** Ignoring .default for now."
|
429
|
+
$default_warned = true
|
430
|
+
end
|
431
|
+
generate1(target, inmap)
|
432
|
+
when :eq
|
433
|
+
content = generate1(control)
|
434
|
+
if validate1(content, where)
|
435
|
+
return content
|
436
|
+
end
|
437
|
+
fail "Not smart enough to generate #{where}"
|
438
|
+
when :lt, :le, :gt, :ge, :ne
|
439
|
+
if Array === target && target[0] == :prim
|
440
|
+
content = generate1(control)
|
441
|
+
try = if Numeric === content
|
442
|
+
content = Integer(content)
|
443
|
+
case target[1]
|
444
|
+
when 0
|
445
|
+
case where[1]
|
446
|
+
when :lt
|
447
|
+
rand(0...content)
|
448
|
+
when :le
|
449
|
+
rand(0..content)
|
450
|
+
end
|
451
|
+
end
|
452
|
+
end
|
453
|
+
if validate1(try, where)
|
454
|
+
return try
|
455
|
+
else
|
456
|
+
warn "HUH gen #{where.inspect} #{try.inspect}" unless try.nil?
|
457
|
+
end
|
458
|
+
end
|
459
|
+
32.times do
|
460
|
+
content = generate1(target)
|
461
|
+
if validate1(content, where)
|
462
|
+
return content
|
463
|
+
end
|
464
|
+
end
|
465
|
+
fail "Not smart enough to generate #{where}"
|
425
466
|
when :regexp
|
426
467
|
regexp = generate1(control)
|
427
468
|
unless target == [:prim, 3] && String === regexp
|
@@ -660,6 +701,8 @@ module CDDL
|
|
660
701
|
end
|
661
702
|
end
|
662
703
|
|
704
|
+
OPERATORS = {lt: :<, le: :<=, gt: :>, ge: :>=, eq: :==, ne: :!=}
|
705
|
+
|
663
706
|
def validate1(d, where)
|
664
707
|
if ENV["CDDL_TRACE"]
|
665
708
|
puts "DATA: #{d.inspect}"
|
@@ -733,6 +776,19 @@ module CDDL
|
|
733
776
|
ann if ok
|
734
777
|
end
|
735
778
|
end
|
779
|
+
when :default
|
780
|
+
# Hmm.
|
781
|
+
unless $default_warned
|
782
|
+
warn "*** Ignoring .default for now."
|
783
|
+
$default_warned = true
|
784
|
+
end
|
785
|
+
ann
|
786
|
+
when :lt, :le, :gt, :ge, :eq, :ne
|
787
|
+
op = OPERATORS[where[1]]
|
788
|
+
ok, v, _vt = extract_value(control)
|
789
|
+
if ok
|
790
|
+
ann if d.send(op, v) rescue nil # XXX Focus ArgumentError
|
791
|
+
end
|
736
792
|
when :regexp
|
737
793
|
ann if (
|
738
794
|
if String === d
|
@@ -1069,7 +1125,8 @@ module CDDL
|
|
1069
1125
|
|
1070
1126
|
BRACE = {"{" => :map, "[" => :array}
|
1071
1127
|
RANGE_EXCLUDE_END = {".." => false, "..." => true}
|
1072
|
-
SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp, :cbor, :cborseq, :within, :and
|
1128
|
+
SUPPORTED_ANNOTATIONS = [:bits, :size, :regexp, :cbor, :cborseq, :within, :and,
|
1129
|
+
:default, :lt, :le, :gt, :ge, :eq, :ne]
|
1073
1130
|
|
1074
1131
|
def type1(n, canbegroup = false)
|
1075
1132
|
# puts "NVALUE #{n.value.inspect}"
|
data/test/test-cddl.rb
CHANGED
@@ -64,6 +64,24 @@ HERE
|
|
64
64
|
assert_equal [0x4711, 0b1011001110001111000], parser.generate
|
65
65
|
end
|
66
66
|
|
67
|
+
def test_generate_le
|
68
|
+
parser = CDDL::Parser.new <<HERE
|
69
|
+
test = uint .le 10
|
70
|
+
HERE
|
71
|
+
g = parser.generate
|
72
|
+
p [:GLE, g]
|
73
|
+
assert((0..10) === g)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_generate_ne
|
77
|
+
parser = CDDL::Parser.new <<HERE
|
78
|
+
test = uint .ne 10
|
79
|
+
HERE
|
80
|
+
g = parser.generate
|
81
|
+
p [:GNE, g]
|
82
|
+
assert_not_equal 10, g
|
83
|
+
end
|
84
|
+
|
67
85
|
def test_validate_person_occurs
|
68
86
|
person = <<HERE
|
69
87
|
person = (
|
@@ -587,6 +605,78 @@ HERE
|
|
587
605
|
assert parser.validate_for_test(1.2)
|
588
606
|
end
|
589
607
|
|
608
|
+
def test_aaaa_validate_number_le
|
609
|
+
parser = CDDL::Parser.new <<HERE
|
610
|
+
test = number .le 2
|
611
|
+
HERE
|
612
|
+
# pp parser.rules
|
613
|
+
assert parser.validate_for_test(1)
|
614
|
+
assert parser.validate_for_test(1.2)
|
615
|
+
assert parser.validate_for_test(2)
|
616
|
+
assert parser.validate_for_test(2.0)
|
617
|
+
refute parser.validate_for_test(2.1, false)
|
618
|
+
end
|
619
|
+
|
620
|
+
def test_aaaa_validate_number_lt
|
621
|
+
parser = CDDL::Parser.new <<HERE
|
622
|
+
test = number .lt 2
|
623
|
+
HERE
|
624
|
+
# pp parser.rules
|
625
|
+
assert parser.validate_for_test(1)
|
626
|
+
assert parser.validate_for_test(1.2)
|
627
|
+
refute parser.validate_for_test(2, false)
|
628
|
+
refute parser.validate_for_test(2.0, false)
|
629
|
+
refute parser.validate_for_test(2.1, false)
|
630
|
+
end
|
631
|
+
|
632
|
+
def test_aaaa_validate_number_ne
|
633
|
+
parser = CDDL::Parser.new <<HERE
|
634
|
+
test = number .ne 2
|
635
|
+
HERE
|
636
|
+
# pp parser.rules
|
637
|
+
assert parser.validate_for_test(1)
|
638
|
+
assert parser.validate_for_test(1.2)
|
639
|
+
refute parser.validate_for_test(2, false)
|
640
|
+
refute parser.validate_for_test(2.0, false)
|
641
|
+
assert parser.validate_for_test(2.1)
|
642
|
+
end
|
643
|
+
|
644
|
+
def test_aaaa_validate_number_default
|
645
|
+
parser = CDDL::Parser.new <<HERE
|
646
|
+
test = number .default 2
|
647
|
+
HERE
|
648
|
+
# pp parser.rules
|
649
|
+
assert parser.validate_for_test(1)
|
650
|
+
assert parser.validate_for_test(1.2)
|
651
|
+
assert parser.validate_for_test(2)
|
652
|
+
assert parser.validate_for_test(2.0)
|
653
|
+
assert parser.validate_for_test(2.1)
|
654
|
+
end
|
655
|
+
|
656
|
+
def test_aaaa_validate_number_eq
|
657
|
+
parser = CDDL::Parser.new <<HERE
|
658
|
+
test = number .eq 2
|
659
|
+
HERE
|
660
|
+
# pp parser.rules
|
661
|
+
refute parser.validate_for_test(1, false)
|
662
|
+
refute parser.validate_for_test(1.2, false)
|
663
|
+
assert parser.validate_for_test(2)
|
664
|
+
assert parser.validate_for_test(2.0)
|
665
|
+
refute parser.validate_for_test(2.1, false)
|
666
|
+
end
|
667
|
+
|
668
|
+
|
669
|
+
def test_aaaa_validate_string_eq
|
670
|
+
parser = CDDL::Parser.new <<HERE
|
671
|
+
test = (text/bytes) .eq "foo"
|
672
|
+
HERE
|
673
|
+
# pp parser.rules
|
674
|
+
refute parser.validate_for_test(1, false)
|
675
|
+
assert parser.validate_for_test("foo")
|
676
|
+
assert parser.validate_for_test("foo".b) # XXX Feature!
|
677
|
+
refute parser.validate_for_test("bar", false)
|
678
|
+
end
|
679
|
+
|
590
680
|
def test_validate_number_key
|
591
681
|
parser = CDDL::Parser.new <<HERE
|
592
682
|
test = [test1, test2, test3]
|
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.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: regexp-examples
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: colorize
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,9 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
147
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
148
|
+
rubygems_version: 2.5.1
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: CDDL generator and validator.
|
152
152
|
test_files: []
|
153
|
-
has_rdoc:
|