cddl 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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: