ZenTest 3.9.2 → 3.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +21 -0
- data/README.txt +3 -3
- data/bin/autotest +0 -0
- data/bin/multiruby +26 -9
- data/bin/rails_test_audit +0 -0
- data/bin/unit_diff +0 -0
- data/bin/zentest +0 -0
- data/lib/autotest.rb +15 -6
- data/lib/autotest/email_notify.rb +0 -0
- data/lib/autotest/growl.rb +1 -1
- data/lib/autotest/jabber_notify.rb +0 -0
- data/lib/autotest/menu.rb +0 -0
- data/lib/autotest/rails.rb +1 -0
- data/lib/autotest/rcov.rb +6 -0
- data/lib/autotest/redgreen.rb +13 -5
- data/lib/autotest/screen.rb +0 -5
- data/lib/test/rails/controller_test_case.rb +2 -2
- data/lib/test/rails/test_case.rb +13 -0
- data/lib/test/zentest_assertions.rb +101 -98
- data/lib/unit_diff.rb +9 -3
- data/lib/zentest.rb +1 -1
- data/test/test_autotest.rb +41 -20
- data/test/test_rails_helper_test_case.rb +3 -3
- data/test/test_rails_view_test_case.rb +19 -15
- data/test/test_unit_diff.rb +60 -15
- data/test/test_zentest.rb +1 -1
- data/test/test_zentest_assertions.rb +60 -26
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
=== 3.9.3 / 2008-06-09
|
2
|
+
|
3
|
+
* 12 minor enhancements:
|
4
|
+
|
5
|
+
* Added $RUBY env support to autotest so you can swap what ruby to run.
|
6
|
+
* Added ALL_HOOKS array to autotest for hook devs.
|
7
|
+
* Added EXCLUDED_VERSIONS to multiruby. Integrated with hoe.
|
8
|
+
* Added miniunit compatibility to unit_diff's output.
|
9
|
+
* Multiruby now determines the latest versions 1.8/1.9 automatically.
|
10
|
+
* Removed deprecated :run hook.
|
11
|
+
* Fixed zentest_assertions to be compatible with miniunit. Will phase out.
|
12
|
+
* Minor autotest plugin cleanup / fixes.
|
13
|
+
* Moved assert_callback to test/rails/test_case.rb
|
14
|
+
* Reversed assert_includes' arguments.
|
15
|
+
* Updated requirements info for other ruby impls.
|
16
|
+
* util_capture now returns strings, not iostrings.
|
17
|
+
|
18
|
+
* 1 bug fixes:
|
19
|
+
|
20
|
+
* (add|remove)_(mappings|exceptions) now all return nil to help fix autotest hooks.
|
21
|
+
|
1
22
|
=== 3.9.2 / 2008-03-20
|
2
23
|
|
3
24
|
* 4 minor enhancements:
|
data/README.txt
CHANGED
@@ -64,10 +64,10 @@ implementation.
|
|
64
64
|
|
65
65
|
== REQUIREMENTS
|
66
66
|
|
67
|
-
* Ruby 1.6
|
68
|
-
* Test::Unit
|
67
|
+
* Ruby 1.6+, JRuby 1.1.2+, or rubinius
|
68
|
+
* Test::Unit or miniunit
|
69
69
|
* Hoe
|
70
|
-
*
|
70
|
+
* rubygems
|
71
71
|
* diff.exe on windoze. Try http://gnuwin32.sourceforge.net/packages.html
|
72
72
|
|
73
73
|
== INSTALL
|
data/bin/autotest
CHANGED
File without changes
|
data/bin/multiruby
CHANGED
@@ -7,6 +7,15 @@ def run(cmd)
|
|
7
7
|
raise "ERROR: Command failed with exit code #{$?}" unless system cmd
|
8
8
|
end
|
9
9
|
|
10
|
+
def extract_latest_version url
|
11
|
+
file = URI.parse(url).read
|
12
|
+
versions = file.scan(/href="(ruby.*tar.gz)"/).flatten.reject { |s|
|
13
|
+
s =~ /preview/
|
14
|
+
}.sort_by { |s|
|
15
|
+
s.split(/\D+/).map { |i| i.to_i }
|
16
|
+
}.flatten.last
|
17
|
+
end
|
18
|
+
|
10
19
|
root_dir = File.expand_path(ENV['MULTIRUBY'] ||
|
11
20
|
File.join(ENV['HOME'], ".multiruby"))
|
12
21
|
|
@@ -22,22 +31,25 @@ Dir.chdir root_dir do
|
|
22
31
|
puts "creating #{dir}"
|
23
32
|
Dir.mkdir dir
|
24
33
|
if dir == "versions" then
|
25
|
-
|
34
|
+
warn " Downloading initial ruby tarballs to ~/.multiruby/versions:"
|
26
35
|
Dir.chdir dir do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
36
|
+
require 'open-uri'
|
37
|
+
base_url = "http://ftp.ruby-lang.org/pub/ruby"
|
38
|
+
|
39
|
+
%w(1.8 1.9).each do |v|
|
40
|
+
warn " Determining latest version for #{v}"
|
41
|
+
base = extract_latest_version("#{base_url}/#{v}/")
|
42
|
+
url = File.join base_url, v, base
|
43
|
+
warn " Fetching #{base} via HTTP... this might take a while."
|
44
|
+
open(url) do |f|
|
33
45
|
File.open base, 'w' do |out|
|
34
46
|
out.write f.read
|
35
47
|
end
|
36
48
|
end
|
37
49
|
end
|
38
50
|
end
|
39
|
-
|
40
|
-
|
51
|
+
warn " ...done"
|
52
|
+
warn " Put other ruby tarballs in ~/.multiruby/versions to use them."
|
41
53
|
end
|
42
54
|
end
|
43
55
|
end
|
@@ -89,6 +101,11 @@ end
|
|
89
101
|
|
90
102
|
versions = ENV['VERSIONS'].split(/:/) if ENV.has_key? 'VERSIONS'
|
91
103
|
|
104
|
+
if ENV.has_key? 'EXCLUDED_VERSIONS' then
|
105
|
+
excludes = Regexp.union(*ENV['EXCLUDED_VERSIONS'].split(/:/))
|
106
|
+
versions = versions.delete_if { |v| v =~ excludes }
|
107
|
+
end
|
108
|
+
|
92
109
|
results = {}
|
93
110
|
versions.each do |version|
|
94
111
|
ruby = "#{root_dir}/install/#{version}/bin/ruby"
|
data/bin/rails_test_audit
CHANGED
File without changes
|
data/bin/unit_diff
CHANGED
File without changes
|
data/bin/zentest
CHANGED
File without changes
|
data/lib/autotest.rb
CHANGED
@@ -59,6 +59,9 @@ class Autotest
|
|
59
59
|
|
60
60
|
T0 = Time.at 0
|
61
61
|
|
62
|
+
ALL_HOOKS = [ :all_good, :initialize, :interrupt, :quit, :ran_command,
|
63
|
+
:reset, :run_command, :waiting ]
|
64
|
+
|
62
65
|
HOOKS = Hash.new { |h,k| h[k] = [] }
|
63
66
|
unless defined? WINDOZE then
|
64
67
|
WINDOZE = /win32/ =~ RUBY_PLATFORM
|
@@ -195,7 +198,6 @@ class Autotest
|
|
195
198
|
|
196
199
|
def run
|
197
200
|
hook :initialize
|
198
|
-
hook :run # TODO: phase out
|
199
201
|
reset
|
200
202
|
add_sigint_handler
|
201
203
|
|
@@ -484,8 +486,9 @@ class Autotest
|
|
484
486
|
# Determine and return the path of the ruby executable.
|
485
487
|
|
486
488
|
def ruby
|
487
|
-
ruby =
|
488
|
-
|
489
|
+
ruby = ENV['RUBY']
|
490
|
+
ruby ||= File.join(Config::CONFIG['bindir'],
|
491
|
+
Config::CONFIG['ruby_install_name'])
|
489
492
|
|
490
493
|
ruby.gsub! File::SEPARATOR, File::ALT_SEPARATOR if File::ALT_SEPARATOR
|
491
494
|
|
@@ -540,6 +543,7 @@ class Autotest
|
|
540
543
|
|
541
544
|
def add_mapping(regexp, &proc)
|
542
545
|
@test_mappings << [regexp, proc]
|
546
|
+
nil
|
543
547
|
end
|
544
548
|
|
545
549
|
##
|
@@ -549,6 +553,7 @@ class Autotest
|
|
549
553
|
@test_mappings.delete_if do |k,v|
|
550
554
|
k == regexp
|
551
555
|
end
|
556
|
+
nil
|
552
557
|
end
|
553
558
|
|
554
559
|
##
|
@@ -558,6 +563,7 @@ class Autotest
|
|
558
563
|
|
559
564
|
def clear_mappings
|
560
565
|
@test_mappings.clear
|
566
|
+
nil
|
561
567
|
end
|
562
568
|
|
563
569
|
############################################################
|
@@ -570,6 +576,7 @@ class Autotest
|
|
570
576
|
def add_exception regexp
|
571
577
|
raise "exceptions already compiled" if defined? @exceptions
|
572
578
|
@exception_list << regexp
|
579
|
+
nil
|
573
580
|
end
|
574
581
|
|
575
582
|
##
|
@@ -579,6 +586,7 @@ class Autotest
|
|
579
586
|
def remove_exception regexp
|
580
587
|
raise "exceptions already compiled" if defined? @exceptions
|
581
588
|
@exception_list.delete regexp
|
589
|
+
nil
|
582
590
|
end
|
583
591
|
|
584
592
|
##
|
@@ -588,6 +596,7 @@ class Autotest
|
|
588
596
|
def clear_exceptions
|
589
597
|
raise "exceptions already compiled" if defined? @exceptions
|
590
598
|
@exception_list.clear
|
599
|
+
nil
|
591
600
|
end
|
592
601
|
|
593
602
|
##
|
@@ -617,15 +626,15 @@ class Autotest
|
|
617
626
|
|
618
627
|
def hook(name)
|
619
628
|
deprecated = {
|
620
|
-
|
629
|
+
# none currently
|
621
630
|
}
|
622
631
|
|
623
632
|
if deprecated[name] and not HOOKS[name].empty? then
|
624
633
|
warn "hook #{name} has been deprecated, use #{deprecated[name]}"
|
625
634
|
end
|
626
635
|
|
627
|
-
HOOKS[name].
|
628
|
-
plugin[self]
|
636
|
+
HOOKS[name].any? do |plugin|
|
637
|
+
plugin[self]
|
629
638
|
end
|
630
639
|
end
|
631
640
|
|
File without changes
|
data/lib/autotest/growl.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Autotest::Growl
|
4
4
|
def self.growl title, msg, pri = 0, img = nil
|
5
|
-
title += " in #{Dir.pwd.split(/\//)
|
5
|
+
title += " in #{Dir.pwd.split(/\//).last(3).join("/")}"
|
6
6
|
msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
|
7
7
|
# TODO: parameterize default image
|
8
8
|
img ||= "/Applications/Mail.app/Contents/Resources/Caution.tiff"
|
File without changes
|
data/lib/autotest/menu.rb
CHANGED
File without changes
|
data/lib/autotest/rails.rb
CHANGED
@@ -12,6 +12,7 @@ class Autotest::Rails < Autotest
|
|
12
12
|
self.add_mapping(/^lib\/.*\.rb$/) do |filename, _|
|
13
13
|
impl = File.basename(filename, '.rb')
|
14
14
|
files_matching %r%^test/unit/#{impl}_test.rb$%
|
15
|
+
# TODO: (unit|functional|integration) maybe?
|
15
16
|
end
|
16
17
|
|
17
18
|
add_mapping %r%^test/fixtures/(.*)s.yml% do |_, m|
|
data/lib/autotest/rcov.rb
CHANGED
@@ -12,5 +12,11 @@ module Autotest::RCov
|
|
12
12
|
Autotest.add_hook :all_good do |at|
|
13
13
|
system "rake #{@@command} PATTERN=#{@@pattern}"
|
14
14
|
end
|
15
|
+
|
16
|
+
Autotest.add_hook :initialize do |at|
|
17
|
+
at.add_exception 'coverage'
|
18
|
+
at.add_exception 'coverage.info'
|
19
|
+
false
|
20
|
+
end
|
15
21
|
end
|
16
22
|
|
data/lib/autotest/redgreen.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
3
|
# special thanks to Pat Eyler, Sean Carley, and Rob Sanheim
|
4
|
+
# and to Peter Havens for rspec patches
|
4
5
|
module Autotest::RedGreen
|
5
|
-
BAR
|
6
|
+
BAR = "=" * 78
|
7
|
+
REDCODE = 31
|
8
|
+
GREENCODE = 32
|
6
9
|
|
7
10
|
Autotest.add_hook :ran_command do |at|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
green = case at.results.last
|
12
|
+
when /^.* (\d+) failures, (\d+) errors$/ # Test::Unit
|
13
|
+
($1 == "0" and $2 == "0")
|
14
|
+
when /^\d+\s+examples?,\s+(\d+)\s+failure/ # RSpec
|
15
|
+
($1 == "0")
|
16
|
+
end
|
17
|
+
|
18
|
+
code = green ? GREENCODE : REDCODE
|
19
|
+
puts "\e[#{ code }m#{ BAR }\e[0m\n\n" unless green.nil?
|
12
20
|
end
|
13
21
|
end
|
data/lib/autotest/screen.rb
CHANGED
@@ -246,7 +246,7 @@ class Test::Rails::ControllerTestCase < Test::Rails::FunctionalTestCase
|
|
246
246
|
def assert_assigned(ivar, value = NOTHING)
|
247
247
|
ivar = ivar.to_s
|
248
248
|
@assigns_asserted << ivar
|
249
|
-
assert_includes
|
249
|
+
assert_includes assigns, ivar, "#{ivar.inspect} missing from assigns"
|
250
250
|
unless value.equal? NOTHING then
|
251
251
|
assert_equal value, assigns[ivar],
|
252
252
|
"assert_assigned #{ivar.intern.inspect}"
|
@@ -289,7 +289,7 @@ class Test::Rails::ControllerTestCase < Test::Rails::FunctionalTestCase
|
|
289
289
|
|
290
290
|
def deny_assigned(ivar)
|
291
291
|
ivar = ivar.to_s
|
292
|
-
deny_includes
|
292
|
+
deny_includes assigns, ivar
|
293
293
|
end
|
294
294
|
|
295
295
|
##
|
data/lib/test/rails/test_case.rb
CHANGED
@@ -13,3 +13,16 @@ class Test::Rails::TestCase < Test::Unit::TestCase
|
|
13
13
|
|
14
14
|
end
|
15
15
|
|
16
|
+
module Test::Unit::Assertions
|
17
|
+
##
|
18
|
+
# TODO: should this go in this file?
|
19
|
+
# Asserts that model indeed has a given callback
|
20
|
+
#
|
21
|
+
# assert_callback(Model, :before_save, :something)
|
22
|
+
|
23
|
+
def assert_callback(model_class, callback, method_name, message=nil)
|
24
|
+
vars = model_class.instance_variable_get(:@inheritable_attributes)
|
25
|
+
assert vars.has_key?(callback), message
|
26
|
+
assert_include vars[callback], method_name, message
|
27
|
+
end
|
28
|
+
end
|
@@ -1,124 +1,127 @@
|
|
1
|
+
require 'test/unit/assertions'
|
2
|
+
|
1
3
|
##
|
2
4
|
# Extra assertions for Test::Unit
|
3
5
|
|
4
|
-
Test::Unit::Assertions = MiniTest::Unit::TestCase if defined? MiniTest # HACK
|
5
|
-
|
6
6
|
module Test::Unit::Assertions
|
7
|
+
has_miniunit = defined? ::Mini
|
8
|
+
|
9
|
+
if has_miniunit then
|
10
|
+
alias :assert_include :assert_includes
|
11
|
+
alias :deny :refute
|
12
|
+
alias :deny_empty :refute_empty
|
13
|
+
alias :deny_equal :refute_equal
|
14
|
+
alias :deny_include :refute_includes
|
15
|
+
alias :deny_includes :refute_includes
|
16
|
+
alias :deny_nil :refute_nil
|
17
|
+
alias :util_capture :capture_io
|
18
|
+
else
|
19
|
+
|
20
|
+
alias :refute_nil :assert_not_nil
|
21
|
+
|
22
|
+
##
|
23
|
+
# Asserts that +obj+ responds to #empty? and #empty? returns true.
|
24
|
+
|
25
|
+
def assert_empty(obj)
|
26
|
+
assert_respond_to obj, :empty?
|
27
|
+
assert_block "#{obj.inspect} expected to be empty." do obj.empty? end
|
28
|
+
end
|
7
29
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
#
|
12
|
-
# assert_callback(Model, :before_save, :something)
|
13
|
-
|
14
|
-
def assert_callback(model_class, callback, method_name, message=nil)
|
15
|
-
vars = model_class.instance_variable_get(:@inheritable_attributes)
|
16
|
-
assert vars.has_key?(callback), message
|
17
|
-
assert_include vars[callback], method_name, message
|
18
|
-
end
|
19
|
-
|
20
|
-
##
|
21
|
-
# Asserts that +obj+ responds to #empty? and #empty? returns true.
|
22
|
-
|
23
|
-
def assert_empty(obj)
|
24
|
-
assert_respond_to obj, :empty?
|
25
|
-
assert_block "#{obj.inspect} expected to be empty." do obj.empty? end
|
26
|
-
end
|
30
|
+
##
|
31
|
+
# Like assert_in_delta but better dealing with errors proportional
|
32
|
+
# to the sizes of +a+ and +b+.
|
27
33
|
|
28
|
-
|
29
|
-
|
30
|
-
# to the sizes of +a+ and +b+.
|
34
|
+
def assert_in_epsilon(a, b, epsilon, message = nil)
|
35
|
+
return assert(true) if a == b # count assertion
|
31
36
|
|
32
|
-
|
33
|
-
|
37
|
+
error = ((a - b).to_f / ((b.abs > a.abs) ? b : a)).abs
|
38
|
+
message ||= "#{a} expected to be within #{epsilon * 100}% of #{b}, was #{error}"
|
34
39
|
|
35
|
-
|
36
|
-
|
40
|
+
assert_block message do error <= epsilon end
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
43
|
+
##
|
44
|
+
# Asserts that +collection+ includes +obj+.
|
40
45
|
|
41
|
-
|
42
|
-
|
46
|
+
def assert_include collection, obj, msg = nil
|
47
|
+
assert_respond_to collection, :include?
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert_block message do obj.include? item end
|
48
|
-
end
|
49
|
+
message ||= "#{collection.inspect}\ndoes not include\n#{obj.inspect}."
|
50
|
+
assert_block message do collection.include?(obj) end
|
51
|
+
end
|
49
52
|
|
50
|
-
|
53
|
+
alias assert_includes assert_include
|
51
54
|
|
52
|
-
|
53
|
-
|
55
|
+
##
|
56
|
+
# Asserts that +boolean+ is not false or nil.
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
+
def deny(boolean, message = nil)
|
59
|
+
_wrap_assertion do
|
60
|
+
assert_block(build_message(message, "Failed refutation, no message given.")) { not boolean }
|
61
|
+
end
|
58
62
|
end
|
59
|
-
end
|
60
63
|
|
61
|
-
|
62
|
-
|
64
|
+
##
|
65
|
+
# Asserts that +obj+ responds to #empty? and #empty? returns false.
|
63
66
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
67
|
+
def deny_empty(obj)
|
68
|
+
assert_respond_to obj, :empty?
|
69
|
+
assert_block "#{obj.inspect} expected to have stuff." do !obj.empty? end
|
70
|
+
end
|
68
71
|
|
69
|
-
|
70
|
-
|
72
|
+
##
|
73
|
+
# Alias for assert_not_equal
|
71
74
|
|
72
|
-
|
75
|
+
alias deny_equal assert_not_equal # rescue nil # rescue for miniunit
|
73
76
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
+
##
|
78
|
+
# Asserts that +obj+ responds to #include? and that obj does not include
|
79
|
+
# +item+.
|
77
80
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
def deny_include(collection, obj, message = nil)
|
82
|
+
assert_respond_to collection, :include?
|
83
|
+
message ||= "#{collection.inspect} includes #{obj.inspect}."
|
84
|
+
assert_block message do !collection.include? obj end
|
85
|
+
end
|
83
86
|
|
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
|
-
|
87
|
+
alias deny_includes deny_include
|
88
|
+
|
89
|
+
##
|
90
|
+
# Asserts that +obj+ is not nil.
|
91
|
+
|
92
|
+
alias deny_nil assert_not_nil
|
93
|
+
|
94
|
+
##
|
95
|
+
# Captures $stdout and $stderr to StringIO objects and returns them.
|
96
|
+
# Restores $stdout and $stderr when done.
|
97
|
+
#
|
98
|
+
# Usage:
|
99
|
+
# def test_puts
|
100
|
+
# out, err = capture do
|
101
|
+
# puts 'hi'
|
102
|
+
# STDERR.puts 'bye!'
|
103
|
+
# end
|
104
|
+
# assert_equal "hi\n", out.string
|
105
|
+
# assert_equal "bye!\n", err.string
|
106
|
+
# end
|
107
|
+
|
108
|
+
def util_capture
|
109
|
+
require 'stringio'
|
110
|
+
orig_stdout = $stdout.dup
|
111
|
+
orig_stderr = $stderr.dup
|
112
|
+
captured_stdout = StringIO.new
|
113
|
+
captured_stderr = StringIO.new
|
114
|
+
$stdout = captured_stdout
|
115
|
+
$stderr = captured_stderr
|
116
|
+
yield
|
117
|
+
captured_stdout.rewind
|
118
|
+
captured_stderr.rewind
|
119
|
+
return captured_stdout.string, captured_stderr.string
|
120
|
+
ensure
|
121
|
+
$stdout = orig_stdout
|
122
|
+
$stderr = orig_stderr
|
123
|
+
end
|
120
124
|
end
|
121
|
-
|
122
125
|
end
|
123
126
|
|
124
127
|
class Object # :nodoc:
|
data/lib/unit_diff.rb
CHANGED
@@ -115,15 +115,21 @@ class UnitDiff
|
|
115
115
|
header << result.shift
|
116
116
|
state = :expect if result.first =~ /^<|^Expected/
|
117
117
|
when :expect then
|
118
|
-
|
118
|
+
case result.first
|
119
|
+
when /^Expected (.*?) to equal (.*?):$/ then
|
119
120
|
expect << $1
|
120
121
|
butwas << $2
|
121
122
|
state = :footer
|
122
123
|
result.shift
|
123
|
-
|
124
|
+
when /^Expected (.*?), not (.*)$/m then
|
125
|
+
expect << $1
|
126
|
+
butwas << $2
|
127
|
+
state = :footer
|
128
|
+
result.shift
|
129
|
+
when /^Expected (.*?)$/ then
|
124
130
|
expect << "#{$1}\n"
|
125
131
|
result.shift
|
126
|
-
|
132
|
+
when /^to equal / then
|
127
133
|
state = :spec_butwas
|
128
134
|
bw = result.shift.sub(/^to equal (.*):?$/, '\1')
|
129
135
|
butwas << bw
|
data/lib/zentest.rb
CHANGED
data/test/test_autotest.rb
CHANGED
@@ -27,9 +27,13 @@ end
|
|
27
27
|
|
28
28
|
class TestAutotest < Test::Unit::TestCase
|
29
29
|
|
30
|
-
def deny test
|
31
|
-
|
32
|
-
|
30
|
+
def deny test, msg=nil
|
31
|
+
if msg then
|
32
|
+
assert ! test, msg
|
33
|
+
else
|
34
|
+
assert ! test
|
35
|
+
end
|
36
|
+
end unless respond_to? :deny
|
33
37
|
|
34
38
|
RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) unless defined? RUBY
|
35
39
|
|
@@ -313,30 +317,24 @@ test_error2(#{@test_class}):
|
|
313
317
|
deny @a.tainted
|
314
318
|
end
|
315
319
|
|
316
|
-
def
|
317
|
-
|
320
|
+
def test_hook_overlap_returning_false
|
321
|
+
util_reset_hooks_returning false
|
318
322
|
|
319
|
-
@a.
|
320
|
-
@a.instance_variable_set :@blah2, false
|
321
|
-
@a.instance_variable_set :@blah3, false
|
322
|
-
|
323
|
-
Autotest.add_hook(:blah) do |at|
|
324
|
-
at.instance_variable_set :@blah1, true
|
325
|
-
end
|
323
|
+
@a.hook :blah
|
326
324
|
|
327
|
-
|
328
|
-
|
329
|
-
|
325
|
+
assert @a.instance_variable_get(:@blah1), "Hook1 should work on blah"
|
326
|
+
assert @a.instance_variable_get(:@blah2), "Hook2 should work on blah"
|
327
|
+
assert @a.instance_variable_get(:@blah3), "Hook3 should work on blah"
|
328
|
+
end
|
330
329
|
|
331
|
-
|
332
|
-
|
333
|
-
end
|
330
|
+
def test_hook_overlap_returning_true
|
331
|
+
util_reset_hooks_returning true
|
334
332
|
|
335
333
|
@a.hook :blah
|
336
334
|
|
337
335
|
assert @a.instance_variable_get(:@blah1), "Hook1 should work on blah"
|
338
|
-
|
339
|
-
|
336
|
+
deny @a.instance_variable_get(:@blah2), "Hook2 should NOT work on blah"
|
337
|
+
deny @a.instance_variable_get(:@blah3), "Hook3 should NOT work on blah"
|
340
338
|
end
|
341
339
|
|
342
340
|
def test_hook_response
|
@@ -425,4 +423,27 @@ test_error2(#{@test_class}):
|
|
425
423
|
def util_path_to_classname(e,i)
|
426
424
|
assert_equal e, @a.path_to_classname(i)
|
427
425
|
end
|
426
|
+
|
427
|
+
def util_reset_hooks_returning val
|
428
|
+
Autotest.clear_hooks
|
429
|
+
|
430
|
+
@a.instance_variable_set :@blah1, false
|
431
|
+
@a.instance_variable_set :@blah2, false
|
432
|
+
@a.instance_variable_set :@blah3, false
|
433
|
+
|
434
|
+
Autotest.add_hook(:blah) do |at|
|
435
|
+
at.instance_variable_set :@blah1, true
|
436
|
+
val
|
437
|
+
end
|
438
|
+
|
439
|
+
Autotest.add_hook(:blah) do |at|
|
440
|
+
at.instance_variable_set :@blah2, true
|
441
|
+
val
|
442
|
+
end
|
443
|
+
|
444
|
+
Autotest.add_hook(:blah) do |at|
|
445
|
+
at.instance_variable_set :@blah3, true
|
446
|
+
val
|
447
|
+
end
|
448
|
+
end
|
428
449
|
end
|
@@ -33,15 +33,15 @@ class TestRailsHelperTestCase < Test::Unit::TestCase
|
|
33
33
|
def test_self_inherited
|
34
34
|
assert defined? TRHelperTest
|
35
35
|
|
36
|
-
assert_includes 'tr_helper'
|
36
|
+
assert_includes TRHelperTest.instance_methods, 'tr_helper'
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_self_inherited_namespaced
|
40
40
|
assert defined? Widgets
|
41
41
|
assert defined? Widgets::SomeHelperTest
|
42
42
|
|
43
|
-
assert_includes
|
44
|
-
|
43
|
+
assert_includes(Widgets::SomeHelperTest.instance_methods,
|
44
|
+
'widgets_some_helper')
|
45
45
|
end
|
46
46
|
|
47
47
|
end if $TESTING_RTC
|
@@ -45,12 +45,12 @@ class TestRailsViewTestCase < Test::Rails::ViewTestCase
|
|
45
45
|
|
46
46
|
assert_equal 4, @assert_select.length
|
47
47
|
|
48
|
-
assert_equal ["form[action='/game/save']"]
|
49
|
-
assert_equal
|
50
|
-
|
48
|
+
assert_equal @assert_select.shift, ["form[action='/game/save']"]
|
49
|
+
assert_equal(@assert_select.shift,
|
50
|
+
["input[type='text'][name='game[amount]']"])
|
51
51
|
|
52
|
-
assert_equal ["form[action='/game/save']"]
|
53
|
-
assert_equal ["label[for='game_amount']"]
|
52
|
+
assert_equal @assert_select.shift, ["form[action='/game/save']"]
|
53
|
+
assert_equal @assert_select.shift, ["label[for='game_amount']"]
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_assert_form
|
@@ -167,10 +167,12 @@ class TestRailsViewTestCase < Test::Rails::ViewTestCase
|
|
167
167
|
|
168
168
|
assert_equal 2, @assert_select.length
|
169
169
|
|
170
|
-
assert_include
|
171
|
-
|
172
|
-
|
173
|
-
|
170
|
+
assert_include(@assert_select,
|
171
|
+
["select[name='game[location_id]'] option[value='2']",
|
172
|
+
{ :text => 'Guaymas' }])
|
173
|
+
assert_include(@assert_select,
|
174
|
+
["select[name='game[location_id]'] option[value='1']",
|
175
|
+
{ :text => 'Ballet' }])
|
174
176
|
end
|
175
177
|
|
176
178
|
def test_assert_select_tag_form
|
@@ -179,12 +181,14 @@ class TestRailsViewTestCase < Test::Rails::ViewTestCase
|
|
179
181
|
|
180
182
|
assert_equal 4, @assert_select.length
|
181
183
|
|
182
|
-
assert_include ["form[action='/game/save']"]
|
183
|
-
assert_include
|
184
|
-
|
185
|
-
|
186
|
-
assert_include ["
|
187
|
-
|
184
|
+
assert_include @assert_select, ["form[action='/game/save']"]
|
185
|
+
assert_include(@assert_select,
|
186
|
+
["select[name='game[location_id]'] option[value='2']",
|
187
|
+
{ :text => 'Guaymas' }])
|
188
|
+
assert_include @assert_select, ["form[action='/game/save']"]
|
189
|
+
assert_include(@assert_select,
|
190
|
+
["select[name='game[location_id]'] option[value='1']",
|
191
|
+
{ :text => 'Ballet' }])
|
188
192
|
end
|
189
193
|
|
190
194
|
def test_assert_submit
|
data/test/test_unit_diff.rb
CHANGED
@@ -25,7 +25,24 @@ class TestUnitDiff < Test::Unit::TestCase
|
|
25
25
|
util_unit_diff(header, input, expected, :parse_input)
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
28
|
+
def test_input_miniunit
|
29
|
+
header = "Loaded suite -e\nStarted\nF\nFinished in 0.035332 seconds.\n\n"
|
30
|
+
input = "#{header} 1) Failure:
|
31
|
+
test_blah(TestBlah) [./blah.rb:25]:
|
32
|
+
Expected ['a', 'b', 'c'], not ['a', 'c', 'b'].
|
33
|
+
|
34
|
+
1 tests, 1 assertions, 1 failures, 0 errors
|
35
|
+
"
|
36
|
+
|
37
|
+
expected = [[[" 1) Failure:\n",
|
38
|
+
"test_blah(TestBlah) [./blah.rb:25]:\n",
|
39
|
+
"Expected ['a', 'b', 'c'], not ['a', 'c', 'b'].\n"]],
|
40
|
+
["\n", "1 tests, 1 assertions, 1 failures, 0 errors\n"]]
|
41
|
+
|
42
|
+
util_unit_diff(header, input, expected, :parse_input)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_input_mspec
|
29
46
|
header = <<-HEADER
|
30
47
|
Started
|
31
48
|
.......F
|
@@ -40,15 +57,15 @@ Expected nil to equal "baz":
|
|
40
57
|
FAILURE
|
41
58
|
|
42
59
|
backtrace = <<-BACKTRACE
|
43
|
-
PositiveExpectation#== at spec/
|
60
|
+
PositiveExpectation#== at spec/mspec.rb:217
|
44
61
|
main.__script__ {} at spec/language/unless_spec.rb:49
|
45
62
|
Proc#call at kernel/core/proc.rb:127
|
46
|
-
SpecRunner#it at spec/
|
47
|
-
main.it at spec/
|
63
|
+
SpecRunner#it at spec/mspec.rb:368
|
64
|
+
main.it at spec/mspec.rb:412
|
48
65
|
main.__script__ {} at spec/language/unless_spec.rb:48
|
49
66
|
Proc#call at kernel/core/proc.rb:127
|
50
|
-
SpecRunner#describe at spec/
|
51
|
-
main.describe at spec/
|
67
|
+
SpecRunner#describe at spec/mspec.rb:378
|
68
|
+
main.describe at spec/mspec.rb:408
|
52
69
|
main.__script__ at spec/language/unless_spec.rb:3
|
53
70
|
CompiledMethod#as_script at kernel/bootstrap/primitives.rb:41
|
54
71
|
main.load at kernel/core/compile.rb:150
|
@@ -73,7 +90,7 @@ Expected nil to equal "baz":
|
|
73
90
|
util_unit_diff(header, input, expected, :parse_input)
|
74
91
|
end
|
75
92
|
|
76
|
-
def
|
93
|
+
def test_input_mspec_multiline
|
77
94
|
header = <<-HEADER
|
78
95
|
Started
|
79
96
|
.......F
|
@@ -89,7 +106,7 @@ to equal #<TestGenerator [[:push, false], [:gif, #<Label 5>], [:push, "foo"], [:
|
|
89
106
|
FAILURE
|
90
107
|
|
91
108
|
backtrace = <<-BACKTRACE
|
92
|
-
PositiveExpectation#== at spec/
|
109
|
+
PositiveExpectation#== at spec/mspec.rb:216
|
93
110
|
main.gen at ./compiler2/spec/helper.rb:125
|
94
111
|
main.__script__ {} at compiler2/spec/control_spec.rb:448
|
95
112
|
BACKTRACE
|
@@ -117,11 +134,39 @@ backtrace = <<-BACKTRACE
|
|
117
134
|
"<\"<body>\">.\n"
|
118
135
|
]
|
119
136
|
|
120
|
-
expected = [[" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n"],
|
137
|
+
expected = [[" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n"],
|
138
|
+
["<html>"],
|
139
|
+
["<body>"],
|
140
|
+
[]]
|
121
141
|
|
122
142
|
assert_equal expected, @diff.parse_diff(input)
|
123
143
|
end
|
124
144
|
|
145
|
+
def test_parse_diff_miniunit
|
146
|
+
input = [" 1) Failure:\n",
|
147
|
+
"test_blah(TestBlah) [./blah.rb:25]:\n",
|
148
|
+
"Expected ['a', 'b', 'c'], not ['a', 'c', 'b'].\n"]
|
149
|
+
|
150
|
+
expected = [[" 1) Failure:\n", "test_blah(TestBlah) [./blah.rb:25]:\n"],
|
151
|
+
["['a', 'b', 'c']"],
|
152
|
+
["['a', 'c', 'b']"],
|
153
|
+
[]]
|
154
|
+
|
155
|
+
assert_equal expected, @diff.parse_diff(input)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_parse_diff_miniunit_multiline
|
159
|
+
input = [" 1) Failure:\n",
|
160
|
+
"test_blah(TestBlah) [./blah.rb:25]:\n",
|
161
|
+
"Expected ['a',\n'b',\n'c'], not ['a',\n'c',\n'b'].\n"]
|
162
|
+
|
163
|
+
expected = [[" 1) Failure:\n", "test_blah(TestBlah) [./blah.rb:25]:\n"],
|
164
|
+
["['a',\n'b',\n'c']"],
|
165
|
+
["['a',\n'c',\n'b']"],
|
166
|
+
[]]
|
167
|
+
|
168
|
+
assert_equal expected, @diff.parse_diff(input)
|
169
|
+
end
|
125
170
|
def test_parse_diff1
|
126
171
|
input = [" 1) Failure:\n",
|
127
172
|
"test_test1(TestBlah) [./blah.rb:25]:\n",
|
@@ -188,29 +233,29 @@ backtrace = <<-BACKTRACE
|
|
188
233
|
assert_equal expected, @diff.parse_diff(input)
|
189
234
|
end
|
190
235
|
|
191
|
-
def
|
236
|
+
def test_parse_diff_mspec
|
192
237
|
input = ["1)\n", "The unless expression should fail FAILED\n",
|
193
238
|
"Expected nil to equal \"baz\":\n",
|
194
|
-
" PositiveExpectation#== at spec/
|
239
|
+
" PositiveExpectation#== at spec/mspec.rb:217\n"]
|
195
240
|
|
196
241
|
expected = [["1)\n", "The unless expression should fail FAILED\n"],
|
197
242
|
["nil"],
|
198
243
|
["\"baz\""],
|
199
|
-
[" PositiveExpectation#== at spec/
|
244
|
+
[" PositiveExpectation#== at spec/mspec.rb:217"]]
|
200
245
|
|
201
246
|
assert_equal expected, @diff.parse_diff(input)
|
202
247
|
end
|
203
248
|
|
204
|
-
def
|
249
|
+
def test_parse_diff_mspec_multiline
|
205
250
|
input = ["1)\n", "The unless expression should fail FAILED\n",
|
206
251
|
"Expected #<TestGenerator [[:push, :true],\n", " [:dup]\n", "]\n",
|
207
252
|
"to equal #<TestGenerator [[:pop],\n", " [:dup]\n", "]:\n",
|
208
|
-
" PositiveExpectation#== at spec/
|
253
|
+
" PositiveExpectation#== at spec/mspec.rb:217\n"]
|
209
254
|
|
210
255
|
expected = [["1)\n", "The unless expression should fail FAILED\n"],
|
211
256
|
["#<TestGenerator [[:push, :true],\n", " [:dup]\n", "]"],
|
212
257
|
["#<TestGenerator [[:pop],\n", " [:dup]\n", "]"],
|
213
|
-
[" PositiveExpectation#== at spec/
|
258
|
+
[" PositiveExpectation#== at spec/mspec.rb:217"]]
|
214
259
|
|
215
260
|
assert_equal expected, @diff.parse_diff(input)
|
216
261
|
end
|
data/test/test_zentest.rb
CHANGED
@@ -2,80 +2,115 @@ require 'test/unit'
|
|
2
2
|
require 'test/zentest_assertions'
|
3
3
|
|
4
4
|
class TestZenTestAssertions < Test::Unit::TestCase
|
5
|
+
@@has_mini = defined? Mini
|
6
|
+
@@exception = if @@has_mini then
|
7
|
+
Mini::Assertion
|
8
|
+
else
|
9
|
+
Test::Unit::AssertionFailedError
|
10
|
+
end
|
11
|
+
|
12
|
+
def util_assert_triggered expected
|
13
|
+
e = assert_raises @@exception do
|
14
|
+
yield
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_equal expected, e.message.sub(/(---Backtrace---).*/m, '\1')
|
18
|
+
end
|
5
19
|
|
6
20
|
def test_assert_empty
|
7
21
|
assert_empty []
|
8
22
|
|
9
|
-
|
23
|
+
msg = if @@has_mini then
|
24
|
+
"Expected [true] to be empty."
|
25
|
+
else
|
26
|
+
"[true] expected to be empty."
|
27
|
+
end
|
28
|
+
|
29
|
+
util_assert_triggered msg do
|
10
30
|
assert_empty [true]
|
11
31
|
end
|
12
|
-
|
13
|
-
assert_equal "[true] expected to be empty.", e.message
|
14
32
|
end
|
15
33
|
|
16
34
|
def test_assert_include
|
17
|
-
assert_include true,
|
35
|
+
assert_include [true], true
|
18
36
|
|
19
|
-
|
20
|
-
|
21
|
-
|
37
|
+
msg = if @@has_mini then
|
38
|
+
"Expected [true] to include false."
|
39
|
+
else
|
40
|
+
"[true]\ndoes not include\nfalse."
|
41
|
+
end
|
22
42
|
|
23
|
-
|
43
|
+
util_assert_triggered msg do
|
44
|
+
assert_include [true], false
|
45
|
+
end
|
24
46
|
end
|
25
47
|
|
26
48
|
def test_assert_in_epsilon
|
27
|
-
|
49
|
+
assert_in_epsilon 1.234, 1.234, 0.0001
|
28
50
|
|
29
|
-
|
51
|
+
msg = if @@has_mini then
|
52
|
+
"Expected 1.235 - 1.234 (0.00100000000000011) to be < 0.0001234."
|
53
|
+
else
|
54
|
+
"1.235 expected to be within 0.01% of 1.234, was 0.000809716599190374"
|
55
|
+
end
|
56
|
+
|
57
|
+
util_assert_triggered msg do
|
30
58
|
assert_in_epsilon 1.235, 1.234, 0.0001
|
31
59
|
end
|
32
|
-
|
33
|
-
assert_equal "1.235 expected to be within 0.01% of 1.234, was 0.000809716599190374", e.message
|
34
60
|
end
|
35
61
|
|
36
62
|
def test_deny
|
37
63
|
deny false
|
38
64
|
deny nil
|
39
65
|
|
40
|
-
e =
|
66
|
+
e = assert_raises Test::Unit::AssertionFailedError do
|
41
67
|
deny true
|
42
68
|
end
|
43
69
|
|
44
|
-
|
70
|
+
assert_match(/Failed refutation, no message given/, e.message)
|
45
71
|
end
|
46
72
|
|
47
73
|
def test_deny_empty
|
48
74
|
deny_empty [true]
|
49
75
|
|
50
|
-
|
76
|
+
msg = if @@has_mini then
|
77
|
+
"Expected [] to not be empty."
|
78
|
+
else
|
79
|
+
"[] expected to have stuff."
|
80
|
+
end
|
81
|
+
|
82
|
+
util_assert_triggered msg do
|
51
83
|
deny_empty []
|
52
84
|
end
|
53
85
|
|
54
|
-
assert_equal "[] expected to have stuff.", e.message
|
55
86
|
end
|
56
87
|
|
57
88
|
def test_deny_equal
|
58
89
|
deny_equal true, false
|
59
90
|
|
60
|
-
|
91
|
+
assert_raises Test::Unit::AssertionFailedError do
|
61
92
|
deny_equal true, true
|
62
93
|
end
|
63
94
|
end
|
64
95
|
|
65
96
|
def test_deny_include
|
66
|
-
deny_include
|
97
|
+
deny_include [true], false
|
67
98
|
|
68
|
-
|
69
|
-
|
70
|
-
|
99
|
+
msg = if @@has_mini then
|
100
|
+
"Expected [true] to not include true."
|
101
|
+
else
|
102
|
+
"[true] includes true."
|
103
|
+
end
|
71
104
|
|
72
|
-
|
105
|
+
util_assert_triggered msg do
|
106
|
+
deny_include [true], true
|
107
|
+
end
|
73
108
|
end
|
74
109
|
|
75
110
|
def test_deny_nil
|
76
111
|
deny_nil false
|
77
112
|
|
78
|
-
|
113
|
+
assert_raises Test::Unit::AssertionFailedError do
|
79
114
|
deny_nil nil
|
80
115
|
end
|
81
116
|
end
|
@@ -86,9 +121,8 @@ class TestZenTestAssertions < Test::Unit::TestCase
|
|
86
121
|
$stderr.puts 'err'
|
87
122
|
end
|
88
123
|
|
89
|
-
assert_equal "out\n", out
|
90
|
-
assert_equal "err\n", err
|
124
|
+
assert_equal "out\n", out
|
125
|
+
assert_equal "err\n", err
|
91
126
|
end
|
92
|
-
|
93
127
|
end
|
94
128
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ZenTest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.9.
|
4
|
+
version: 3.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2008-
|
13
|
+
date: 2008-06-09 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.5.
|
23
|
+
version: 1.5.3
|
24
24
|
version:
|
25
25
|
description: "ZenTest provides 4 different tools and 1 library: zentest, unit_diff, autotest, multiruby, and Test::Rails. ZenTest scans your target and unit-test code and writes your missing code based on simple naming rules, enabling XP at a much quicker pace. ZenTest only works with Ruby and Test::Unit. unit_diff is a command-line filter to diff expected results from actual results and allow you to quickly see exactly what is wrong. autotest is a continous testing facility meant to be used during development. As soon as you save a file, autotest will run the corresponding dependent tests. multiruby runs anything you want on multiple versions of ruby. Great for compatibility checking! Test::Rails helps you build industrial-strength Rails code."
|
26
26
|
email:
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
requirements: []
|
130
130
|
|
131
131
|
rubyforge_project: zentest
|
132
|
-
rubygems_version: 1.
|
132
|
+
rubygems_version: 1.1.1
|
133
133
|
signing_key:
|
134
134
|
specification_version: 2
|
135
135
|
summary: "ZenTest provides 4 different tools and 1 library: zentest, unit_diff, autotest, multiruby, and Test::Rails"
|