ZenTest 3.4.0 → 3.4.1
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.
- data/History.txt +15 -0
- data/Manifest.txt +3 -0
- data/Rakefile +10 -111
- data/lib/autotest.rb +13 -10
- data/lib/rails_autotest.rb +8 -0
- data/lib/test/rails/controller_test_case.rb +6 -4
- data/lib/test/rails/functional_test_case.rb +1 -0
- data/lib/test/rails/helper_test_case.rb +1 -1
- data/lib/test/rails/render_tree.rb +8 -4
- data/lib/test/rails/view_test_case.rb +31 -4
- data/lib/test/zentest_assertions.rb +8 -0
- data/lib/zentest.rb +1 -1
- data/test/test_autotest.rb +36 -30
- data/test/test_help.rb +12 -0
- data/test/test_rails_autotest.rb +29 -0
- data/test/test_rails_helper_test_case.rb +39 -0
- data/test/test_rails_view_test_case.rb +54 -0
- data/test/test_zentest.rb +1 -1
- metadata +19 -33
data/History.txt
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
*** 3.4.1 / 2006-10-13
|
2
|
+
|
3
|
+
+ 3 minor enhancements:
|
4
|
+
+ FUNDAMENTALLY changed the way failures map back to tests. This REQUIRES users of autotest to ensure that their tests and impls map 1:1 at every scoping level. I'll blog more details.
|
5
|
+
+ Hoe'd rakefile
|
6
|
+
+ Added support for render :collection to RenderTree.
|
7
|
+
+ 7 bug fixes:
|
8
|
+
+ Fixed autotest tests for custom ruby names.
|
9
|
+
+ Fixed some documentation errors in ControllerTestCase.
|
10
|
+
+ Fixed setup in FunctionalTestCase.
|
11
|
+
+ Allowed @assigns_ignored to contain either Symbols or Strings, bug 5233.
|
12
|
+
+ Using Object.path2class to look up classes in helper test cases, bug 5493.
|
13
|
+
+ Added assert_text_area, bug 5452.
|
14
|
+
+ Renamed assert_select to assert_select_tag. Stupid rails. We were here first.
|
15
|
+
|
1
16
|
*** 3.4.0 / 2006-09-12
|
2
17
|
|
3
18
|
+ 13 minor enhancements:
|
data/Manifest.txt
CHANGED
@@ -39,7 +39,10 @@ lib/test/zentest_assertions.rb
|
|
39
39
|
lib/unit_diff.rb
|
40
40
|
lib/zentest.rb
|
41
41
|
test/test_autotest.rb
|
42
|
+
test/test_help.rb
|
42
43
|
test/test_rails_autotest.rb
|
44
|
+
test/test_rails_helper_test_case.rb
|
45
|
+
test/test_rails_view_test_case.rb
|
43
46
|
test/test_ruby_fork.rb
|
44
47
|
test/test_unit_diff.rb
|
45
48
|
test/test_zentest.rb
|
data/Rakefile
CHANGED
@@ -1,60 +1,22 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
|
-
|
4
|
-
require 'rake/testtask'
|
5
|
-
require 'rake/rdoctask'
|
6
|
-
require 'rake/gempackagetask'
|
7
|
-
require 'rake/contrib/sshpublisher'
|
8
|
-
require 'rbconfig'
|
3
|
+
ENV["RUBY_FLAGS"]="-Ilib:bin:test" # FIX
|
9
4
|
|
5
|
+
require 'rubygems'
|
6
|
+
require 'hoe'
|
10
7
|
require './lib/zentest.rb'
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
spec = Gem::Specification.new do |s|
|
15
|
-
s.name = 'ZenTest'
|
16
|
-
s.version = ZenTest::VERSION
|
17
|
-
s.authors = ['Ryan Davis', 'Eric Hodel']
|
18
|
-
s.email = 'ryand-ruby@zenspider.com'
|
19
|
-
|
20
|
-
s.files = IO.readlines("Manifest.txt").map {|f| f.chomp }
|
21
|
-
s.require_path = 'lib'
|
22
|
-
|
23
|
-
s.executables = s.files.grep(/^bin\//).map { |f| File.basename f }
|
24
|
-
|
9
|
+
Hoe.new("ZenTest", ZenTest::VERSION) do |p|
|
25
10
|
paragraphs = File.read("README.txt").split(/\n\n+/)
|
26
|
-
s.instance_variable_set "@description", paragraphs[3..10].join("\n\n")
|
27
|
-
s.instance_variable_set "@summary", paragraphs[12]
|
28
11
|
|
29
|
-
|
30
|
-
s.rubyforge_project = "zentest"
|
31
|
-
s.has_rdoc = true
|
12
|
+
p.author = ['Ryan Davis', 'Eric Hodel']
|
32
13
|
|
33
|
-
|
34
|
-
|
35
|
-
puts
|
36
|
-
puts s.executables.sort.inspect
|
37
|
-
puts
|
38
|
-
puts "** summary:"
|
39
|
-
puts s.summary
|
40
|
-
puts
|
41
|
-
puts "** description:"
|
42
|
-
puts s.description
|
43
|
-
end
|
44
|
-
end
|
14
|
+
changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
15
|
+
summary, *description = p.paragraphs_of("README.txt", 3, 3..8)
|
45
16
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
desc 'Run tests'
|
52
|
-
task :default => :test
|
53
|
-
|
54
|
-
desc 'Run tests'
|
55
|
-
Rake::TestTask.new :test do |t|
|
56
|
-
t.libs << 'test'
|
57
|
-
t.verbose = true
|
17
|
+
p.changes = changes
|
18
|
+
p.summary = summary
|
19
|
+
p.description = description.join("\n\n")
|
58
20
|
end
|
59
21
|
|
60
22
|
desc 'Update Manifest.txt'
|
@@ -62,73 +24,10 @@ task :update_manifest => :clean do
|
|
62
24
|
sh "p4 open Manifest.txt; find . -type f | sed -e 's%./%%' | sort > Manifest.txt"
|
63
25
|
end
|
64
26
|
|
65
|
-
desc 'Generate RDoc'
|
66
|
-
Rake::RDocTask.new :rdoc do |rd|
|
67
|
-
rd.rdoc_dir = 'doc'
|
68
|
-
rd.rdoc_files.add 'lib', 'README.txt', 'History.txt', 'LinuxJournalArticle.txt'
|
69
|
-
rd.main = 'README.txt'
|
70
|
-
rd.options << '-d' if `which dot` =~ /\/dot/ unless RUBY_PLATFORM =~ /win32/
|
71
|
-
rd.options << '-t ZenTest RDoc'
|
72
|
-
end
|
73
|
-
|
74
|
-
desc 'Upload RDoc to RubyForge'
|
75
|
-
task :upload => :rdoc do
|
76
|
-
|
77
|
-
user = "#{ENV['USER']}@rubyforge.org"
|
78
|
-
project = '/var/www/gforge-projects/zentest'
|
79
|
-
local_dir = 'doc'
|
80
|
-
pub = Rake::SshDirPublisher.new user, project, local_dir
|
81
|
-
pub.upload
|
82
|
-
end
|
83
|
-
|
84
|
-
$prefix = ENV['PREFIX'] || Config::CONFIG['prefix']
|
85
|
-
$bin = File.join($prefix, 'bin')
|
86
|
-
$lib = Config::CONFIG['sitelibdir']
|
87
|
-
$bins = spec.executables
|
88
|
-
$libs = spec.files.grep(/^lib\//).map { |f| f.sub(/^lib\//, '') }.sort
|
89
|
-
|
90
27
|
task :autotest do
|
91
28
|
ruby "-Ilib ./bin/autotest"
|
92
29
|
end
|
93
30
|
|
94
|
-
task :install do
|
95
|
-
$bins.each do |f|
|
96
|
-
install File.join("bin", f), $bin, :mode => 0555
|
97
|
-
end
|
98
|
-
|
99
|
-
$libs.each do |f|
|
100
|
-
dir = File.join($lib, File.dirname(f))
|
101
|
-
mkdir_p dir unless test ?d, dir
|
102
|
-
install File.join("lib", f), dir, :mode => 0444
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
task :uninstall do
|
107
|
-
# add old versions
|
108
|
-
$bins << "ZenTest"
|
109
|
-
$libs << "ZenTest.rb"
|
110
|
-
|
111
|
-
$bins.each do |f|
|
112
|
-
rm_f File.join($bin, f)
|
113
|
-
end
|
114
|
-
|
115
|
-
$libs.each do |f|
|
116
|
-
rm_f File.join($lib, f)
|
117
|
-
end
|
118
|
-
|
119
|
-
rm_rf File.join($lib, "test")
|
120
|
-
end
|
121
|
-
|
122
|
-
desc 'Clean up'
|
123
|
-
task :clean => [ :clobber_rdoc, :clobber_package ] do
|
124
|
-
rm_f Dir["**/*~"]
|
125
|
-
end
|
126
|
-
|
127
|
-
task :help do
|
128
|
-
Rake.application.options.show_task_pattern = //
|
129
|
-
Rake.application.display_tasks_and_comments
|
130
|
-
end
|
131
|
-
|
132
31
|
task :sort do
|
133
32
|
begin
|
134
33
|
sh 'for f in lib/*.rb; do echo $f; grep "^ *def " $f | grep -v sort=skip > x; sort x > y; echo $f; echo; diff x y; done'
|
data/lib/autotest.rb
CHANGED
@@ -137,21 +137,24 @@ class Autotest
|
|
137
137
|
@files_to_test.empty?
|
138
138
|
end
|
139
139
|
|
140
|
+
def path_to_classname(s)
|
141
|
+
sep = File::SEPARATOR
|
142
|
+
f = s.sub(/^test#{sep}/, '').sub(/\.rb$/, '').split(sep)
|
143
|
+
f = f.map { |path| path.split(/_/).map { |seg| seg.capitalize }.join }
|
144
|
+
f = f.map { |path| path =~ /^Test/ ? path : "Test#{path}" }
|
145
|
+
f.join('::')
|
146
|
+
end
|
147
|
+
|
140
148
|
def consolidate_failures(failed)
|
141
149
|
filters = Hash.new { |h,k| h[k] = [] }
|
142
150
|
|
151
|
+
class_map = Hash[*@files.keys.grep(/^test/).map { |f| [path_to_classname(f), f] }.flatten]
|
152
|
+
|
143
153
|
failed.each do |method, klass|
|
144
|
-
|
145
|
-
|
146
|
-
failed_files = @files.keys.grep(/#{failed_file_name}/i)
|
147
|
-
case failed_files.size
|
148
|
-
when 0 then
|
149
|
-
@output.puts "Unable to map class #{klass} to a file" # FIX for testing
|
150
|
-
when 1 then
|
151
|
-
filters[failed_files.last] << method
|
154
|
+
if class_map.has_key? klass then
|
155
|
+
filters[class_map[klass]] << method
|
152
156
|
else
|
153
|
-
@output.puts "
|
154
|
-
# nothing yet
|
157
|
+
@output.puts "Unable to map class #{klass} to a file"
|
155
158
|
end
|
156
159
|
end
|
157
160
|
|
data/lib/rails_autotest.rb
CHANGED
@@ -48,5 +48,13 @@ class RailsAutotest < Autotest
|
|
48
48
|
[]
|
49
49
|
end.uniq.select { |f| @files.has_key? f }
|
50
50
|
end
|
51
|
+
|
52
|
+
def path_to_classname(s)
|
53
|
+
sep = File::SEPARATOR
|
54
|
+
f = s.sub(/^test#{sep}((unit|functional|integration|views|controllers|helpers)#{sep})?/, '').sub(/\.rb$/, '').split(sep)
|
55
|
+
f = f.map { |path| path.split(/_/).map { |seg| seg.capitalize }.join }
|
56
|
+
f = f.map { |path| path =~ /Test$/ ? path : "#{path}Test" }
|
57
|
+
f.join('::')
|
58
|
+
end
|
51
59
|
end
|
52
60
|
|
@@ -33,14 +33,18 @@
|
|
33
33
|
# fixtures :users, :routes, :points, :photos
|
34
34
|
#
|
35
35
|
# def test_delete
|
36
|
+
# # Store current count
|
37
|
+
# count = Route.count
|
36
38
|
# # Set up our environment
|
37
39
|
# session[:username] = users(:herbert).username
|
38
40
|
#
|
39
|
-
# # perform the
|
41
|
+
# # perform the delete action
|
40
42
|
# get :delete, :id => routes(:work).id
|
41
43
|
#
|
42
44
|
# # Assert we got a 200
|
43
45
|
# assert_response :success
|
46
|
+
# # Assert controller deleted route
|
47
|
+
# assert_equal count-1, Route.count
|
44
48
|
# # Ensure that @action_title is set properly
|
45
49
|
# assert_assigned :action_title, "Deleting \"#{routes(:work).name}\""
|
46
50
|
# # Ensure that @route is set properly
|
@@ -320,13 +324,11 @@ class Test::Rails::ControllerTestCase < Test::Rails::FunctionalTestCase
|
|
320
324
|
all_assigns = assigns.keys.sort
|
321
325
|
|
322
326
|
assigns_ignored = DEFAULT_ASSIGNS | @assigns_ignored
|
327
|
+
assigns_ignored = assigns_ignored.map { |a| a.to_s }
|
323
328
|
|
324
329
|
assigns_created = all_assigns - assigns_ignored
|
325
330
|
assigns_asserted = @assigns_asserted - assigns_ignored
|
326
331
|
|
327
|
-
assigns_created = assigns_created
|
328
|
-
assigns_asserted = assigns_asserted
|
329
|
-
|
330
332
|
assigns_missing = assigns_created - assigns_asserted
|
331
333
|
|
332
334
|
return if assigns_missing.empty?
|
@@ -18,6 +18,7 @@ class Test::Rails::FunctionalTestCase < Test::Rails::TestCase
|
|
18
18
|
|
19
19
|
def setup
|
20
20
|
return if self.class.name =~ /TestCase$/
|
21
|
+
super
|
21
22
|
|
22
23
|
@controller_class = Object.path2class @controller_class_name
|
23
24
|
raise "Can't determine controller class for #{self.class}" if @controller_class.nil?
|
@@ -40,7 +40,7 @@ class Test::Rails::HelperTestCase < Test::Rails::FunctionalTestCase
|
|
40
40
|
def self.inherited(helper_testcase)
|
41
41
|
super
|
42
42
|
helper_name = helper_testcase.name.sub 'Test', ''
|
43
|
-
helper_module = Object.
|
43
|
+
helper_module = Object.path2class helper_name
|
44
44
|
helper_testcase.send :include, helper_module
|
45
45
|
rescue NameError
|
46
46
|
raise "Unable to find helper #{helper_name}"
|
@@ -69,11 +69,15 @@ class ActionView::Base
|
|
69
69
|
p args.first
|
70
70
|
when Hash then
|
71
71
|
hash = args.first
|
72
|
-
|
73
|
-
|
74
|
-
puts "%p => %p" % [found.first, hash[found.first]]
|
72
|
+
if hash.include? :collection and hash.include? :partial then
|
73
|
+
puts "%p => %p" % [:collection, hash[:partial]]
|
75
74
|
else
|
76
|
-
|
75
|
+
found = hash.keys & RENDERS
|
76
|
+
if found.length == 1 then
|
77
|
+
puts "%p => %p" % [found.first, hash[found.first]]
|
78
|
+
else
|
79
|
+
raise "Dunno: %p" % [hash]
|
80
|
+
end
|
77
81
|
end
|
78
82
|
else
|
79
83
|
raise "Dunno: %p" % [args]
|
@@ -332,10 +332,10 @@ class Test::Rails::ViewTestCase < Test::Rails::FunctionalTestCase
|
|
332
332
|
# <%= collection_select :game, :location_id, @locations, :id, :name %>
|
333
333
|
#
|
334
334
|
# test:
|
335
|
-
#
|
336
|
-
#
|
335
|
+
# assert_select_tag '/games/save', :game, :location_id,
|
336
|
+
# 'Ballet' => 1, 'Guaymas' => 2
|
337
337
|
|
338
|
-
def
|
338
|
+
def assert_select_tag(form_action, model, column, options)
|
339
339
|
assert_kind_of Hash, options, "options needs to be a Hash"
|
340
340
|
deny options.empty?, "options must not be empty"
|
341
341
|
options.each do |option_name, option_id|
|
@@ -375,7 +375,7 @@ class Test::Rails::ViewTestCase < Test::Rails::FunctionalTestCase
|
|
375
375
|
#
|
376
376
|
# view:
|
377
377
|
# <%= start_form_tag :action => 'save' %>
|
378
|
-
#
|
378
|
+
# [...]
|
379
379
|
#
|
380
380
|
# test:
|
381
381
|
# assert_tag_in_form '/route/save', :tag => 'table'
|
@@ -385,6 +385,33 @@ class Test::Rails::ViewTestCase < Test::Rails::FunctionalTestCase
|
|
385
385
|
:descendant => options
|
386
386
|
end
|
387
387
|
|
388
|
+
##
|
389
|
+
# Asserts that a form with +form_action+ has a textarea with name +name+ and
|
390
|
+
# optionally +value?.
|
391
|
+
#
|
392
|
+
# view:
|
393
|
+
# <%= text_area 'post', 'body' %>
|
394
|
+
#
|
395
|
+
# test:
|
396
|
+
# assert_text_area '/post/save', 'post[body]'
|
397
|
+
#
|
398
|
+
# view:
|
399
|
+
# <textarea id="post_body" name="post[body]">
|
400
|
+
# <%= @post.body %>
|
401
|
+
# </textarea>
|
402
|
+
#
|
403
|
+
# test:
|
404
|
+
# assert_text_area '/post/save', 'post[body]', posts(:post).body
|
405
|
+
|
406
|
+
def assert_text_area(form_action, name, value = nil)
|
407
|
+
attribs = {
|
408
|
+
:tag => 'textarea',
|
409
|
+
:attributes => { :name => name },
|
410
|
+
}
|
411
|
+
attribs[:content] = value if value
|
412
|
+
assert_tag_in_form form_action, attribs
|
413
|
+
end
|
414
|
+
|
388
415
|
##
|
389
416
|
# Creates a new Paginator that uses the current controller. +item_count+,
|
390
417
|
# +items_per_page+ and +page_number+ are passed straight through.
|
data/lib/zentest.rb
CHANGED
data/test/test_autotest.rb
CHANGED
@@ -25,13 +25,16 @@ end
|
|
25
25
|
|
26
26
|
class TestAutotest < Test::Unit::TestCase
|
27
27
|
|
28
|
-
|
29
|
-
RUBY = (WINDOZE ? 'c:\ruby\bin\ruby' : '/usr/local/bin/ruby') unless defined? RUBY
|
28
|
+
RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']) unless defined? RUBY
|
30
29
|
|
31
30
|
def setup
|
32
31
|
@test_class = 'TestBlah'
|
33
32
|
@test = 'test/test_blah.rb'
|
34
33
|
@impl = 'lib/blah.rb'
|
34
|
+
@rails = self.class.name =~ /Rails/
|
35
|
+
@inner_test = 'test/outer/test_inner.rb'
|
36
|
+
@outer_test = 'test/test_outer.rb'
|
37
|
+
@inner_test_class = "TestOuter::TestInner"
|
35
38
|
|
36
39
|
@a = Object.const_get(self.class.name[4..-1]).new
|
37
40
|
@a.output = StringIO.new
|
@@ -43,12 +46,12 @@ class TestAutotest < Test::Unit::TestCase
|
|
43
46
|
|
44
47
|
def test_consolidate_failures_experiment
|
45
48
|
@a.files.clear
|
46
|
-
@a.files[
|
47
|
-
@a.files[
|
49
|
+
@a.files[@impl] = Time.at(1)
|
50
|
+
@a.files[@test] = Time.at(2)
|
48
51
|
|
49
|
-
input = [['test_fail1',
|
52
|
+
input = [['test_fail1', @test_class], ['test_fail2', @test_class], ['test_error1', @test_class], ['test_error2', @test_class]]
|
50
53
|
result = @a.consolidate_failures input
|
51
|
-
expected = {
|
54
|
+
expected = { @test => %w( test_fail1 test_fail2 test_error1 test_error2 ) }
|
52
55
|
assert_equal expected, result
|
53
56
|
end
|
54
57
|
|
@@ -58,12 +61,13 @@ class TestAutotest < Test::Unit::TestCase
|
|
58
61
|
assert_equal expected, result
|
59
62
|
end
|
60
63
|
|
61
|
-
def
|
62
|
-
@
|
64
|
+
def test_consolidate_failures_multiple_possibilities
|
65
|
+
f = @rails ? 'test/other_blah_test.rb' : 'test/test_blah_other.rb'
|
66
|
+
@a.files[f] = Time.at(42)
|
63
67
|
result = @a.consolidate_failures([['test_unmatched', @test_class]])
|
64
|
-
expected = {}
|
68
|
+
expected = { @test => ['test_unmatched']}
|
65
69
|
assert_equal expected, result
|
66
|
-
expected = "
|
70
|
+
expected = ""
|
67
71
|
assert_equal expected, @a.output.string
|
68
72
|
end
|
69
73
|
|
@@ -77,12 +81,12 @@ class TestAutotest < Test::Unit::TestCase
|
|
77
81
|
|
78
82
|
def test_consolidate_failures_nested_classes
|
79
83
|
@a.files.clear
|
80
|
-
@a.files['lib/outer/inner.rb'] = Time.at(5)
|
81
|
-
@a.files['test/outer/test_inner.rb'] = Time.at(5)
|
82
84
|
@a.files['lib/outer.rb'] = Time.at(5)
|
83
|
-
@a.files['
|
84
|
-
|
85
|
-
|
85
|
+
@a.files['lib/outer/inner.rb'] = Time.at(5)
|
86
|
+
@a.files[@inner_test] = Time.at(5)
|
87
|
+
@a.files[@outer_test] = Time.at(5)
|
88
|
+
result = @a.consolidate_failures([['test_blah1', @inner_test_class]])
|
89
|
+
expected = { @inner_test => ['test_blah1'] }
|
86
90
|
assert_equal expected, result
|
87
91
|
expected = ""
|
88
92
|
assert_equal expected, @a.output.string
|
@@ -144,8 +148,8 @@ class TestAutotest < Test::Unit::TestCase
|
|
144
148
|
def test_handle_results
|
145
149
|
@a.files_to_test.clear
|
146
150
|
@a.files.clear
|
147
|
-
@a.files[
|
148
|
-
@a.files[
|
151
|
+
@a.files[@impl] = Time.at(1)
|
152
|
+
@a.files[@test] = Time.at(2)
|
149
153
|
empty = {}
|
150
154
|
assert_equal empty, @a.files_to_test, "must start empty"
|
151
155
|
|
@@ -162,17 +166,17 @@ Finished in 0.001655 seconds.
|
|
162
166
|
|
163
167
|
s2 = "
|
164
168
|
1) Failure:
|
165
|
-
test_fail1(
|
169
|
+
test_fail1(#{@test_class}) [#{@test}:59]:
|
166
170
|
2) Failure:
|
167
|
-
test_fail2(
|
171
|
+
test_fail2(#{@test_class}) [#{@test}:60]:
|
168
172
|
3) Error:
|
169
|
-
test_error1(
|
173
|
+
test_error1(#{@test_class}):
|
170
174
|
3) Error:
|
171
|
-
test_error2(
|
175
|
+
test_error2(#{@test_class}):
|
172
176
|
"
|
173
177
|
|
174
178
|
@a.handle_results(s2)
|
175
|
-
expected = {
|
179
|
+
expected = { @test => %w( test_fail1 test_fail2 test_error1 test_error2 ) }
|
176
180
|
assert_equal expected, @a.files_to_test
|
177
181
|
|
178
182
|
@a.handle_results(s1)
|
@@ -236,22 +240,24 @@ test_error2(TestAutotest):
|
|
236
240
|
assert_equal expected, result
|
237
241
|
end
|
238
242
|
|
243
|
+
def util_path_to_classname(e,i)
|
244
|
+
assert_equal e, @a.path_to_classname(i)
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_path_to_classname
|
248
|
+
# non-rails
|
249
|
+
util_path_to_classname 'TestBlah', 'test/test_blah.rb'
|
250
|
+
util_path_to_classname 'TestOuter::TestInner', 'test/outer/test_inner.rb'
|
251
|
+
end
|
252
|
+
|
239
253
|
def test_tests_for_file
|
240
254
|
assert_equal [@test], @a.tests_for_file(@impl)
|
241
255
|
assert_equal [@test], @a.tests_for_file(@test)
|
242
256
|
|
243
257
|
assert_equal ['test/test_unknown.rb'], @a.tests_for_file('test/test_unknown.rb')
|
244
|
-
# assert_equal [], @a.tests_for_file('test/test_unknown.rb')
|
245
258
|
assert_equal [], @a.tests_for_file('lib/unknown.rb')
|
246
259
|
assert_equal [], @a.tests_for_file('unknown.rb')
|
247
260
|
assert_equal [], @a.tests_for_file('test_unknown.rb')
|
248
|
-
|
249
|
-
# @a.files.clear
|
250
|
-
# @a.files["blah.rb"] = Time.at(1)
|
251
|
-
# @a.files["test_blah.rb"] = Time.at(2)
|
252
|
-
# @a.last_mtime = Time.at(2)
|
253
|
-
# assert_equal ["test_blah.rb"], @a.tests_for_file("test_blah.rb")
|
254
|
-
# assert_equal ["test_blah.rb"], @a.tests_for_file("blah.rb")
|
255
261
|
end
|
256
262
|
|
257
263
|
def util_find_files_to_test(f, expected)
|
data/test/test_help.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class ApplicationController; end
|
2
|
+
|
3
|
+
module ActionView; end
|
4
|
+
module ActionView::Helpers; end
|
5
|
+
module ActionView::Helpers::ActiveRecordHelper; end
|
6
|
+
module ActionView::Helpers::TagHelper; end
|
7
|
+
module ActionView::Helpers::FormTagHelper; end
|
8
|
+
module ActionView::Helpers::FormOptionsHelper; end
|
9
|
+
module ActionView::Helpers::FormHelper; end
|
10
|
+
module ActionView::Helpers::UrlHelper; end
|
11
|
+
module ActionView::Helpers::AssetTagHelper; end
|
12
|
+
|
data/test/test_rails_autotest.rb
CHANGED
@@ -10,6 +10,9 @@ class TestRailsAutotest < TestAutotest
|
|
10
10
|
@test_class = 'RouteTest'
|
11
11
|
@test = 'test/unit/route_test.rb'
|
12
12
|
@impl = 'app/models/route.rb'
|
13
|
+
@inner_test = 'test/outer/inner_test.rb'
|
14
|
+
@outer_test = 'test/outer_test.rb'
|
15
|
+
@inner_test_class = "OuterTest::InnerTest"
|
13
16
|
|
14
17
|
@rails_unit_tests = [@test]
|
15
18
|
|
@@ -166,9 +169,35 @@ class TestRailsAutotest < TestAutotest
|
|
166
169
|
util_tests_for_file('Rakefile')
|
167
170
|
end
|
168
171
|
|
172
|
+
def test_consolidate_failures_multiple_matches_before
|
173
|
+
@test_class = 'BlahTest'
|
174
|
+
@a.files.clear
|
175
|
+
@a.files['app/model/blah.rb'] = Time.at(42)
|
176
|
+
@a.files['app/model/different_blah.rb'] = Time.at(42)
|
177
|
+
@a.files['test/unit/blah_test.rb'] = Time.at(42)
|
178
|
+
@a.files['test/unit/different_blah_test.rb'] = Time.at(42)
|
179
|
+
result = @a.consolidate_failures([['test_matched', @test_class]])
|
180
|
+
expected = { 'test/unit/blah_test.rb' => [ 'test_matched' ] }
|
181
|
+
assert_equal expected, result
|
182
|
+
assert_equal "", @a.output.string
|
183
|
+
end
|
184
|
+
|
169
185
|
def util_tests_for_file(file, *expected)
|
170
186
|
assert_equal(expected.flatten.sort.uniq,
|
171
187
|
@a.tests_for_file(file).sort.uniq, "tests for #{file}")
|
172
188
|
end
|
189
|
+
|
190
|
+
def test_path_to_classname
|
191
|
+
# rails
|
192
|
+
util_path_to_classname 'BlahTest', 'test/blah_test.rb'
|
193
|
+
util_path_to_classname 'BlahTest', 'test/unit/blah_test.rb'
|
194
|
+
util_path_to_classname 'BlahTest', 'test/functional/blah_test.rb'
|
195
|
+
util_path_to_classname 'BlahTest', 'test/integration/blah_test.rb'
|
196
|
+
util_path_to_classname 'BlahTest', 'test/views/blah_test.rb'
|
197
|
+
util_path_to_classname 'BlahTest', 'test/controllers/blah_test.rb'
|
198
|
+
util_path_to_classname 'BlahTest', 'test/helpers/blah_test.rb'
|
199
|
+
|
200
|
+
util_path_to_classname 'OuterTest::InnerTest', 'test/controllers/outer/inner_test.rb'
|
201
|
+
end
|
173
202
|
end
|
174
203
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'test/zentest_assertions'
|
3
|
+
require 'test/rails'
|
4
|
+
|
5
|
+
begin
|
6
|
+
module TRHelper
|
7
|
+
def tr_helper; end
|
8
|
+
end
|
9
|
+
class TRHelperTest < Test::Rails::HelperTestCase; end
|
10
|
+
rescue RuntimeError
|
11
|
+
end
|
12
|
+
|
13
|
+
begin
|
14
|
+
module Widgets; end
|
15
|
+
module Widgets::SomeHelper
|
16
|
+
def widgets_some_helper; end
|
17
|
+
end
|
18
|
+
class Widgets::SomeHelperTest < Test::Rails::HelperTestCase; end
|
19
|
+
rescue RuntimeError
|
20
|
+
end
|
21
|
+
|
22
|
+
class TestRailsHelperTestCase < Test::Unit::TestCase
|
23
|
+
|
24
|
+
def test_self_inherited
|
25
|
+
assert defined? TRHelperTest
|
26
|
+
|
27
|
+
assert_includes TRHelperTest.instance_methods, 'tr_helper'
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_self_inherited_namespaced
|
31
|
+
assert defined? Widgets
|
32
|
+
assert defined? Widgets::SomeHelperTest
|
33
|
+
|
34
|
+
assert_includes Widgets::SomeHelperTest.instance_methods,
|
35
|
+
'widgets_some_helper'
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'test/zentest_assertions'
|
3
|
+
require 'test/rails'
|
4
|
+
|
5
|
+
class View; end
|
6
|
+
|
7
|
+
class TestRailsViewTestCase < Test::Rails::ViewTestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
# override
|
11
|
+
@request = Object.new
|
12
|
+
def @request.body; @body; end
|
13
|
+
def @request.body=(body); @body = body; end
|
14
|
+
|
15
|
+
@assert_tag = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_assert_text_area
|
19
|
+
@request.body = <<-EOF
|
20
|
+
<form action="/post/save">
|
21
|
+
<textarea id="post_body" name="post[body]">
|
22
|
+
OMG he like hates me and he's like going out with this total skank!~ oh noes!!~
|
23
|
+
</textarea>
|
24
|
+
</form>
|
25
|
+
EOF
|
26
|
+
|
27
|
+
assert_text_area '/post/save', 'post[body]'
|
28
|
+
|
29
|
+
expected = {
|
30
|
+
:tag => 'form', :attributes => { :action => '/post/save' },
|
31
|
+
:descendant => {
|
32
|
+
:tag => 'textarea', :attributes => { :name => 'post[body]' } } }
|
33
|
+
|
34
|
+
assert_equal expected, @assert_tag.first
|
35
|
+
|
36
|
+
assert_text_area '/post/save', 'post[body]',
|
37
|
+
"OMG he like hates me and he's like going out with this total skank!~ oh noes!!~"
|
38
|
+
|
39
|
+
expected = {
|
40
|
+
:tag => 'form', :attributes => { :action => '/post/save' },
|
41
|
+
:descendant => {
|
42
|
+
:tag => 'textarea', :attributes => { :name => 'post[body]' },
|
43
|
+
:content =>
|
44
|
+
"OMG he like hates me and he's like going out with this total skank!~ oh noes!!~" } }
|
45
|
+
|
46
|
+
assert_equal expected, @assert_tag.last
|
47
|
+
end
|
48
|
+
|
49
|
+
def assert_tag(arg)
|
50
|
+
@assert_tag << arg
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
data/test/test_zentest.rb
CHANGED
@@ -5,7 +5,7 @@ require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
|
5
5
|
$TESTING = true
|
6
6
|
|
7
7
|
# I do this so I can still run ZenTest against the tests and itself...
|
8
|
-
require '
|
8
|
+
require 'zentest' unless defined? $ZENTEST
|
9
9
|
|
10
10
|
# These are just classes set up for quick testing.
|
11
11
|
# TODO: need to test a compound class name Mod::Cls
|
metadata
CHANGED
@@ -1,43 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: ZenTest
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 3.4.
|
7
|
-
date: 2006-
|
8
|
-
summary:
|
9
|
-
ZenTest can also be used to evaluate generated code and execute your
|
10
|
-
tests, allowing for very rapid development of both tests and
|
11
|
-
implementation.
|
6
|
+
version: 3.4.1
|
7
|
+
date: 2006-10-13 00:00:00 -07:00
|
8
|
+
summary: "ZenTest provides 4 different tools and 1 library: zentest, unit_diff, autotest, multiruby, and Test::Rails."
|
12
9
|
require_paths:
|
13
10
|
- lib
|
11
|
+
- test
|
14
12
|
email: ryand-ruby@zenspider.com
|
15
13
|
homepage: http://www.zenspider.com/ZSS/Products/ZenTest/
|
16
14
|
rubyforge_project: zentest
|
17
|
-
description:
|
18
|
-
ZenTest provides 4 different tools and 1 library: zentest, unit_diff,
|
19
|
-
autotest, multiruby, and Test::Rails.
|
20
|
-
|
21
|
-
ZenTest scans your target and unit-test code and writes your missing
|
22
|
-
code based on simple naming rules, enabling XP at a much quicker
|
23
|
-
pace. ZenTest only works with Ruby and Test::Unit.
|
24
|
-
|
25
|
-
unit_diff is a command-line filter to diff expected results from
|
26
|
-
actual results and allow you to quickly see exactly what is wrong.
|
27
|
-
|
28
|
-
autotest is a continous testing facility meant to be used during
|
29
|
-
development. As soon as you save a file, autotest will run the
|
30
|
-
corresponding dependent tests.
|
31
|
-
|
32
|
-
multiruby runs anything you want on multiple versions of ruby. Great
|
33
|
-
for compatibility checking!
|
34
|
-
|
35
|
-
Test::Rails helps you build industrial-strength Rails code.
|
36
|
-
|
37
|
-
== STRATEGERY
|
38
|
-
|
39
|
-
There are two strategeries intended for ZenTest: test conformance
|
40
|
-
auditing and rapid XP.
|
15
|
+
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."
|
41
16
|
autorequire:
|
42
17
|
default_executable:
|
43
18
|
bindir: bin
|
@@ -97,7 +72,10 @@ files:
|
|
97
72
|
- lib/unit_diff.rb
|
98
73
|
- lib/zentest.rb
|
99
74
|
- test/test_autotest.rb
|
75
|
+
- test/test_help.rb
|
100
76
|
- test/test_rails_autotest.rb
|
77
|
+
- test/test_rails_helper_test_case.rb
|
78
|
+
- test/test_rails_view_test_case.rb
|
101
79
|
- test/test_ruby_fork.rb
|
102
80
|
- test/test_unit_diff.rb
|
103
81
|
- test/test_zentest.rb
|
@@ -120,5 +98,13 @@ extensions: []
|
|
120
98
|
|
121
99
|
requirements: []
|
122
100
|
|
123
|
-
dependencies:
|
124
|
-
|
101
|
+
dependencies:
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: hoe
|
104
|
+
version_requirement:
|
105
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.1.1
|
110
|
+
version:
|