File: test-databinding.rb

package info (click to toggle)
kwalify 0.7.2-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, wheezy
  • size: 1,860 kB
  • ctags: 1,188
  • sloc: ruby: 8,446; xml: 170; makefile: 37; java: 36
file content (83 lines) | stat: -rw-r--r-- 2,288 bytes parent folder | download | duplicates (5)
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
82
83
###
### $Rev$
### $Release: 0.7.2 $
### copyright(c) 2005-2010 kuwata-lab all rights reserved.
###

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


class DataBindingTest < Test::Unit::TestCase


  ## define test methods
  filename = __FILE__.sub(/\.rb$/, '.yaml')
  input = Kwalify::Util.untabify(File.read(filename))
  TESTDATA1 = {}
  YAML.load_documents(input) do |ydoc|
    hash_list = ydoc
    hash_list.each do |hash|
      for key in hash.keys()
        hash[key[0..-2]] = hash.delete(key)['ruby'] if key[-1] == ?*
      end
      name = hash['name'] or raise "name is not found."
      TESTDATA1.key?(name) and raise "name '#{name}' is dupilcated."
      TESTDATA1[name] = hash
      #
      s = ''
      s <<   "def test_#{name}\n"
      s <<   "  @name = '#{name}'\n"
      for key, val in hash
        s << "  @#{key} = TESTDATA1['#{name}']['#{key}']\n"
      end
      s <<   "  _test\n"
      s <<   "end\n"
      eval s
    end
  end
  load_yaml_testdata(filename, :lang=>'ruby')


  def _test
    ## schema
    if @schema.is_a?(String)
      @schema = Kwalify::Yaml::Parser.new.parse(@schema, :untabify=>true)
      #@schema = YAML.load(Kwalify::Util.untabify(@schema))
    end
    ## data binding
    #Object.class_eval {@classdef} if @classdef
    if @classdef
      Object.class_eval @classdef
    end
    validator = Kwalify::Validator.new(@schema)
    parser = Kwalify::Yaml::Parser.new(validator, :data_binding=>true)
    @testopts ||= {}
    parser.preceding_alias = true if @testopts['preceding_alias']
    ydoc = parser.parse(@data)
    assert_equal(parser.errors, [])
    ## pp
    result = ''
    def result.write(arg); self << arg.to_s; end
    PP.pp(ydoc, result)
    ## convert object-id to portable number
    table = {}
    counter = 0
    result.gsub!(/:0x\w+/) {|m| ":0x%03d" % (table[m] ||= (counter+=1)) }
    ## assert
    #puts result
    assert_text_equal(@expected, result)
    ## path, linenum, column
    if @locations
      #t = parser.instance_variable_get("@location_table")
      #require 'pp'
      #pp t
      @locations.each do |path, expected_linenum, expected_column|
        linenum, column = parser.location(path)
        assert_equal(expected_linenum, linenum)
        assert_equal(expected_column, column)
      end
    end
  end


end