File: test-metavalidator.rb

package info (click to toggle)
kwalify 0.7.2-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 2,352 kB
  • sloc: ruby: 8,428; xml: 170; makefile: 37; java: 36
file content (81 lines) | stat: -rw-r--r-- 2,163 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
###
### $Rev$
### $Release: 0.7.2 $
### copyright(c) 2005-2010 kuwata-lab all rights reserved.
###

require File.dirname(__FILE__) + '/test.rb'


class MetaValidatorTest < Test::Unit::TestCase

  ## define test methods
  filename = __FILE__.sub(/\.rb$/, '.yaml')
  load_yaml_documents(filename) do |ydoc|
    name = ydoc['name']
    ydoc.map do |key, val|
      val = val['ruby'] if key =~ /(.*)\*$/
      [key, val]
    end.to_h
    s = <<-END
         def test_meta_#{name}
            @name    = #{ydoc['name'].inspect}
            @desc    = #{ydoc['desc'].inspect}
            @schema  = #{ydoc['schema'].inspect}
            @meta_msg = #{ydoc['meta-msg'].inspect}
            # @rule_msg = #{ydoc['rule-msg'].inspect}
            @test_type = :meta
            _test
         end
      END
    module_eval s if ydoc['meta-msg']
    s = <<-END
         def test_rule_#{name}
            @name    = #{ydoc['name'].inspect}
            @desc    = #{ydoc['desc'].inspect}
            @schema  = #{ydoc['schema'].inspect}
            # @meta_msg = #{ydoc['meta-msg'].inspect}
            @rule_msg = #{ydoc['rule-msg'].inspect}
            @test_type = :rule
            _test
         end
      END
    module_eval s if ydoc['rule-msg']
  end


  ## execute test
  def _test()
    return if $target && $target != @name
    #schema = YAML.load(@schema)
    parser = Kwalify::YamlParser.new(@schema)
    schema = parser.parse()
    case @test_type
    when :meta
      meta_validator = Kwalify::MetaValidator.instance()
      errors = meta_validator.validate(schema)
      parser.set_errors_linenum(errors)
      errors.sort!
      expected = @meta_msg
    when :rule
      errors = []
      begin
        rule = Kwalify::Validator.new(schema)
      rescue Kwalify::KwalifyError => error
        errors << error
      end
      expected = @rule_msg
    end
    actual = ''
    errors.each do |error|
      raise error if error.is_a?(Kwalify::AssertionError)
      actual << "%-20s: [%s] %s\n" % [error.error_symbol.inspect, error.path, error.message]
    end
    if $print
      print actual
    else
      assert_text_equal(expected, actual)
    end
  end

end