test-loop 2.0.2 → 3.0.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.md +22 -11
- data/bin/test-loop +18 -14
- metadata +4 -4
data/README.md
CHANGED
@@ -8,8 +8,8 @@ and tests changes in your Ruby application in an efficient manner, whereby it:
|
|
8
8
|
2. Forks to evaluate your test files directly and without overhead.
|
9
9
|
|
10
10
|
It relies on file modification times to determine what parts of your Ruby
|
11
|
-
application have changed and then
|
12
|
-
|
11
|
+
application have changed and then determines which test files in your test
|
12
|
+
suite correspond to those changes using a simple lambda mapping function.
|
13
13
|
|
14
14
|
|
15
15
|
Features
|
@@ -24,7 +24,7 @@ Features
|
|
24
24
|
* Supports Test::Unit, RSpec, or any other testing framework that is utilized
|
25
25
|
by your application's `test/test_helper.rb` and `spec/spec_helper.rb` files.
|
26
26
|
|
27
|
-
* Implemented in less than
|
27
|
+
* Implemented in less than 60 (SLOC) lines of code! :-)
|
28
28
|
|
29
29
|
|
30
30
|
Installation
|
@@ -54,13 +54,13 @@ If installed as a Git clone:
|
|
54
54
|
Operation
|
55
55
|
---------
|
56
56
|
|
57
|
-
* Press Control-Z
|
57
|
+
* Press Control-Z or send the SIGTSTP signal to forcibly run all
|
58
58
|
tests, even if there are no changes in your Ruby application.
|
59
59
|
|
60
|
-
* Press Control-\
|
60
|
+
* Press Control-\ or send the SIGQUIT signal to forcibly reabsorb
|
61
61
|
the test execution overhead, even if its sources have not changed.
|
62
62
|
|
63
|
-
* Press Control-C
|
63
|
+
* Press Control-C or send the SIGINT signal to quit the test loop.
|
64
64
|
|
65
65
|
|
66
66
|
Configuration
|
@@ -77,13 +77,24 @@ define the following instance variables:
|
|
77
77
|
set of files which cause the overhead to be reabsorbed whenever they change.
|
78
78
|
|
79
79
|
* `@source_file_to_test_file_mapping` is a hash that maps a file globbing
|
80
|
-
pattern describing a set of source files to a
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
mapping) change, their associated test files (the hash value; right-hand
|
80
|
+
pattern describing a set of source files to a lambda function yielding a
|
81
|
+
file globbing pattern describing a set of test files that need to be run.
|
82
|
+
In other words, whenever the source files (the hash key; left-hand side of
|
83
|
+
the mapping) change, their associated test files (the hash value; right-hand
|
85
84
|
side of the mapping) are run.
|
86
85
|
|
86
|
+
For example, if test files had the same names as their source files but the
|
87
|
+
letters were in reverse order, then you would add the following to your
|
88
|
+
`.test-loop` file:
|
89
|
+
|
90
|
+
@source_file_to_test_file_mapping = {
|
91
|
+
'{lib,app}/**/*.rb' => lambda do |path|
|
92
|
+
extn = File.extname(path)
|
93
|
+
name = File.basename(path, extn)
|
94
|
+
"{test,spec}/**/#{name.reverse}#{extn}" # <== notice the reverse()
|
95
|
+
end
|
96
|
+
}
|
97
|
+
|
87
98
|
* `@after_test_execution` is a proc/lambda object that is executed after tests
|
88
99
|
are run. It is passed three things: the status of the test execution
|
89
100
|
subprocess, the time when the tests were run, and the list of test files
|
data/bin/test-loop
CHANGED
@@ -21,14 +21,11 @@
|
|
21
21
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
22
22
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
23
23
|
#
|
24
|
-
|
25
|
-
require 'rake' # for String#pathmap
|
26
|
-
|
27
|
-
def notify message
|
28
|
-
puts "test-loop: #{message}"
|
29
|
-
end
|
30
|
-
|
31
24
|
begin
|
25
|
+
def notify message
|
26
|
+
puts "test-loop: #{message}"
|
27
|
+
end
|
28
|
+
|
32
29
|
notify 'Loading configuration...'
|
33
30
|
config_file = File.join(Dir.pwd, '.test-loop')
|
34
31
|
load config_file if File.exist? config_file
|
@@ -41,8 +38,15 @@ begin
|
|
41
38
|
push(config_file, 'config/*.{rb,yml}').uniq!
|
42
39
|
|
43
40
|
(@source_file_to_test_file_mapping ||= {}).merge!(
|
44
|
-
|
45
|
-
'{lib,app}/**/*.rb' =>
|
41
|
+
# source files that correspond to test files
|
42
|
+
'{lib,app}/**/*.rb' => lambda do |path|
|
43
|
+
extn = File.extname(path)
|
44
|
+
name = File.basename(path, extn)
|
45
|
+
"{test,spec}/**/#{name}_{test,spec}#{extn}"
|
46
|
+
end,
|
47
|
+
|
48
|
+
# the actual test files themselves
|
49
|
+
'{test,spec}/**/*_{test,spec}.rb' => lambda {|path| path }
|
46
50
|
)
|
47
51
|
|
48
52
|
@after_test_execution ||= lambda {|status, ran_at, files|}
|
@@ -52,8 +56,8 @@ begin
|
|
52
56
|
|
53
57
|
notify 'Absorbing overhead...'
|
54
58
|
Dir[*@overhead_file_globs].each do |file|
|
55
|
-
$LOAD_PATH.insert 1,
|
56
|
-
require file.
|
59
|
+
$LOAD_PATH.insert 1, File.dirname(file)
|
60
|
+
require File.basename(file, File.extname(file))
|
57
61
|
end
|
58
62
|
|
59
63
|
# continuously watch for and test changed code
|
@@ -66,10 +70,10 @@ begin
|
|
66
70
|
loop do
|
67
71
|
# figure out what test files need to be run
|
68
72
|
test_files = @source_file_to_test_file_mapping.
|
69
|
-
map do |source_file_glob,
|
73
|
+
map do |source_file_glob, test_file_glob_mapper|
|
70
74
|
Dir[source_file_glob].
|
71
75
|
select {|file| File.mtime(file) > last_ran_at }.
|
72
|
-
map {|path| Dir[
|
76
|
+
map {|path| Dir[test_file_glob_mapper.call(path)] }
|
73
77
|
end.flatten.uniq
|
74
78
|
|
75
79
|
# fork worker process to run the test files
|
@@ -91,7 +95,7 @@ begin
|
|
91
95
|
end
|
92
96
|
rescue Interrupt
|
93
97
|
# user wants to quit the loop
|
94
|
-
rescue StandardError, LoadError => error
|
98
|
+
rescue StandardError, LoadError, SyntaxError => error
|
95
99
|
puts error.inspect, error.backtrace
|
96
100
|
sleep 1 and exec $0, *ARGV
|
97
101
|
end
|
metadata
CHANGED
@@ -3,10 +3,10 @@ name: test-loop
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
-
|
6
|
+
- 3
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version:
|
8
|
+
- 0
|
9
|
+
version: 3.0.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Suraj N. Kurapati
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-04 00:00:00 -08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|