File: test-main.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 (157 lines) | stat: -rw-r--r-- 4,128 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
###
### $Rev$
### $Release: 0.7.2 $
### copyright(c) 2005-2010 kuwata-lab all rights reserved.
###

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

require 'kwalify/main'


module Kwalify
  class Main
    public :_parse_argv
  end
end


class File
  def self.move(filename, dirname)
    File.rename(filename, "#{dirname}/#{filename}")
  end
end


class MainTest < Test::Unit::TestCase

  ## define test methods
  filename = __FILE__.sub(/\.rb$/, ".yaml")
  load_yaml_testdata(filename, :lang=>'ruby')


  ## temporary directory
  @@tmpdir = "tmp.dir"
  Dir.mkdir(@@tmpdir) unless test(?d, @@tmpdir)


  def _test
    if @exception
      classname = @exception =~ /Kwalify::(.*)/ ? $1 : @exception
      @exception_class = Kwalify.const_get(classname)
    end
    case @method
    when 'parseOptions'
      _test_parse_options()
    when 'execute'
      _test_execute()
    when 'validation'
      raise "*** #{@name}: schema is not defined."  unless @schema
      raise "*** #{@name}: valid is not defined."   unless @valid
      raise "*** #{@name}: invalid is not defined." unless @invalid
      _test_validation()
    #when 'action'
    #  _test_action()
    else
      raise "*** #{@method}: invalid method name."
    end
  end


  ## validation test
  def _test_validation()
    return if $target && $target != @name
    raise "*** schema is not defined." unless @schema
    raise "*** valid is not defined." unless @valid
    raise "*** invalid is not defined." unless @invalid
    #
    schema_filename  = @name + ".schema"
    valid_filename   = @name + ".valid"
    invalid_filename = @name + ".invalid"
    #
    begin
      #
      File.open(schema_filename,  'w') { |f| f.write(@schema) }
      File.open(valid_filename,   'w') { |f| f.write(@valid) }
      File.open(invalid_filename, 'w') { |f| f.write(@invalid) }
      #
      $stdout = StringWriter.new
      main = Kwalify::Main.new('kwalify')
      args = [ "-lf", schema_filename, valid_filename ]
      main.execute(args)
      output = $stdout;  $stdout = STDOUT
      assert_text_equal(@valid_out, output)
      #
      $stdout = StringWriter.new
      main = Kwalify::Main.new('kwalify')
      args = [ "-lf", schema_filename, invalid_filename ]
      main.execute(args)
      output = $stdout;  $stdout = STDOUT
      assert_text_equal(@invalid_out, output)
      #
    ensure
      File.move(schema_filename,  @@tmpdir)
      File.move(valid_filename,   @@tmpdir)
      File.move(invalid_filename, @@tmpdir)
    end
  end


  ## execute test
  def _test_execute()
    return if $target && $target != @name
    raise "*** #{@name}: args is required."    unless @args
    raise "*** #{@name}: expected is require." unless @expected
    #
    File.open("#{@name}.schema", 'w')   { |f| f.write(@schema)   } if @schema
    File.open("#{@name}.document", 'w') { |f| f.write(@document) } if @document
    #
    begin
      main = Kwalify::Main.new("kwalify")
      if @exception_class
        $stdout = StringWriter.new
        ex = assert_raise(@exception_class) do
          main.execute(@args)
        end
        assert_text_equal(@errormsg, ex.message) if @errormsg
        $stdout = STDOUT
      else
        $stdout = StringWriter.new
        main.execute(@args)
        actual = $stdout;  $stdout = STDOUT
        assert_text_equal(@expected, actual)
      end
    ensure
      File.move("#{@name}.schema",   @@tmpdir) if @schema
      File.move("#{@name}.document", @@tmpdir) if @document
    end
  end


  ## command option test
  def _test_parse_options()
    return if $target && $target != @name
    main = Kwalify::Main.new("kwalify")
    begin
      filenames = main._parse_argv(@args)
      s = main._inspect()
      s << "filenames:\n"
      filenames.each do |filename|
        s << "  - #{filename}\n"
      end
      actual = s
      assert_text_equal(@expected, actual)
    rescue => ex
      #klass = @exception
      if @exception_class && ex.class == @exception_class
        # OK
        assert_equal(@error_symbol, ex.error_symbol) if ex.respond_to?(:error_symbol)
      else
        # NG
        raise ex
      end
    end
  end


end