ZenTest 3.6.1 → 3.7.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/History.txt +89 -0
- data/Manifest.txt +1 -4
- data/Rakefile +1 -1
- data/example.txt +2 -1
- data/lib/autotest.rb +27 -6
- data/lib/autotest/cctray.rb +57 -0
- data/lib/autotest/redgreen.rb +1 -1
- data/lib/autotest/screen.rb +1 -1
- data/lib/test/rails.rb +1 -0
- data/lib/test/rails/view_test_case.rb +1 -1
- data/lib/test/zentest_assertions.rb +12 -0
- data/lib/unit_diff.rb +1 -1
- data/lib/zentest.rb +38 -29
- data/lib/zentest_mapping.rb +3 -1
- data/test/test_autotest.rb +1 -0
- data/test/test_help.rb +1 -1
- data/test/test_rails_view_test_case.rb +11 -11
- data/test/test_zentest.rb +22 -2
- data/test/test_zentest_mapping.rb +2 -2
- metadata +61 -60
- data/bin/ruby_fork +0 -6
- data/bin/ruby_fork_client +0 -6
- data/lib/ruby_fork.rb +0 -178
- data/test/test_ruby_fork.rb +0 -172
data/bin/ruby_fork
DELETED
data/bin/ruby_fork_client
DELETED
data/lib/ruby_fork.rb
DELETED
@@ -1,178 +0,0 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
require 'socket'
|
3
|
-
|
4
|
-
module RubyFork
|
5
|
-
|
6
|
-
PORT = 9084
|
7
|
-
|
8
|
-
DEFAULT_SETTINGS = {
|
9
|
-
:requires => [],
|
10
|
-
:code => [],
|
11
|
-
:extra_paths => [],
|
12
|
-
:port => PORT,
|
13
|
-
}
|
14
|
-
|
15
|
-
def self.add_env_args(opts, settings)
|
16
|
-
opts.separator ''
|
17
|
-
opts.separator 'Process environment options:'
|
18
|
-
|
19
|
-
opts.separator ''
|
20
|
-
opts.on('-e CODE', 'Execute CODE in parent process.',
|
21
|
-
'May be specified multiple times.') do |code|
|
22
|
-
settings[:code] << code
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.separator ''
|
26
|
-
opts.on('-I DIRECTORY', 'Adds DIRECTORY to $LOAD_PATH.',
|
27
|
-
'May be specified multiple times.') do |dir|
|
28
|
-
settings[:extra_paths] << dir
|
29
|
-
end
|
30
|
-
|
31
|
-
opts.separator ''
|
32
|
-
opts.on('-r LIBRARY', 'Require LIBRARY in the parent process.',
|
33
|
-
'May be specified multiple times.') do |lib|
|
34
|
-
settings[:requires] << lib
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.daemonize(io = File.open('/dev/null', 'r+'))
|
39
|
-
fork and exit!
|
40
|
-
Process.setsid
|
41
|
-
fork and exit!
|
42
|
-
|
43
|
-
STDIN.reopen io
|
44
|
-
STDOUT.reopen io
|
45
|
-
#STDERR.reopen io
|
46
|
-
|
47
|
-
yield if block_given?
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.parse_client_args(args)
|
51
|
-
settings = Marshal.load Marshal.dump(DEFAULT_SETTINGS)
|
52
|
-
|
53
|
-
opts = OptionParser.new do |opts|
|
54
|
-
opts.banner = "Usage: #{$0} [options]"
|
55
|
-
|
56
|
-
opts.separator ''
|
57
|
-
opts.on('-p', '--port PORT',
|
58
|
-
'Listen for connections on PORT.',
|
59
|
-
"Default: #{settings[:port]}") do |port|
|
60
|
-
settings[:port] = port.to_i
|
61
|
-
end
|
62
|
-
|
63
|
-
opts.separator ''
|
64
|
-
opts.on('-h', '--help', 'You\'re looking at it.') do
|
65
|
-
$stderr.puts opts
|
66
|
-
exit 1
|
67
|
-
end
|
68
|
-
|
69
|
-
add_env_args opts, settings
|
70
|
-
end
|
71
|
-
|
72
|
-
opts.parse! args
|
73
|
-
|
74
|
-
return settings
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.parse_server_args(args)
|
78
|
-
settings = Marshal.load Marshal.dump(DEFAULT_SETTINGS)
|
79
|
-
settings[:daemonize] = false
|
80
|
-
|
81
|
-
opts = OptionParser.new do |opts|
|
82
|
-
opts.banner = "Usage: #{$0} [options]"
|
83
|
-
|
84
|
-
opts.separator ''
|
85
|
-
opts.on('-d', '--daemonize',
|
86
|
-
'Run as a daemon.',
|
87
|
-
"Default: #{settings[:daemonize]}") do |val|
|
88
|
-
settings[:daemonize] = val
|
89
|
-
end
|
90
|
-
|
91
|
-
opts.separator ''
|
92
|
-
opts.on('-p', '--port PORT',
|
93
|
-
'Listen for connections on PORT.',
|
94
|
-
"Default: #{settings[:port]}") do |port|
|
95
|
-
settings[:port] = port.to_i
|
96
|
-
end
|
97
|
-
|
98
|
-
opts.separator ''
|
99
|
-
opts.on('-h', '--help', 'You\'re looking at it.') do
|
100
|
-
$stderr.puts opts
|
101
|
-
exit 1
|
102
|
-
end
|
103
|
-
|
104
|
-
add_env_args opts, settings
|
105
|
-
end
|
106
|
-
|
107
|
-
opts.parse! args
|
108
|
-
|
109
|
-
return settings
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.start_client(args = ARGV)
|
113
|
-
trap 'INT' do exit 1 end # Exit gracefully
|
114
|
-
|
115
|
-
settings = parse_client_args args
|
116
|
-
|
117
|
-
args = Marshal.dump [settings, ARGV]
|
118
|
-
|
119
|
-
socket = TCPSocket.new 'localhost', settings[:port]
|
120
|
-
|
121
|
-
socket.puts args.length
|
122
|
-
socket.write args
|
123
|
-
socket.close_write
|
124
|
-
|
125
|
-
until socket.eof?
|
126
|
-
$stdout.puts socket.gets
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.start_server(args = ARGV)
|
131
|
-
settings = parse_server_args args
|
132
|
-
setup_environment settings
|
133
|
-
|
134
|
-
daemonize if settings[:daemonize]
|
135
|
-
|
136
|
-
server = TCPServer.new 'localhost', settings[:port]
|
137
|
-
|
138
|
-
$stderr.puts "#{$0} Running as PID #{$$} on #{settings[:port]}" unless
|
139
|
-
settings[:daemonize]
|
140
|
-
|
141
|
-
loop do
|
142
|
-
Thread.new server.accept do |socket|
|
143
|
-
begin
|
144
|
-
args_length = socket.gets.to_i
|
145
|
-
args = socket.read args_length
|
146
|
-
settings, argv = Marshal.load args
|
147
|
-
|
148
|
-
fork do
|
149
|
-
daemonize socket do
|
150
|
-
ARGV.replace argv
|
151
|
-
setup_environment settings
|
152
|
-
socket.close
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
socket.close # close my copy.
|
157
|
-
rescue => e
|
158
|
-
socket.close if socket
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
rescue Exception => e
|
163
|
-
puts "Failed to catch #{e.class}:#{e.message}"
|
164
|
-
puts "\t#{e.backtrace.join "\n\t"}"
|
165
|
-
end
|
166
|
-
|
167
|
-
def self.setup_environment(settings)
|
168
|
-
settings[:extra_paths].map! { |dir| dir.split ':' }
|
169
|
-
settings[:extra_paths].flatten!
|
170
|
-
settings[:extra_paths].each { |dir| $:.unshift dir }
|
171
|
-
|
172
|
-
settings[:requires].each { |file| require file }
|
173
|
-
|
174
|
-
settings[:code].each { |code| eval code }
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
data/test/test_ruby_fork.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
$TESTING = true
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'test/zentest_assertions'
|
5
|
-
require 'ruby_fork'
|
6
|
-
|
7
|
-
class TestRubyFork < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def test_parse_client_args
|
10
|
-
expected = util_make_settings
|
11
|
-
settings = RubyFork.parse_client_args []
|
12
|
-
assert_equal expected, settings
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_parse_client_args_help
|
16
|
-
util_capture do
|
17
|
-
assert_raises SystemExit do
|
18
|
-
RubyFork.parse_client_args ['-h']
|
19
|
-
end
|
20
|
-
|
21
|
-
assert_raises SystemExit do
|
22
|
-
RubyFork.parse_client_args ['--help']
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_parse_client_args_port
|
28
|
-
expected = util_make_settings [], [], [], 5
|
29
|
-
|
30
|
-
settings = RubyFork.parse_client_args ['-p', '5']
|
31
|
-
assert_equal expected, settings
|
32
|
-
|
33
|
-
settings = RubyFork.parse_client_args ['--port', '5']
|
34
|
-
assert_equal expected, settings
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_parse_server_args
|
38
|
-
settings = RubyFork.parse_server_args []
|
39
|
-
expected = util_make_settings nil, nil, nil, nil, false
|
40
|
-
assert_equal expected, settings
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_parse_server_args_daemonize
|
44
|
-
expected = util_make_settings [], [], [], RubyFork::PORT, true
|
45
|
-
|
46
|
-
settings = RubyFork.parse_server_args ['-d']
|
47
|
-
assert_equal expected, settings
|
48
|
-
|
49
|
-
settings = RubyFork.parse_server_args ['--daemonize']
|
50
|
-
assert_equal expected, settings
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_parse_server_args_include
|
54
|
-
expected = util_make_settings nil, nil, ['lib'], nil, false
|
55
|
-
|
56
|
-
settings = RubyFork.parse_server_args ['-I', 'lib']
|
57
|
-
assert_equal expected, settings
|
58
|
-
|
59
|
-
expected = util_make_settings nil, nil, ['lib', 'test'], nil, false
|
60
|
-
|
61
|
-
settings = RubyFork.parse_server_args ['-I', 'lib', '-I', 'test']
|
62
|
-
assert_equal expected, settings
|
63
|
-
|
64
|
-
expected = util_make_settings nil, nil, ['lib:test'], nil, false
|
65
|
-
|
66
|
-
settings = RubyFork.parse_server_args ['-I', 'lib:test']
|
67
|
-
assert_equal expected, settings
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_parse_server_args_help
|
71
|
-
util_capture do
|
72
|
-
assert_raises SystemExit do
|
73
|
-
RubyFork.parse_server_args ['-h']
|
74
|
-
end
|
75
|
-
|
76
|
-
assert_raises SystemExit do
|
77
|
-
RubyFork.parse_server_args ['--help']
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_parse_server_args_port
|
83
|
-
expected = util_make_settings nil, nil, nil, 5, false
|
84
|
-
|
85
|
-
settings = RubyFork.parse_server_args ['-p', '5']
|
86
|
-
assert_equal expected, settings
|
87
|
-
|
88
|
-
settings = RubyFork.parse_server_args ['--port', '5']
|
89
|
-
assert_equal expected, settings
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_parse_server_args_execute
|
93
|
-
expected = util_make_settings [], ['foo'], nil, nil, false
|
94
|
-
|
95
|
-
settings = RubyFork.parse_server_args ['-e', 'foo']
|
96
|
-
assert_equal expected, settings
|
97
|
-
|
98
|
-
expected = util_make_settings [], ['foo', 'bar'], nil, nil, false
|
99
|
-
|
100
|
-
settings = RubyFork.parse_server_args ['-e', 'foo', '-e', 'bar']
|
101
|
-
assert_equal expected, settings
|
102
|
-
end
|
103
|
-
|
104
|
-
def test_parse_server_args_execute_duplicate_test? # FIX
|
105
|
-
expected = util_make_settings ['zentest'], nil, nil, nil, false
|
106
|
-
|
107
|
-
settings = RubyFork.parse_server_args ['-r', 'zentest']
|
108
|
-
assert_equal expected, settings
|
109
|
-
|
110
|
-
expected = util_make_settings ['zentest', 'unit_diff'], nil, nil, nil, false
|
111
|
-
|
112
|
-
settings = RubyFork.parse_server_args ['-r', 'zentest', '-r', 'unit_diff']
|
113
|
-
assert_equal expected, settings
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_setup_environment_extra_paths
|
117
|
-
load_path = $LOAD_PATH.dup
|
118
|
-
|
119
|
-
RubyFork.setup_environment :extra_paths => ['no_such_dir'],
|
120
|
-
:requires => [], :code => []
|
121
|
-
|
122
|
-
assert_equal 'no_such_dir', $LOAD_PATH.first
|
123
|
-
ensure
|
124
|
-
$LOAD_PATH.replace load_path
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_setup_environment_extra_paths_with_colon
|
128
|
-
load_path = $LOAD_PATH.dup
|
129
|
-
|
130
|
-
RubyFork.setup_environment :extra_paths => ['no_such_dir:other_bad_dir'],
|
131
|
-
:requires => [], :code => []
|
132
|
-
|
133
|
-
assert_equal 'other_bad_dir', $LOAD_PATH[0]
|
134
|
-
assert_equal 'no_such_dir', $LOAD_PATH[1]
|
135
|
-
ensure
|
136
|
-
$LOAD_PATH.replace load_path
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_setup_environment_requires
|
140
|
-
assert_raises LoadError do
|
141
|
-
RubyFork.setup_environment :extra_paths => [],
|
142
|
-
:requires => ['no_such_file'], :code => []
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_setup_environment_code
|
147
|
-
RubyFork.setup_environment :extra_paths => [],
|
148
|
-
:requires => [], :code => ['$trf_env_code = 0']
|
149
|
-
|
150
|
-
assert_equal 0, $trf_env_code
|
151
|
-
end
|
152
|
-
|
153
|
-
def util_make_settings(requires = nil, code = nil, extra_paths = nil,
|
154
|
-
port = nil, daemonize = nil)
|
155
|
-
settings = {
|
156
|
-
:requires => [],
|
157
|
-
:code => [],
|
158
|
-
:extra_paths => [],
|
159
|
-
:port => RubyFork::PORT,
|
160
|
-
}
|
161
|
-
|
162
|
-
settings[:code] = code unless code.nil?
|
163
|
-
settings[:daemonize] = daemonize unless daemonize.nil?
|
164
|
-
settings[:extra_paths] = extra_paths unless extra_paths.nil?
|
165
|
-
settings[:port] = port unless port.nil?
|
166
|
-
settings[:requires] = requires unless requires.nil?
|
167
|
-
|
168
|
-
return settings
|
169
|
-
end
|
170
|
-
|
171
|
-
end
|
172
|
-
|