kwalify 0.5.1 → 0.6.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 (109) hide show
  1. data/ChangeLog +24 -19
  2. data/README.txt +51 -51
  3. data/bin/kwalify +2 -2
  4. data/contrib/inline-require +151 -0
  5. data/contrib/kwalify +2850 -0
  6. data/doc-api/classes/CommandOptionError.html +184 -0
  7. data/doc-api/classes/CommandOptionParser.html +325 -0
  8. data/doc-api/classes/Kwalify.html +270 -0
  9. data/doc-api/classes/Kwalify/AssertionError.html +148 -0
  10. data/doc-api/classes/Kwalify/BaseError.html +296 -0
  11. data/doc-api/classes/Kwalify/CommandOptionError.html +168 -0
  12. data/doc-api/classes/Kwalify/ErrorHelper.html +218 -0
  13. data/doc-api/classes/Kwalify/HashInterface.html +240 -0
  14. data/doc-api/classes/Kwalify/KwalifyError.html +111 -0
  15. data/doc-api/classes/Kwalify/Main.html +336 -0
  16. data/doc-api/classes/Kwalify/MetaValidator.html +432 -0
  17. data/doc-api/classes/Kwalify/Parser.html +155 -0
  18. data/doc-api/classes/Kwalify/PlainYamlParser.html +520 -0
  19. data/doc-api/classes/Kwalify/PlainYamlParser/Alias.html +165 -0
  20. data/doc-api/classes/Kwalify/Rule.html +411 -0
  21. data/doc-api/classes/Kwalify/SchemaError.html +148 -0
  22. data/doc-api/classes/Kwalify/Types.html +301 -0
  23. data/doc-api/classes/Kwalify/ValidationError.html +148 -0
  24. data/doc-api/classes/Kwalify/Validator.html +311 -0
  25. data/doc-api/classes/Kwalify/YamlParser.html +535 -0
  26. data/doc-api/classes/Kwalify/YamlSyntaxError.html +168 -0
  27. data/doc-api/classes/Test.html +107 -0
  28. data/doc-api/classes/Test/Unit.html +101 -0
  29. data/doc-api/classes/YamlHelper.html +259 -0
  30. data/doc-api/created.rid +1 -0
  31. data/doc-api/files/__/README_txt.html +179 -0
  32. data/doc-api/files/kwalify/errors_rb.html +114 -0
  33. data/doc-api/files/kwalify/main_rb.html +117 -0
  34. data/doc-api/files/kwalify/messages_rb.html +107 -0
  35. data/doc-api/files/kwalify/meta-validator_rb.html +117 -0
  36. data/doc-api/files/kwalify/rule_rb.html +116 -0
  37. data/doc-api/files/kwalify/types_rb.html +114 -0
  38. data/doc-api/files/kwalify/util/assert-text-equal_rb.html +115 -0
  39. data/doc-api/files/kwalify/util/hash-interface_rb.html +107 -0
  40. data/doc-api/files/kwalify/util/option-parser_rb.html +107 -0
  41. data/doc-api/files/kwalify/util/testcase-helper_rb.html +115 -0
  42. data/doc-api/files/kwalify/util/yaml-helper_rb.html +114 -0
  43. data/doc-api/files/kwalify/validator_rb.html +117 -0
  44. data/doc-api/files/kwalify/yaml-parser_rb.html +117 -0
  45. data/doc-api/files/kwalify_rb.html +120 -0
  46. data/doc-api/fr_class_index.html +50 -0
  47. data/doc-api/fr_file_index.html +41 -0
  48. data/doc-api/fr_method_index.html +109 -0
  49. data/doc-api/index.html +24 -0
  50. data/doc-api/rdoc-style.css +208 -0
  51. data/doc/users-guide.html +693 -193
  52. data/examples/address-book/Makefile +5 -0
  53. data/examples/address-book/address-book.schema.yaml +2 -1
  54. data/examples/invoice/Makefile +5 -0
  55. data/examples/invoice/invoice.schema.yaml +3 -2
  56. data/examples/tapkit/Makefile +5 -0
  57. data/examples/tapkit/main.rb +7 -0
  58. data/examples/tapkit/tapkit.schema.yaml +6 -1
  59. data/lib/kwalify.rb +3 -3
  60. data/lib/kwalify/errors.rb +2 -2
  61. data/lib/kwalify/main.rb +161 -84
  62. data/lib/kwalify/messages.rb +17 -11
  63. data/lib/kwalify/meta-validator.rb +11 -2
  64. data/lib/kwalify/rule.rb +13 -3
  65. data/lib/kwalify/templates/genclass-java.eruby +195 -0
  66. data/lib/kwalify/templates/genclass-ruby.eruby +84 -0
  67. data/lib/kwalify/types.rb +18 -18
  68. data/lib/kwalify/util/assert-text-equal.rb +44 -0
  69. data/lib/kwalify/util/hash-interface.rb +37 -0
  70. data/lib/kwalify/util/option-parser.rb +2 -2
  71. data/lib/kwalify/util/testcase-helper.rb +112 -0
  72. data/lib/kwalify/util/yaml-helper.rb +2 -2
  73. data/lib/kwalify/validator.rb +2 -2
  74. data/lib/kwalify/yaml-parser.rb +12 -9
  75. data/test/test-main.rb +77 -78
  76. data/test/test-main.yaml +543 -769
  77. data/test/test-metavalidator.rb +27 -47
  78. data/test/test-metavalidator.yaml +21 -2
  79. data/test/test-rule.rb +6 -39
  80. data/test/test-rule.yaml +2 -2
  81. data/test/test-validator.rb +36 -869
  82. data/test/test-validator.yaml +28 -20
  83. data/test/test-yamlparser.rb +30 -1248
  84. data/test/test-yamlparser.yaml +138 -110
  85. data/test/test.rb +33 -13
  86. data/test/tmp.dir/Context.java +40 -0
  87. data/test/tmp.dir/Group.java +33 -0
  88. data/test/tmp.dir/User.java +43 -0
  89. data/test/tmp.dir/action1.document +18 -0
  90. data/test/tmp.dir/action1.schema +32 -0
  91. data/test/tmp.dir/action2.document +18 -0
  92. data/test/tmp.dir/action2.schema +32 -0
  93. data/test/tmp.dir/emacs.document +6 -0
  94. data/test/tmp.dir/emacs.schema +6 -0
  95. data/test/tmp.dir/meta1.document +0 -0
  96. data/test/tmp.dir/meta1.schema +3 -0
  97. data/test/tmp.dir/meta2.document +0 -0
  98. data/test/tmp.dir/meta2.schema +3 -0
  99. data/test/tmp.dir/silent1.document +3 -0
  100. data/test/tmp.dir/silent1.schema +3 -0
  101. data/test/tmp.dir/silent2.document +7 -0
  102. data/test/tmp.dir/silent2.schema +3 -0
  103. data/test/tmp.dir/stream.invalid +8 -0
  104. data/test/tmp.dir/stream.schema +3 -0
  105. data/test/tmp.dir/stream.valid +8 -0
  106. data/test/tmp.dir/untabify.document +5 -0
  107. data/test/tmp.dir/untabify.schema +10 -0
  108. metadata +98 -12
  109. data/lib/kwalify/util/assert-diff.rb +0 -44
@@ -0,0 +1,44 @@
1
+ ###
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
+ ### copyright(c) 2005 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ require 'test/unit/testcase'
8
+ require 'tempfile'
9
+
10
+
11
+ class Test::Unit::TestCase # :nodoc:
12
+
13
+ def assert_text_equal(expected, actual, message=nil, options={}) # :nodoc:
14
+ diffopt = options[:diffopt] || '-u'
15
+ flag_cut = options.key?(:cut) ? options[:key] : true
16
+
17
+ if expected == actual
18
+ assert(true)
19
+ return
20
+ end
21
+ if expected[-1] != ?\n || actual[-1] != ?\n
22
+ expected += "\n"
23
+ actual += "\n"
24
+ end
25
+ begin
26
+ expfile = Tempfile.new(".expected.")
27
+ expfile.write(expected); expfile.flush()
28
+ actfile = Tempfile.new(".actual.")
29
+ actfile.write(actual); actfile.flush()
30
+ diff = `diff #{diffopt} #{expfile.path} #{actfile.path}`
31
+ ensure
32
+ expfile.close(true) if expfile
33
+ actfile.close(true) if actfile
34
+ end
35
+ # cut 1st & 2nd lines
36
+ message = (flag_cut ? diff.gsub(/\A.*\n.*\n/, '') : diff) unless message
37
+ #raise Test::Unit::AssertionFailedError.new(message)
38
+ assert_block(message) { false } # or assert(false, message)
39
+ end
40
+
41
+ alias assert_equal_with_diff assert_text_equal # for compatibility
42
+ alias assert_text_equals assert_text_equal # for typo
43
+
44
+ end
@@ -0,0 +1,37 @@
1
+ ###
2
+ ### $Rev: 51 $$
3
+ ### $Release: 0.6.0 $
4
+ ### copyright(c) 2005 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ module Kwalify
8
+
9
+ module HashInterface
10
+
11
+ def [](key)
12
+ instance_variable_get("@{key}")
13
+ end
14
+
15
+ def []=(key, val)
16
+ instance_variable_set("@{key}", val)
17
+ end
18
+
19
+ def keys()
20
+ instance_variables.collect { |name| name[1, name.length-1] }
21
+ end
22
+
23
+ def key?(key)
24
+ instance_variables.include?("@#{key}")
25
+ end
26
+
27
+ def each
28
+ instance_variables.each do |name|
29
+ key = name[1, name.length-1]
30
+ val = instance_varaible_get(name)
31
+ yield(key, val)
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 41 $
3
- ### $Release: 0.5.1 $
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -0,0 +1,112 @@
1
+ ###
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
+ ### copyright(c) 2005 kuwata-lab all rights reserved.
5
+ ###
6
+
7
+ require 'yaml'
8
+ require 'test/unit/testcase'
9
+
10
+
11
+ class Test::Unit::TestCase # :nodoc:
12
+
13
+
14
+ def self._untabify(str, width=8) # :nodoc:
15
+ sb = []
16
+ str.scan(/(.*?)\t/m) do |s, |
17
+ len = (n = s.rindex(?\n)) ? s.length - n - 1 : s.length
18
+ sb << s << (" " * (width - len % width))
19
+ end
20
+ str = (sb << $').join if $'
21
+ return str
22
+ end
23
+
24
+
25
+ def self.load_yaml_documents(filename, options={}) # :nodoc:
26
+ str = File.read(filename)
27
+ if filename =~ /\.rb$/
28
+ str =~ /^__END__$/ or raise "*** error: __END__ is not found in '#{filename}'."
29
+ str = $'
30
+ end
31
+ str = _untabify(str) unless options[:tabify] == false
32
+ #
33
+ identkey = options[:identkey] || 'name'
34
+ list = []
35
+ table = {}
36
+ YAML.load_documents(str) do |ydoc|
37
+ if ydoc.is_a?(Hash)
38
+ list << ydoc
39
+ elsif ydoc.is_a?(Array)
40
+ list += ydoc
41
+ else
42
+ raise "*** invalid ydoc: #{ydoc.inspect}"
43
+ end
44
+ end
45
+ #
46
+ list.each do |ydoc|
47
+ ident = ydoc[identkey]
48
+ ident or raise "*** #{identkey} is not found."
49
+ table[ident] and raise "*** #{identkey} '#{ident}' is duplicated."
50
+ table[ident] = ydoc
51
+ yield(ydoc) if block_given?
52
+ end
53
+ #
54
+ return list
55
+ end
56
+
57
+
58
+ def self.load_yaml_testdata(filename, options={}) # :nodoc:
59
+ identkey = options[:identkey] || 'name'
60
+ testmethod = options[:testmethod] || '_test'
61
+ lang = options[:lang]
62
+ load_yaml_documents(filename, options) do |ydoc|
63
+ ident = ydoc[identkey]
64
+ s = "def test_#{ident}\n"
65
+ ydoc.each do |key, val|
66
+ if key[-1] == ?*
67
+ key = key[0, key.length-1]
68
+ val = val[lang]
69
+ end
70
+ s << " @#{key} = #{val.inspect}\n"
71
+ end
72
+ s << " #{testmethod}\n"
73
+ s << "end\n"
74
+ #$stderr.puts "*** #{method_name()}(): eval_str=<<'END'\n#{s}END" if $DEBUG
75
+ module_eval s # not eval!
76
+ end
77
+ end
78
+
79
+
80
+ def self.method_name # :nodoc:
81
+ return (caller[0] =~ /in `(.*?)'/) && $1
82
+ end
83
+
84
+
85
+ def self.load_yaml_testdata_with_each_lang(filename, options={}) # :nodoc:
86
+ identkey = options[:identkey] || 'name'
87
+ testmethod = options[:testmethod] || '_test'
88
+ langs = defined?($lang) && $lang ? [ $lang ] : options[:langs]
89
+ langs or raise "*** #{method_name()}(): option ':langs' is required."
90
+ #
91
+ load_yaml_documents(filename, options) do |ydoc|
92
+ ident = ydoc[identkey]
93
+ langs.each do |lang|
94
+ s = "def test_#{ident}_#{lang}\n"
95
+ s << " @lang = #{lang.inspect}\n"
96
+ ydoc.each do |key, val|
97
+ if key[-1] == ?*
98
+ key = key[0, key.length-1]
99
+ val = val[lang]
100
+ end
101
+ s << " @#{key} = #{val.inspect}\n"
102
+ end
103
+ s << " #{testmethod}\n"
104
+ s << "end\n"
105
+ #$stderr.puts "*** #{method_name()}(): eval_str=<<'END'\n#{s}END" if $DEBUG
106
+ module_eval s # not eval!
107
+ end
108
+ end
109
+ end
110
+
111
+
112
+ end
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 41 $
3
- ### $Release: 0.5.1 $
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 42 $
3
- ### $Release: 0.5.1 $
2
+ ### $Rev: 48 $
3
+ ### $Release: 0.6.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 44 $
3
- ### $Release: 0.5.1 $
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -193,7 +193,7 @@ module Kwalify
193
193
  case value
194
194
  when /^-( |$)/
195
195
  data = parse_sequence(value_start_column, value)
196
- when /^(:?[-.\w]+|'.*?'|".*?"|=|<<) *:( |$)/
196
+ when /^(:?:?[-.\w]+\*?|'.*?'|".*?"|=|<<) *:( |$)/
197
197
  #when /^:?["']?[-.\w]+["']? *:( |$)/ #'
198
198
  data = parse_mapping(value_start_column, value)
199
199
  when /^\[/, /^\{/
@@ -471,12 +471,13 @@ module Kwalify
471
471
 
472
472
  def parse_block_text(column, value)
473
473
  assert value =~ /^[>|\|]/
474
- value =~ /^([>|\|])([-+]?)\s*(.*)$/
474
+ value =~ /^([>|\|])([-+]?)(\d+)?\s*(.*)$/
475
475
  char = $1
476
476
  indicator = $2
477
477
  sep = char == "|" ? "\n" : " "
478
- #text = $3.empty? ? '' : $3 + sep
479
- text = $3
478
+ margin = $3 && !$3.empty? ? $3.to_i : nil
479
+ #text = $4.empty? ? '' : $4 + sep
480
+ text = $4
480
481
  s = ''
481
482
  empty = ''
482
483
  min_indent = -1
@@ -493,8 +494,9 @@ module Kwalify
493
494
  empty = ''
494
495
  end
495
496
  end
496
- s << empty if indicator == '+'
497
+ s << empty if indicator == '+' && char != '>'
497
498
  s[-1] = "" if indicator == '-'
499
+ min_indent = column + margin - 1 if margin
498
500
  if min_indent > 0
499
501
  sp = ' ' * min_indent
500
502
  s.gsub!(/^#{sp}/, '')
@@ -502,6 +504,7 @@ module Kwalify
502
504
  if char == '>'
503
505
  s.gsub!(/([^\n])\n([^\n])/, '\1 \2')
504
506
  s.gsub!(/\n(\n+)/, '\1')
507
+ s << empty if indicator == '+'
505
508
  end
506
509
  getline() if current_line() =~ /^\s*\#/
507
510
  return create_scalar(text + s)
@@ -547,11 +550,11 @@ module Kwalify
547
550
 
548
551
  def parse_mapping(column, value)
549
552
  #assert value =~ /^(:?["']?[-.\w]+["']? *):(( +)(.*))?$/ #'
550
- assert value =~ /^((?::?[-.\w]+|'.*?'|".*?"|=|<<) *):(( +)(.*))?$/
553
+ assert value =~ /^((?::?[-.\w]+\*?|'.*?'|".*?"|=|<<) *):(( +)(.*))?$/
551
554
  map = create_mapping() # {}
552
555
  while true
553
556
  #unless value =~ /^(:?["']?[-.\w]+["']? *):(( +)(.*))?$/ #'
554
- unless value =~ /^((?::?[-.\w]+|'.*?'|".*?"|=|<<) *):(( +)(.*))?$/
557
+ unless value =~ /^((?::?[-.\w]+\*?|'.*?'|".*?"|=|<<) *):(( +)(.*))?$/
555
558
  #* key=:mapping_noitem msg="mapping item is expected."
556
559
  raise syntax_error(:mapping_noitem)
557
560
  end
@@ -1,21 +1,13 @@
1
1
  ###
2
- ### $Rev: 42 $
3
- ### $Release: 0.5.1 $
2
+ ### $Rev: 51 $
3
+ ### $Release: 0.6.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
7
- unless defined?(TESTDIR)
8
- TESTDIR = File.dirname(__FILE__)
9
- libdir = File.dirname(TESTDIR) + "/lib"
10
- $LOAD_PATH << libdir << TESTDIR
11
- end
7
+ require File.dirname(__FILE__) + '/test.rb'
8
+
9
+ require 'kwalify/main'
12
10
 
13
- require 'test/unit'
14
- require 'test/unit/ui/console/testrunner'
15
- require 'kwalify'
16
- require 'kwalify/util/assert-diff'
17
- require 'kwalify/main.rb'
18
- require 'yaml'
19
11
 
20
12
  module Kwalify
21
13
  class Main
@@ -23,64 +15,19 @@ module Kwalify
23
15
  end
24
16
  end
25
17
 
18
+
26
19
  class File
27
20
  def self.move(filename, dirname)
28
- File.rename(filename, "#{dirname}/filename")
21
+ File.rename(filename, "#{dirname}/#{filename}")
29
22
  end
30
23
  end
31
24
 
25
+
32
26
  class MainTest < Test::Unit::TestCase
33
27
 
34
28
  ## define test methods
35
29
  filename = __FILE__.sub(/\.rb$/, ".yaml")
36
- str = File.read(filename)
37
- @@docs = {}
38
- YAML.load_documents(str) do |doc|
39
- name = doc['name']
40
- !@@docs.key?(name) or raise "*** test name '#{name}' is duplicated."
41
- @@docs[name] = doc
42
- doc.each do |key, val|
43
- doc[$1] ||= val['ruby'] if key =~ /\A(.*)\*\z/
44
- end
45
- s = <<-END
46
- def test_#{name}
47
- doc = @@docs['#{name}']
48
- @name = doc['name']
49
- @desc = doc['desc']
50
- @args = doc['args']
51
- @inspect = doc['inspect']
52
- @exception = #{doc['exception'] ? "Kwalify::" + doc['exception'] : 'nil'}
53
- @error_symbol = doc['error_symbol']
54
- @expected = doc['expected']
55
- @schema = doc['schema']
56
- @document = doc['document']
57
- @valid = doc['valid']
58
- @invalid = doc['invalid']
59
- @valid_out = doc['valid-out']
60
- @invalid_out = doc['invalid-out']
61
- @method = doc['method']
62
- # @options = doc['options']
63
-
64
- case @method
65
- when 'parseOptions'
66
- _test_parse_options()
67
- when 'execute'
68
- raise "*** #{doc['name']}: args is not defined." unless doc['args']
69
- raise "*** #{doc['name']}: expected is not defined." unless doc['expected']
70
- _test_execute()
71
- when 'validation'
72
- _test_validation()
73
- raise "*** #{doc['name']}: schema is not defined." unless doc['schema']
74
- raise "*** #{doc['name']}: valid is not defined." unless doc['valid']
75
- raise "*** #{doc['name']}: invalid is not defined." unless doc['invalid']
76
-
77
- else
78
- raise "*** #{@method}: invalid method name."
79
- end
80
- end
81
- END
82
- eval s
83
- end
30
+ load_yaml_testdata(filename, :lang=>'ruby')
84
31
 
85
32
 
86
33
  ## temporary directory
@@ -88,6 +35,28 @@ class MainTest < Test::Unit::TestCase
88
35
  Dir.mkdir(@@tmpdir) unless test(?d, @@tmpdir)
89
36
 
90
37
 
38
+ def _test
39
+ if @exception
40
+ @exception_class = Kwalify.const_get(@exception)
41
+ end
42
+ case @method
43
+ when 'parseOptions'
44
+ _test_parse_options()
45
+ when 'execute'
46
+ _test_execute()
47
+ when 'validation'
48
+ raise "*** #{@name}: schema is not defined." unless @schema
49
+ raise "*** #{@name}: valid is not defined." unless @valid
50
+ raise "*** #{@name}: invalid is not defined." unless @invalid
51
+ _test_validation()
52
+ when 'action'
53
+ _test_action()
54
+ else
55
+ raise "*** #{@method}: invalid method name."
56
+ end
57
+ end
58
+
59
+
91
60
  ## validation test
92
61
  def _test_validation()
93
62
  return if $target && $target != @name
@@ -108,12 +77,12 @@ class MainTest < Test::Unit::TestCase
108
77
  main = Kwalify::Main.new('kwalify')
109
78
  args = [ "-lf", schema_filename, valid_filename ]
110
79
  output = main.execute(args)
111
- assert_equal_with_diff(@valid_out, output)
80
+ assert_text_equal(@valid_out, output)
112
81
  #
113
82
  main = Kwalify::Main.new('kwalify')
114
83
  args = [ "-lf", schema_filename, invalid_filename ]
115
84
  output = main.execute(args)
116
- assert_equal_with_diff(@invalid_out, output)
85
+ assert_text_equal(@invalid_out, output)
117
86
  #
118
87
  ensure
119
88
  File.move(schema_filename, @@tmpdir)
@@ -122,31 +91,33 @@ class MainTest < Test::Unit::TestCase
122
91
  end
123
92
  end
124
93
 
94
+
125
95
  ## execute test
126
96
  def _test_execute()
127
97
  return if $target && $target != @name
128
- raise "*** args is required when method is 'execute'." unless @args
129
- raise "*** expected is required when method is 'execute'." unless @expected
98
+ raise "*** #{@name}: args is required." unless @args
99
+ raise "*** #{@name}: expected is require." unless @expected
130
100
  #
131
101
  File.open("#{@name}.schema", 'w') { |f| f.write(@schema) } if @schema
132
102
  File.open("#{@name}.document", 'w') { |f| f.write(@document) } if @document
133
103
  #
134
104
  begin
135
105
  main = Kwalify::Main.new("kwalify")
136
- if (! @exception)
137
- actual = main.execute(@args)
138
- assert_equal_with_diff(@expected, actual)
139
- else
140
- assert_raise(@exception) do
106
+ if @exception_class
107
+ assert_raise(@exception_class) do
141
108
  main.execute(@args)
142
109
  end
110
+ else
111
+ actual = main.execute(@args)
112
+ assert_text_equal(@expected, actual)
143
113
  end
144
114
  ensure
145
115
  File.move("#{@name}.schema", @@tmpdir) if @schema
146
116
  File.move("#{@name}.document", @@tmpdir) if @document
147
117
  end
148
118
  end
149
-
119
+
120
+
150
121
  ## command option test
151
122
  def _test_parse_options()
152
123
  return if $target && $target != @name
@@ -159,10 +130,10 @@ class MainTest < Test::Unit::TestCase
159
130
  s << " - #{filename}\n"
160
131
  end
161
132
  actual = s
162
- assert_equal_with_diff(@inspect, actual)
133
+ assert_text_equal(@expected, actual)
163
134
  rescue => ex
164
135
  #klass = @exception
165
- if @exception && ex.class == @exception
136
+ if @exception_class && ex.class == @exception_class
166
137
  # OK
167
138
  assert_equal(@error_symbol, ex.error_symbol) if ex.respond_to?(:error_symbol)
168
139
  else
@@ -172,8 +143,36 @@ class MainTest < Test::Unit::TestCase
172
143
  end
173
144
  end
174
145
 
175
- end
176
146
 
177
- #if $0 == __FILE__
178
- # Test::Unit::UI::Console::TestRunner.run(ValidatorTest)
179
- #end
147
+ ## execute test
148
+ def _test_action()
149
+ return if $target && $target != @name
150
+ raise "*** #{@name}: args is required." unless @args
151
+ raise "*** #{@name}: expected is require." unless @expected
152
+ #
153
+ File.open("#{@name}.schema", 'w') { |f| f.write(@schema) } if @schema
154
+ File.open("#{@name}.document", 'w') { |f| f.write(@document) } if @document
155
+ #
156
+ begin
157
+ main = Kwalify::Main.new("kwalify")
158
+ actual = main.execute(@args)
159
+ if @output_files
160
+ assert(actual.nil? || actual=='')
161
+ @output_files.each do |filename|
162
+ actual = File.read(filename)
163
+ assert_text_equal(@expected[filename], actual)
164
+ end
165
+ else
166
+ assert_text_equal(@expected, actual)
167
+ end
168
+ ensure
169
+ File.move("#{@name}.schema", @@tmpdir) if @schema
170
+ File.move("#{@name}.document", @@tmpdir) if @document
171
+ @output_files.each do |filename|
172
+ File.move(filename, @@tmpdir) if @document
173
+ end if @output_files
174
+ end
175
+ end
176
+
177
+
178
+ end