autowatchr 0.0.0 → 0.1.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.
- data/README.rdoc +46 -4
- data/VERSION +1 -1
- data/autowatchr.gemspec +12 -2
- data/lib/autowatchr.rb +152 -29
- data/test/fixtures/lib/bar.rb +2 -0
- data/test/fixtures/results/all.txt +14 -0
- data/test/fixtures/results/bar_flunk.txt +10 -0
- data/test/fixtures/results/bar_pass.txt +6 -0
- data/test/fixtures/results/foo_flunk.txt +10 -0
- data/test/fixtures/results/foo_pass.txt +6 -0
- data/test/fixtures/test/test_bar.rb +11 -0
- data/test/fixtures/test.watchr +4 -0
- data/test/helper.rb +7 -0
- data/test/test_autowatchr.rb +189 -37
- data/test.watchr +3 -1
- metadata +12 -2
data/README.rdoc
CHANGED
|
@@ -6,19 +6,61 @@ Provides some autotest-like behavior for watchr (http://github.com/mynyml/watchr
|
|
|
6
6
|
|
|
7
7
|
gem install autowatchr --source http://gemcutter.org
|
|
8
8
|
|
|
9
|
+
== Current features
|
|
10
|
+
|
|
11
|
+
* Auto-watches test and lib files using the autotest layout
|
|
12
|
+
* Optionally run only failing-tests
|
|
13
|
+
* Optionally run entire suite after all tests pass
|
|
14
|
+
|
|
15
|
+
== Todo
|
|
16
|
+
|
|
17
|
+
* Cucumber support
|
|
18
|
+
* Expose algorithm to map test classes to test files
|
|
19
|
+
|
|
9
20
|
== Example use
|
|
10
21
|
|
|
11
22
|
test.watchr
|
|
12
23
|
require 'autowatchr'
|
|
13
24
|
|
|
14
25
|
Autowatchr.new(self) do |config|
|
|
15
|
-
config.ruby =
|
|
16
|
-
config.lib_dir =
|
|
17
|
-
config.test_dir =
|
|
26
|
+
config.ruby = 'jruby'
|
|
27
|
+
config.lib_dir = 'leet_lib'
|
|
28
|
+
config.test_dir = 'leet_test'
|
|
18
29
|
end
|
|
19
30
|
|
|
20
|
-
|
|
31
|
+
=== Configuration options
|
|
32
|
+
* command
|
|
33
|
+
* An ERB template for the command
|
|
34
|
+
* Default: <tt>"<%= ruby %> -I<%= include %> <%= predicate %>"</tt>
|
|
35
|
+
* ruby
|
|
36
|
+
* The ruby executable to use
|
|
37
|
+
* Default: <tt>"ruby"</tt>
|
|
38
|
+
* include
|
|
39
|
+
* Paths to include (with -I)
|
|
40
|
+
* Default: <tt>".:#{self.lib_dir}:#{self.test_dir}"</tt>
|
|
41
|
+
* lib_dir
|
|
42
|
+
* The lib path, where your library lives
|
|
43
|
+
* Default: <tt>"lib"</tt>
|
|
44
|
+
* test_dir
|
|
45
|
+
* The test path, where your tests live
|
|
46
|
+
* Default: <tt>"test"</tt>
|
|
47
|
+
* lib_re
|
|
48
|
+
* The regexp to use for discovering library files
|
|
49
|
+
* Default: <tt>'^%s.*/.*\.rb$' % self.lib_dir</tt>
|
|
50
|
+
* test_re
|
|
51
|
+
* The regexp to use for discovering library files
|
|
52
|
+
* Default: <tt>'^%s.*/test_.*\.rb$' % self.test_dir</tt>
|
|
53
|
+
* failing_only
|
|
54
|
+
* Run only failing tests the next time a test file is run
|
|
55
|
+
* Default: <tt>true</tt>
|
|
56
|
+
* run_suite
|
|
57
|
+
* Run entire test suite after failing tests pass
|
|
58
|
+
* Default: <tt>true</tt>
|
|
59
|
+
|
|
60
|
+
All of the config options are optional. You can also pass in a hash instead of a block. Also see: test.watchr[http://github.com/viking/autowatchr/blob/master/test.watchr].
|
|
21
61
|
|
|
22
62
|
== Copyright
|
|
23
63
|
|
|
24
64
|
Copyright (c) 2009 Jeremy Stephens. See LICENSE for details.
|
|
65
|
+
|
|
66
|
+
Many snippets were taken from ZenTest[http://github.com/seattlerb/ZenTest].
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.1.0
|
data/autowatchr.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{autowatchr}
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.version = "0.1.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Jeremy Stephens"]
|
|
12
|
-
s.date = %q{2009-
|
|
12
|
+
s.date = %q{2009-10-02}
|
|
13
13
|
s.description = %q{Provides some autotest-like behavior for watchr (http://github.com/mynyml/watchr).}
|
|
14
14
|
s.email = %q{viking415@gmail.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -26,9 +26,17 @@ Gem::Specification.new do |s|
|
|
|
26
26
|
"autowatchr.gemspec",
|
|
27
27
|
"lib/autowatchr.rb",
|
|
28
28
|
"test.watchr",
|
|
29
|
+
"test/fixtures/lib/bar.rb",
|
|
29
30
|
"test/fixtures/lib/foo.rb",
|
|
31
|
+
"test/fixtures/results/all.txt",
|
|
32
|
+
"test/fixtures/results/bar_flunk.txt",
|
|
33
|
+
"test/fixtures/results/bar_pass.txt",
|
|
30
34
|
"test/fixtures/results/foo.txt",
|
|
35
|
+
"test/fixtures/results/foo_flunk.txt",
|
|
36
|
+
"test/fixtures/results/foo_pass.txt",
|
|
37
|
+
"test/fixtures/test.watchr",
|
|
31
38
|
"test/fixtures/test/helper.rb",
|
|
39
|
+
"test/fixtures/test/test_bar.rb",
|
|
32
40
|
"test/fixtures/test/test_foo.rb",
|
|
33
41
|
"test/helper.rb",
|
|
34
42
|
"test/test_autowatchr.rb"
|
|
@@ -40,7 +48,9 @@ Gem::Specification.new do |s|
|
|
|
40
48
|
s.summary = %q{Provides some autotest-like behavior for watchr}
|
|
41
49
|
s.test_files = [
|
|
42
50
|
"test/fixtures/test/test_foo.rb",
|
|
51
|
+
"test/fixtures/test/test_bar.rb",
|
|
43
52
|
"test/fixtures/test/helper.rb",
|
|
53
|
+
"test/fixtures/lib/bar.rb",
|
|
44
54
|
"test/fixtures/lib/foo.rb",
|
|
45
55
|
"test/test_autowatchr.rb",
|
|
46
56
|
"test/helper.rb"
|
data/lib/autowatchr.rb
CHANGED
|
@@ -1,45 +1,118 @@
|
|
|
1
|
+
require 'erb'
|
|
2
|
+
|
|
1
3
|
class Autowatchr
|
|
2
|
-
|
|
4
|
+
class Config
|
|
5
|
+
attr_writer :command, :ruby, :include, :lib_dir, :test_dir, :lib_re,
|
|
6
|
+
:test_re, :failed_results_re, :completed_re, :failing_only, :run_suite
|
|
3
7
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
def initialize(options = {})
|
|
9
|
+
@failing_only = @run_suite = true
|
|
10
|
+
|
|
11
|
+
options.each_pair do |key, value|
|
|
12
|
+
method = "#{key}="
|
|
13
|
+
if self.respond_to?(method)
|
|
14
|
+
self.send(method, value)
|
|
15
|
+
end
|
|
9
16
|
end
|
|
10
17
|
end
|
|
11
|
-
yield self if block_given?
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
def command
|
|
20
|
+
@command ||= "<%= ruby %> -I<%= include %> <%= predicate %>"
|
|
21
|
+
end
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
def ruby
|
|
24
|
+
@ruby ||= "ruby"
|
|
25
|
+
end
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
def include
|
|
28
|
+
@include ||= ".:#{self.lib_dir}:#{self.test_dir}"
|
|
29
|
+
end
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
def lib_dir
|
|
32
|
+
@lib_dir ||= "lib"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_dir
|
|
36
|
+
@test_dir ||= "test"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def lib_re
|
|
40
|
+
@lib_re ||= '^%s.*/.*\.rb$' % self.lib_dir
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_re
|
|
44
|
+
@test_re ||= '^%s.*/test_.*\.rb$' % self.test_dir
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def failed_results_re
|
|
48
|
+
@failed_results_re ||= /^\s+\d+\) (?:Failure|Error):\n(.*?)\((.*?)\)/
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def completed_re
|
|
52
|
+
@completed_re ||= /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def failing_only
|
|
56
|
+
@failing_only
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def run_suite
|
|
60
|
+
@run_suite
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def eval_command(predicate)
|
|
64
|
+
ERB.new(self.command).result(binding)
|
|
65
|
+
end
|
|
27
66
|
end
|
|
28
67
|
|
|
29
|
-
|
|
30
|
-
|
|
68
|
+
attr_reader :config
|
|
69
|
+
|
|
70
|
+
def initialize(script, options = {})
|
|
71
|
+
@config = Config.new(options)
|
|
72
|
+
yield @config if block_given?
|
|
73
|
+
@script = script
|
|
74
|
+
@test_files = []
|
|
75
|
+
@failed_tests = {}
|
|
76
|
+
|
|
77
|
+
discover_files
|
|
78
|
+
run_all_tests
|
|
79
|
+
start_watching_files
|
|
31
80
|
end
|
|
32
81
|
|
|
33
82
|
def run_lib_file(file)
|
|
34
|
-
md = file.match(%r{^#{@lib_dir}#{File::SEPARATOR}?(.+)$})
|
|
83
|
+
md = file.match(%r{^#{@config.lib_dir}#{File::SEPARATOR}?(.+)$})
|
|
35
84
|
parts = md[1].split(File::SEPARATOR)
|
|
36
85
|
parts[-1] = "test_#{parts[-1]}"
|
|
37
|
-
file = "#{@test_dir}/" + File.join(parts)
|
|
86
|
+
file = "#{@config.test_dir}/" + File.join(parts)
|
|
38
87
|
run_test_file(file)
|
|
39
88
|
end
|
|
40
89
|
|
|
41
|
-
def run_test_file(
|
|
42
|
-
|
|
90
|
+
def run_test_file(files)
|
|
91
|
+
files = [files] unless files.is_a?(Array)
|
|
92
|
+
|
|
93
|
+
passing = []
|
|
94
|
+
commands = []
|
|
95
|
+
files.each do |file|
|
|
96
|
+
tests = @failed_tests[file]
|
|
97
|
+
if tests && !tests.empty?
|
|
98
|
+
predicate = %!#{file} -n "/^(#{tests.join("|")})$/"!
|
|
99
|
+
commands << @config.eval_command(predicate)
|
|
100
|
+
else
|
|
101
|
+
passing << file
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
if !passing.empty?
|
|
106
|
+
predicate = if passing.length > 1
|
|
107
|
+
"-e \"%w[#{passing.join(" ")}].each { |f| require f }\""
|
|
108
|
+
else
|
|
109
|
+
passing[0]
|
|
110
|
+
end
|
|
111
|
+
commands.unshift(@config.eval_command(predicate))
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
cmd = commands.join("; ")
|
|
115
|
+
puts cmd
|
|
43
116
|
|
|
44
117
|
# straight outta autotest
|
|
45
118
|
results = []
|
|
@@ -52,18 +125,68 @@ class Autowatchr
|
|
|
52
125
|
if c == ?\n then
|
|
53
126
|
results << if RUBY_VERSION >= "1.9" then
|
|
54
127
|
line.join
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
128
|
+
else
|
|
129
|
+
line.pack "c*"
|
|
130
|
+
end
|
|
58
131
|
line.clear
|
|
59
132
|
end
|
|
60
133
|
end
|
|
61
134
|
end
|
|
135
|
+
handle_results(results.join, files)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def classname_to_path(s)
|
|
139
|
+
File.join(@config.test_dir, underscore(s)+".rb")
|
|
62
140
|
end
|
|
63
141
|
|
|
64
142
|
private
|
|
143
|
+
def discover_files
|
|
144
|
+
@test_files = Dir.glob("#{@config.test_dir}/**/*").grep(/#{@config.test_re}/)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def run_all_tests
|
|
148
|
+
run_test_file(@test_files)
|
|
149
|
+
end
|
|
150
|
+
|
|
65
151
|
def start_watching_files
|
|
66
|
-
@script.watch(
|
|
67
|
-
@script.watch(
|
|
152
|
+
@script.watch(@config.test_re) { |md| run_test_file(md[0]) }
|
|
153
|
+
@script.watch(@config.lib_re) { |md| run_lib_file(md[0]) }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def handle_results(results, files_ran)
|
|
157
|
+
return if !@config.failing_only
|
|
158
|
+
num_previously_failed = @failed_tests.length
|
|
159
|
+
|
|
160
|
+
failed = results.scan(@config.failed_results_re)
|
|
161
|
+
completed = results =~ @config.completed_re
|
|
162
|
+
|
|
163
|
+
previously_failed = @failed_tests.keys & files_ran
|
|
164
|
+
failed.each do |(test_name, class_name)|
|
|
165
|
+
key = classname_to_path(class_name)
|
|
166
|
+
if files_ran.include?(key)
|
|
167
|
+
@failed_tests[key] ||= []
|
|
168
|
+
@failed_tests[key] << test_name
|
|
169
|
+
previously_failed.delete(key)
|
|
170
|
+
else
|
|
171
|
+
puts "Couldn't map class to file: #{class_name}"
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
previously_failed.each do |file|
|
|
176
|
+
@failed_tests.delete(file)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
if @config.run_suite && @failed_tests.empty? && num_previously_failed > 0
|
|
180
|
+
run_all_tests
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 206
|
|
185
|
+
def underscore(camel_cased_word)
|
|
186
|
+
camel_cased_word.to_s.gsub(/::/, '/').
|
|
187
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
188
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
189
|
+
tr("-", "_").
|
|
190
|
+
downcase
|
|
68
191
|
end
|
|
69
192
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Loaded suite -e
|
|
2
|
+
Started
|
|
3
|
+
F.F.
|
|
4
|
+
Finished in 0.001231 seconds.
|
|
5
|
+
|
|
6
|
+
1) Failure:
|
|
7
|
+
test_flunk(TestBar) [./test/test_bar.rb:9]:
|
|
8
|
+
Flunked.
|
|
9
|
+
|
|
10
|
+
2) Failure:
|
|
11
|
+
test_flunk(TestFoo) [./test/test_foo.rb:9]:
|
|
12
|
+
Flunked.
|
|
13
|
+
|
|
14
|
+
4 tests, 4 assertions, 2 failures, 0 errors
|
data/test/helper.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
2
|
require 'test/unit'
|
|
3
3
|
require 'mocha'
|
|
4
|
+
require 'pp'
|
|
5
|
+
require 'ruby-debug'
|
|
4
6
|
|
|
5
7
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
6
8
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
@@ -21,3 +23,8 @@ class Test::Unit::TestCase
|
|
|
21
23
|
stream.reopen(old_stream)
|
|
22
24
|
end
|
|
23
25
|
end
|
|
26
|
+
|
|
27
|
+
def debug_p(obj, label = nil)
|
|
28
|
+
$stderr.print "#{label}: " if label
|
|
29
|
+
$stderr.puts obj.inspect
|
|
30
|
+
end
|
data/test/test_autowatchr.rb
CHANGED
|
@@ -17,67 +17,219 @@ class TestAutowatchr < Test::Unit::TestCase
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_new_with_hash
|
|
20
|
-
aw =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
aw = nil
|
|
21
|
+
silence_stream(STDOUT) do
|
|
22
|
+
aw = Autowatchr.new(@script, {
|
|
23
|
+
:ruby => "/usr/local/bin/ruby",
|
|
24
|
+
:include => ".:lib:test"
|
|
25
|
+
})
|
|
26
|
+
end
|
|
27
|
+
assert_equal "/usr/local/bin/ruby", aw.config.ruby
|
|
28
|
+
assert_equal ".:lib:test", aw.config.include
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
def test_new_with_block
|
|
29
|
-
aw =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
aw = nil
|
|
33
|
+
silence_stream(STDOUT) do
|
|
34
|
+
aw = Autowatchr.new(@script) do |config|
|
|
35
|
+
config.ruby = "/usr/local/bin/ruby"
|
|
36
|
+
config.include = ".:lib:test"
|
|
37
|
+
config.lib_dir = @lib_dir
|
|
38
|
+
config.test_dir = @test_dir
|
|
39
|
+
end
|
|
34
40
|
end
|
|
35
|
-
assert_equal "/usr/local/bin/ruby", aw.ruby
|
|
36
|
-
assert_equal ".:lib:test", aw.include
|
|
37
|
-
assert_equal @lib_dir, aw.lib_dir
|
|
38
|
-
assert_equal @test_dir, aw.test_dir
|
|
41
|
+
assert_equal "/usr/local/bin/ruby", aw.config.ruby
|
|
42
|
+
assert_equal ".:lib:test", aw.config.include
|
|
43
|
+
assert_equal @lib_dir, aw.config.lib_dir
|
|
44
|
+
assert_equal @test_dir, aw.config.test_dir
|
|
39
45
|
end
|
|
40
46
|
|
|
41
47
|
def test_auto_includes
|
|
42
|
-
aw =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
aw = nil
|
|
49
|
+
silence_stream(STDOUT) do
|
|
50
|
+
aw = Autowatchr.new(@script) do |config|
|
|
51
|
+
config.ruby = "/usr/local/bin/ruby"
|
|
52
|
+
config.lib_dir = @lib_dir
|
|
53
|
+
config.test_dir = @test_dir
|
|
54
|
+
end
|
|
46
55
|
end
|
|
47
|
-
assert_equal ".:#{@lib_dir}:#{@test_dir}", aw.include
|
|
56
|
+
assert_equal ".:#{@lib_dir}:#{@test_dir}", aw.config.include
|
|
48
57
|
end
|
|
49
58
|
|
|
50
59
|
def test_defaults
|
|
51
|
-
aw =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
assert_equal "
|
|
60
|
+
aw = nil
|
|
61
|
+
silence_stream(STDOUT) do
|
|
62
|
+
aw = Autowatchr.new(@script)
|
|
63
|
+
end
|
|
64
|
+
assert_equal "ruby", aw.config.ruby
|
|
65
|
+
assert_equal ".:lib:test", aw.config.include
|
|
66
|
+
assert_equal "lib", aw.config.lib_dir
|
|
67
|
+
assert_equal "test", aw.config.test_dir
|
|
68
|
+
assert_equal '^lib.*/.*\.rb$', aw.config.lib_re
|
|
69
|
+
assert_equal '^test.*/test_.*\.rb$', aw.config.test_re
|
|
70
|
+
assert_equal /^\s+\d+\) (?:Failure|Error):\n(.*?)\((.*?)\)/, aw.config.failed_results_re
|
|
71
|
+
assert_equal /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/, aw.config.completed_re
|
|
56
72
|
end
|
|
57
73
|
|
|
58
74
|
def test_watches_test_files
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
@script.expects(:watch).with('^%s.*/test_.*\.rb$' % @test_dir)
|
|
76
|
+
silence_stream(STDOUT) do
|
|
77
|
+
new_autowatchr
|
|
78
|
+
end
|
|
63
79
|
end
|
|
64
80
|
|
|
65
81
|
def test_watches_lib_files
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
@script.expects(:watch).with('^%s.*/.*\.rb$' % @lib_dir)
|
|
83
|
+
silence_stream(STDOUT) do
|
|
84
|
+
new_autowatchr
|
|
85
|
+
end
|
|
70
86
|
end
|
|
71
87
|
|
|
72
88
|
def test_run_lib_file
|
|
73
|
-
aw = new_autowatchr
|
|
74
89
|
result = fake_result("foo")
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
).yields(result)
|
|
90
|
+
expected_cmd = "| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb"
|
|
91
|
+
Autowatchr.any_instance.expects(:open).with(expected_cmd, "r").yields(result)
|
|
78
92
|
|
|
79
93
|
silence_stream(STDOUT) do
|
|
94
|
+
aw = new_autowatchr
|
|
80
95
|
aw.run_lib_file("#{@lib_dir}/foo.rb")
|
|
81
96
|
end
|
|
82
97
|
end
|
|
98
|
+
|
|
99
|
+
def test_running_multiple_test_files
|
|
100
|
+
result = fake_result("all")
|
|
101
|
+
expected_cmd = "| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} -e \"%w[#{@test_dir}/test_bar.rb #{@test_dir}/test_foo.rb].each { |f| require f }\""
|
|
102
|
+
Autowatchr.any_instance.expects(:open).with(expected_cmd, "r").yields(result)
|
|
103
|
+
|
|
104
|
+
silence_stream(STDOUT) do
|
|
105
|
+
aw = new_autowatchr
|
|
106
|
+
aw.run_test_file(["#{@test_dir}/test_bar.rb", "#{@test_dir}/test_foo.rb"])
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_runs_all_test_files_on_start
|
|
111
|
+
result = fake_result("all")
|
|
112
|
+
files = Dir.glob("#{@test_dir}/**/test_*.rb").join(" ")
|
|
113
|
+
expected_cmd = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} -e "%w[#{files}].each { |f| require f }"!
|
|
114
|
+
Autowatchr.any_instance.expects(:open).with(expected_cmd, "r").yields(result)
|
|
115
|
+
|
|
116
|
+
silence_stream(STDOUT) do
|
|
117
|
+
new_autowatchr
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_mapping_test_classes_to_test_files
|
|
122
|
+
aw = nil
|
|
123
|
+
silence_stream(STDOUT) do
|
|
124
|
+
aw = new_autowatchr
|
|
125
|
+
end
|
|
126
|
+
assert_equal "#{@test_dir}/test_foo.rb", aw.classname_to_path("TestFoo")
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_only_runs_failing_tests
|
|
130
|
+
result = fake_result("all")
|
|
131
|
+
Autowatchr.any_instance.stubs(:open).yields(result)
|
|
132
|
+
aw = nil
|
|
133
|
+
silence_stream(STDOUT) do
|
|
134
|
+
aw = new_autowatchr
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
result = fake_result("foo_flunk")
|
|
138
|
+
expected_cmd = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb -n "/^(test_flunk)$/"!
|
|
139
|
+
aw.expects(:open).with(expected_cmd, "r").yields(result)
|
|
140
|
+
|
|
141
|
+
silence_stream(STDOUT) do
|
|
142
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_clears_failing_test_when_it_passes
|
|
147
|
+
result = fake_result("all")
|
|
148
|
+
Autowatchr.any_instance.stubs(:open).yields(result)
|
|
149
|
+
aw = nil
|
|
150
|
+
silence_stream(STDOUT) do
|
|
151
|
+
aw = new_autowatchr
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
result = fake_result("foo_pass")
|
|
155
|
+
silence_stream(STDOUT) do
|
|
156
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
result = fake_result("foo")
|
|
160
|
+
expected_cmd = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb!
|
|
161
|
+
aw.expects(:open).with(expected_cmd, "r").yields(result)
|
|
162
|
+
silence_stream(STDOUT) do
|
|
163
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_not_only_running_failing_tests
|
|
168
|
+
result = fake_result("all")
|
|
169
|
+
Autowatchr.any_instance.stubs(:open).yields(result)
|
|
170
|
+
aw = nil
|
|
171
|
+
silence_stream(STDOUT) do
|
|
172
|
+
aw = new_autowatchr(:failing_only => false)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
result = fake_result("foo")
|
|
176
|
+
expected_cmd = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb!
|
|
177
|
+
aw.expects(:open).with(expected_cmd, "r").yields(result)
|
|
178
|
+
silence_stream(STDOUT) do
|
|
179
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def test_running_entire_suite_after_green
|
|
184
|
+
result_1 = fake_result("all")
|
|
185
|
+
Autowatchr.any_instance.stubs(:open).yields(result_1)
|
|
186
|
+
aw = nil
|
|
187
|
+
silence_stream(STDOUT) do
|
|
188
|
+
aw = new_autowatchr
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
result_2 = fake_result("foo_pass")
|
|
192
|
+
expected_cmd_2 = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb -n "/^(test_flunk)$/"!
|
|
193
|
+
aw.expects(:open).with(expected_cmd_2, "r").yields(result_2)
|
|
194
|
+
silence_stream(STDOUT) do
|
|
195
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
result_3 = fake_result("bar_pass")
|
|
199
|
+
expected_cmd_3 = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_bar.rb -n "/^(test_flunk)$/"!
|
|
200
|
+
aw.expects(:open).with(expected_cmd_3, "r").yields(result_3)
|
|
201
|
+
|
|
202
|
+
files = Dir.glob("#{@test_dir}/**/test_*.rb").join(" ")
|
|
203
|
+
result_4 = fake_result("all")
|
|
204
|
+
expected_cmd_4 = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} -e "%w[#{files}].each { |f| require f }"!
|
|
205
|
+
aw.expects(:open).with(expected_cmd_4, "r").yields(result_4)
|
|
206
|
+
|
|
207
|
+
silence_stream(STDOUT) do
|
|
208
|
+
aw.run_test_file("#{@test_dir}/test_bar.rb")
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_not_running_entire_suite_after_green
|
|
213
|
+
result_1 = fake_result("all")
|
|
214
|
+
Autowatchr.any_instance.stubs(:open).yields(result_1)
|
|
215
|
+
aw = nil
|
|
216
|
+
silence_stream(STDOUT) do
|
|
217
|
+
aw = new_autowatchr(:run_suite => false)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
result_2 = fake_result("foo_pass")
|
|
221
|
+
expected_cmd_2 = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_foo.rb -n "/^(test_flunk)$/"!
|
|
222
|
+
aw.expects(:open).with(expected_cmd_2, "r").yields(result_2)
|
|
223
|
+
silence_stream(STDOUT) do
|
|
224
|
+
aw.run_test_file("#{@test_dir}/test_foo.rb")
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
result_3 = fake_result("bar_pass")
|
|
228
|
+
expected_cmd_3 = %!| /usr/local/bin/ruby -I.:#{@lib_dir}:#{@test_dir} #{@test_dir}/test_bar.rb -n "/^(test_flunk)$/"!
|
|
229
|
+
aw.expects(:open).with(expected_cmd_3, "r").yields(result_3)
|
|
230
|
+
|
|
231
|
+
silence_stream(STDOUT) do
|
|
232
|
+
aw.run_test_file("#{@test_dir}/test_bar.rb")
|
|
233
|
+
end
|
|
234
|
+
end
|
|
83
235
|
end
|
data/test.watchr
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: autowatchr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeremy Stephens
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2009-
|
|
12
|
+
date: 2009-10-02 00:00:00 -05:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -51,9 +51,17 @@ files:
|
|
|
51
51
|
- autowatchr.gemspec
|
|
52
52
|
- lib/autowatchr.rb
|
|
53
53
|
- test.watchr
|
|
54
|
+
- test/fixtures/lib/bar.rb
|
|
54
55
|
- test/fixtures/lib/foo.rb
|
|
56
|
+
- test/fixtures/results/all.txt
|
|
57
|
+
- test/fixtures/results/bar_flunk.txt
|
|
58
|
+
- test/fixtures/results/bar_pass.txt
|
|
55
59
|
- test/fixtures/results/foo.txt
|
|
60
|
+
- test/fixtures/results/foo_flunk.txt
|
|
61
|
+
- test/fixtures/results/foo_pass.txt
|
|
62
|
+
- test/fixtures/test.watchr
|
|
56
63
|
- test/fixtures/test/helper.rb
|
|
64
|
+
- test/fixtures/test/test_bar.rb
|
|
57
65
|
- test/fixtures/test/test_foo.rb
|
|
58
66
|
- test/helper.rb
|
|
59
67
|
- test/test_autowatchr.rb
|
|
@@ -87,7 +95,9 @@ specification_version: 3
|
|
|
87
95
|
summary: Provides some autotest-like behavior for watchr
|
|
88
96
|
test_files:
|
|
89
97
|
- test/fixtures/test/test_foo.rb
|
|
98
|
+
- test/fixtures/test/test_bar.rb
|
|
90
99
|
- test/fixtures/test/helper.rb
|
|
100
|
+
- test/fixtures/lib/bar.rb
|
|
91
101
|
- test/fixtures/lib/foo.rb
|
|
92
102
|
- test/test_autowatchr.rb
|
|
93
103
|
- test/helper.rb
|