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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/cddl.gemspec +2 -2
  3. data/lib/cddl.rb +58 -1
  4. data/test/test-cddl.rb +90 -0
  5. metadata +7 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 386a3cb063acd7d41cf0add52b2350a063056213
4
- data.tar.gz: d21891d0fd81627d7b8e935e8d739ad9f6b8f4ed
3
+ metadata.gz: 1f2111d3dcde0aece7da0e1cf03c4272247aee32
4
+ data.tar.gz: b67e1acb473b033a2297c8a14fe94a3729316f06
5
5
  SHA512:
6
- metadata.gz: 78156a8375111291be6a625d8b2216a708632aeca2f2d1ad91f9bc08b4db01f5234b40191670b0a73116ae25cec5ccacaaa11253126e5de6825628a173030177
7
- data.tar.gz: 4b1538133346cec19f7ff95f3ed2a5ef3dd00f480c7c662c16440fe63b1eedf433450815a4f8fb1ed01d093e24fd12b83f376e99b21bc073d544b05b390457af
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.7.4'
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.7.4
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-04-20 00:00:00.000000000 Z
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: 1.1.0
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: 1.1.0
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.4.8
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: