cddl 0.7.4 → 0.8.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.
- 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:
|