activesambaldap 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS.en +20 -18
- data/NEWS.ja +23 -21
- data/README.en +122 -95
- data/README.ja +125 -98
- data/Rakefile +29 -64
- data/bin/asl-groupadd +1 -1
- data/bin/asl-groupadd.help +1 -0
- data/bin/asl-groupdel +1 -1
- data/bin/asl-groupdel.help +1 -0
- data/bin/asl-groupmod +1 -1
- data/bin/asl-groupmod.help +1 -0
- data/bin/asl-groupshow +1 -1
- data/bin/asl-groupshow.help +1 -0
- data/bin/asl-passwd +1 -1
- data/bin/asl-passwd.help +1 -0
- data/bin/asl-populate +2 -2
- data/bin/asl-populate.help +1 -0
- data/bin/asl-purge +1 -1
- data/bin/asl-purge.help +1 -0
- data/bin/asl-samba-computeradd +1 -1
- data/bin/asl-samba-computeradd.help +1 -0
- data/bin/asl-samba-groupadd +1 -1
- data/bin/asl-samba-groupadd.help +1 -0
- data/bin/asl-samba-groupdel +1 -1
- data/bin/asl-samba-groupdel.help +1 -0
- data/bin/asl-samba-groupmod +1 -1
- data/bin/asl-samba-groupmod.help +1 -0
- data/bin/asl-samba-useradd +1 -1
- data/bin/asl-samba-useradd.help +1 -0
- data/bin/asl-samba-userdel +1 -1
- data/bin/asl-samba-userdel.help +1 -0
- data/bin/asl-samba-usermod +1 -1
- data/bin/asl-samba-usermod.help +1 -0
- data/bin/asl-useradd +1 -1
- data/bin/asl-useradd.help +6 -4
- data/bin/asl-userdel +1 -1
- data/bin/asl-userdel.help +1 -0
- data/bin/asl-usermod +1 -1
- data/bin/asl-usermod.help +2 -0
- data/bin/asl-usershow +1 -1
- data/bin/asl-usershow.help +1 -0
- data/data/locale/ja/LC_MESSAGES/active-samba-ldap.mo +0 -0
- data/lib/active_samba_ldap/version.rb +1 -1
- data/lib/active_samba_ldap.rb +1 -1
- data/po/ja/active-samba-ldap.po +5 -5
- data/rails/{plugin/active_samba_ldap/README → README} +0 -0
- data/rails/{plugin/active_samba_ldap/init.rb → init.rb} +1 -1
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/scaffold_active_samba_ldap_generator.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/computer.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/dc.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/group.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/idmap.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/ldap.yml +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/ou.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_controller.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_helper.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_index.rhtml +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_populate.rhtml +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/samba_purge.rhtml +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/unix_id_pool.rb +0 -0
- data/{rails/plugin/active_samba_ldap/generators → rails_generators}/scaffold_active_samba_ldap/templates/user.rb +0 -0
- data/test/asl-test-utils.rb +2 -2
- data/test/test_asl_usershow.rb +2 -2
- data/test/test_password.rb +2 -2
- data/test/test_user_home_directory.rb +2 -2
- data/test-unit/History.txt +76 -1
- data/test-unit/README.txt +32 -12
- data/test-unit/Rakefile +19 -1
- data/test-unit/TODO +5 -0
- data/test-unit/lib/test/unit/assertions.rb +515 -88
- data/test-unit/lib/test/unit/autorunner.rb +93 -14
- data/test-unit/lib/test/unit/collector/load.rb +1 -1
- data/test-unit/lib/test/unit/collector.rb +1 -1
- data/test-unit/lib/test/unit/color-scheme.rb +86 -0
- data/test-unit/lib/test/unit/color.rb +40 -5
- data/test-unit/lib/test/unit/diff.rb +14 -0
- data/test-unit/lib/test/unit/fixture.rb +7 -16
- data/test-unit/lib/test/unit/notification.rb +9 -0
- data/test-unit/lib/test/unit/omission.rb +14 -0
- data/test-unit/lib/test/unit/pending.rb +16 -0
- data/test-unit/lib/test/unit/priority.rb +38 -3
- data/test-unit/lib/test/unit/runner/console.rb +8 -2
- data/test-unit/lib/test/unit/testcase.rb +263 -12
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +58 -30
- data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/test-unit/lib/test/unit/version.rb +1 -1
- data/test-unit/lib/test/unit.rb +62 -0
- data/test-unit/sample/test_user.rb +22 -0
- data/test-unit/test/collector/{test_descendant.rb → test-descendant.rb} +0 -0
- data/test-unit/test/collector/{test_load.rb → test-load.rb} +1 -1
- data/test-unit/test/{test_attribute.rb → test-attribute.rb} +0 -0
- data/test-unit/test/test-color-scheme.rb +56 -0
- data/test-unit/test/{test_color.rb → test-color.rb} +10 -0
- data/test-unit/test/{test_diff.rb → test-diff.rb} +0 -0
- data/test-unit/test/{test_emacs_runner.rb → test-emacs-runner.rb} +0 -0
- data/test-unit/test/test-fixture.rb +287 -0
- data/test-unit/test/{test_notification.rb → test-notification.rb} +4 -4
- data/test-unit/test/{test_omission.rb → test-omission.rb} +6 -6
- data/test-unit/test/{test_pending.rb → test-pending.rb} +12 -6
- data/test-unit/test/{test_priority.rb → test-priority.rb} +30 -0
- data/test-unit/test/{test_testcase.rb → test-testcase.rb} +100 -4
- data/test-unit/test/test_assertions.rb +462 -73
- data/test-unit/test/{testunit_test_util.rb → testunit-test-util.rb} +4 -2
- data/test-unit/test/ui/test_testrunmediator.rb +1 -1
- data/test-unit/test/util/test-method-owner-finder.rb +38 -0
- metadata +69 -79
- data/test-unit/test/test_fixture.rb +0 -275
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'test/unit'
|
1
|
+
require 'test/unit/color-scheme'
|
2
2
|
require 'optparse'
|
3
3
|
|
4
4
|
module Test
|
@@ -11,10 +11,24 @@ module Test
|
|
11
11
|
class << self
|
12
12
|
def register_runner(id, runner_builder=Proc.new)
|
13
13
|
RUNNERS[id] = runner_builder
|
14
|
+
RUNNERS[id.to_s] = runner_builder
|
15
|
+
end
|
16
|
+
|
17
|
+
def runner(id)
|
18
|
+
RUNNERS[id.to_s]
|
14
19
|
end
|
15
20
|
|
16
21
|
def register_collector(id, collector_builder=Proc.new)
|
17
22
|
COLLECTORS[id] = collector_builder
|
23
|
+
COLLECTORS[id.to_s] = collector_builder
|
24
|
+
end
|
25
|
+
|
26
|
+
def collector(id)
|
27
|
+
COLLECTORS[id.to_s]
|
28
|
+
end
|
29
|
+
|
30
|
+
def register_color_scheme(id, scheme)
|
31
|
+
ColorScheme[id] = scheme
|
18
32
|
end
|
19
33
|
|
20
34
|
def setup_option(option_builder=Proc.new)
|
@@ -76,6 +90,7 @@ module Test
|
|
76
90
|
|
77
91
|
attr_reader :suite, :runner_options
|
78
92
|
attr_accessor :filters, :to_run, :pattern, :exclude, :base, :workdir
|
93
|
+
attr_accessor :color_scheme
|
79
94
|
attr_writer :runner, :collector
|
80
95
|
|
81
96
|
def initialize(standalone)
|
@@ -85,8 +100,11 @@ module Test
|
|
85
100
|
@collector = default_collector
|
86
101
|
@filters = []
|
87
102
|
@to_run = []
|
103
|
+
@color_scheme = ColorScheme.default
|
88
104
|
@runner_options = {}
|
89
105
|
@workdir = nil
|
106
|
+
default_config_file = "test-unit.yml"
|
107
|
+
load_config(default_config_file) if File.exist?(default_config_file)
|
90
108
|
yield(self) if block_given?
|
91
109
|
end
|
92
110
|
|
@@ -96,8 +114,7 @@ module Test
|
|
96
114
|
rescue OptionParser::ParseError => e
|
97
115
|
puts e
|
98
116
|
puts options
|
99
|
-
|
100
|
-
abort
|
117
|
+
exit(false)
|
101
118
|
else
|
102
119
|
@filters << proc{false} unless(@filters.empty?)
|
103
120
|
end
|
@@ -116,7 +133,7 @@ module Test
|
|
116
133
|
@runner = r
|
117
134
|
end
|
118
135
|
|
119
|
-
if(@standalone)
|
136
|
+
if (@standalone)
|
120
137
|
o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
|
121
138
|
@base = b
|
122
139
|
end
|
@@ -169,22 +186,53 @@ module Test
|
|
169
186
|
end
|
170
187
|
|
171
188
|
priority_filter = Proc.new do |test|
|
172
|
-
|
189
|
+
if @filters.size > 2
|
190
|
+
nil
|
191
|
+
else
|
192
|
+
Priority::Checker.new(test).need_to_run? or nil
|
193
|
+
end
|
173
194
|
end
|
174
195
|
o.on("--[no-]priority-mode",
|
175
196
|
"Runs some tests based on their priority.") do |priority_mode|
|
176
197
|
if priority_mode
|
198
|
+
Priority.enable
|
177
199
|
@filters |= [priority_filter]
|
178
200
|
else
|
201
|
+
Priority.disable
|
179
202
|
@filters -= [priority_filter]
|
180
203
|
end
|
181
204
|
end
|
182
205
|
|
206
|
+
o.on("--default-priority=PRIORITY",
|
207
|
+
Priority.available_values,
|
208
|
+
"Uses PRIORITY as default priority",
|
209
|
+
"(#{keyword_display(Priority.available_values)})") do |priority|
|
210
|
+
Priority.default = priority
|
211
|
+
end
|
212
|
+
|
183
213
|
o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
|
184
214
|
"Appends directory list to $LOAD_PATH.") do |dirs|
|
185
215
|
$LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
|
186
216
|
end
|
187
217
|
|
218
|
+
color_schemes = ColorScheme.all
|
219
|
+
o.on("--color-scheme=SCHEME", color_schemes,
|
220
|
+
"Use SCHEME as color scheme.",
|
221
|
+
"(#{keyword_display(color_schemes)})") do |scheme|
|
222
|
+
@color_scheme = scheme
|
223
|
+
end
|
224
|
+
|
225
|
+
o.on("--config=FILE",
|
226
|
+
"Use YAML fomat FILE content as configuration file.") do |file|
|
227
|
+
load_config(file)
|
228
|
+
end
|
229
|
+
|
230
|
+
o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
|
231
|
+
"Run tests in a test case in ORDER order.",
|
232
|
+
"(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
|
233
|
+
TestCase.test_order = order
|
234
|
+
end
|
235
|
+
|
188
236
|
ADDITIONAL_OPTIONS.each do |option_builder|
|
189
237
|
option_builder.call(self, o)
|
190
238
|
end
|
@@ -201,13 +249,13 @@ module Test
|
|
201
249
|
|
202
250
|
o.on_tail('--console', 'Console runner (use --runner).') do
|
203
251
|
warn("Deprecated option (--console).")
|
204
|
-
@runner =
|
252
|
+
@runner = self.class.runner(:console)
|
205
253
|
end
|
206
254
|
|
207
255
|
if RUNNERS[:fox]
|
208
256
|
o.on_tail('--fox', 'Fox runner (use --runner).') do
|
209
257
|
warn("Deprecated option (--fox).")
|
210
|
-
@runner =
|
258
|
+
@runner = self.class.runner(:fox)
|
211
259
|
end
|
212
260
|
end
|
213
261
|
|
@@ -215,10 +263,22 @@ module Test
|
|
215
263
|
end
|
216
264
|
end
|
217
265
|
|
218
|
-
def keyword_display(
|
219
|
-
|
220
|
-
|
221
|
-
|
266
|
+
def keyword_display(keywords)
|
267
|
+
keywords = keywords.collect do |keyword, _|
|
268
|
+
keyword.to_s
|
269
|
+
end.uniq.sort
|
270
|
+
|
271
|
+
i = 0
|
272
|
+
keywords.collect do |keyword|
|
273
|
+
if (i > 0 and keyword[0] == keywords[i - 1][0]) or
|
274
|
+
((i < keywords.size - 1) and (keyword[0] == keywords[i + 1][0]))
|
275
|
+
n = 2
|
276
|
+
else
|
277
|
+
n = 1
|
278
|
+
end
|
279
|
+
i += 1
|
280
|
+
keyword.sub(/^(.{#{n}})([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
|
281
|
+
end.join(", ")
|
222
282
|
end
|
223
283
|
|
224
284
|
def run
|
@@ -226,21 +286,40 @@ module Test
|
|
226
286
|
return false if suite.nil?
|
227
287
|
runner = @runner[self]
|
228
288
|
return false if runner.nil?
|
289
|
+
@runner_options[:color_scheme] ||= @color_scheme
|
229
290
|
Dir.chdir(@workdir) if @workdir
|
230
291
|
runner.run(suite, @runner_options).passed?
|
231
292
|
end
|
232
293
|
|
294
|
+
def load_config(file)
|
295
|
+
require 'yaml'
|
296
|
+
config = YAML.load(File.read(file))
|
297
|
+
runner_name = config["runner"]
|
298
|
+
@runner = self.class.runner(runner_name) || @runner
|
299
|
+
@collector = self.class.collector(config["collector"]) || @collector
|
300
|
+
(config["color_schemes"] || {}).each do |name, options|
|
301
|
+
ColorScheme[name] = options
|
302
|
+
end
|
303
|
+
runner_options = {}
|
304
|
+
(config["#{runner_name}_options"] || {}).each do |key, value|
|
305
|
+
key = key.to_sym
|
306
|
+
value = ColorScheme[value] if key == :color_scheme
|
307
|
+
runner_options[key.to_sym] = value
|
308
|
+
end
|
309
|
+
@runner_options = @runner_options.merge(runner_options)
|
310
|
+
end
|
311
|
+
|
233
312
|
private
|
234
313
|
def default_runner
|
235
314
|
if ENV["EMACS"] == "t"
|
236
|
-
|
315
|
+
self.class.runner(:emacs)
|
237
316
|
else
|
238
|
-
|
317
|
+
self.class.runner(:console)
|
239
318
|
end
|
240
319
|
end
|
241
320
|
|
242
321
|
def default_collector
|
243
|
-
|
322
|
+
self.class.collector(@standalone ? :load : :descendant)
|
244
323
|
end
|
245
324
|
end
|
246
325
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'test/unit/color'
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
class ColorScheme
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
class << self
|
9
|
+
@@default = nil
|
10
|
+
def default
|
11
|
+
@@default ||= new("success" => Color.new("green", :bold => true),
|
12
|
+
"failure" => Color.new("red", :bold => true),
|
13
|
+
"pending" => Color.new("magenta", :bold => true),
|
14
|
+
"omission" => Color.new("blue", :bold => true),
|
15
|
+
"notification" => Color.new("cyan", :bold => true),
|
16
|
+
"error" => Color.new("yellow", :bold => true) +
|
17
|
+
Color.new("black", :foreground => false))
|
18
|
+
end
|
19
|
+
|
20
|
+
@@schemes = {}
|
21
|
+
def all
|
22
|
+
@@schemes.merge("default" => default)
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](id)
|
26
|
+
@@schemes[id.to_s]
|
27
|
+
end
|
28
|
+
|
29
|
+
def []=(id, scheme_or_spec)
|
30
|
+
if scheme_or_spec.is_a?(self)
|
31
|
+
scheme = scheme_or_spec
|
32
|
+
else
|
33
|
+
scheme = new(scheme_or_spec)
|
34
|
+
end
|
35
|
+
@@schemes[id.to_s] = scheme
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize(scheme_spec)
|
40
|
+
@scheme = {}
|
41
|
+
scheme_spec.each do |key, color_spec|
|
42
|
+
self[key] = color_spec
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def [](name)
|
47
|
+
@scheme[name.to_s]
|
48
|
+
end
|
49
|
+
|
50
|
+
def []=(name, color_spec)
|
51
|
+
@scheme[name.to_s] = make_color(color_spec)
|
52
|
+
end
|
53
|
+
|
54
|
+
def each(&block)
|
55
|
+
@scheme.each(&block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_hash
|
59
|
+
hash = {}
|
60
|
+
@scheme.each do |key, color|
|
61
|
+
hash[key] = color
|
62
|
+
end
|
63
|
+
hash
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def make_color(color_spec)
|
68
|
+
if color_spec.is_a?(Color) or color_spec.is_a?(MixColor)
|
69
|
+
color_spec
|
70
|
+
else
|
71
|
+
color_name = nil
|
72
|
+
normalized_color_spec = {}
|
73
|
+
color_spec.each do |key, value|
|
74
|
+
key = key.to_sym
|
75
|
+
if key == :name
|
76
|
+
color_name = value
|
77
|
+
else
|
78
|
+
normalized_color_spec[key] = value
|
79
|
+
end
|
80
|
+
end
|
81
|
+
Color.new(color_name, normalized_color_spec)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -3,6 +3,8 @@ module Test
|
|
3
3
|
class Color
|
4
4
|
NAMES = ["black", "red", "green", "yellow",
|
5
5
|
"blue", "magenta", "cyan", "white"]
|
6
|
+
|
7
|
+
attr_reader :name
|
6
8
|
def initialize(name, options={})
|
7
9
|
@name = name
|
8
10
|
@foreground = options[:foreground]
|
@@ -13,19 +15,47 @@ module Test
|
|
13
15
|
@underline = options[:underline]
|
14
16
|
end
|
15
17
|
|
18
|
+
def foreground?
|
19
|
+
@foreground
|
20
|
+
end
|
21
|
+
|
22
|
+
def intensity?
|
23
|
+
@intensity
|
24
|
+
end
|
25
|
+
|
26
|
+
def bold?
|
27
|
+
@bold
|
28
|
+
end
|
29
|
+
|
30
|
+
def italic?
|
31
|
+
@italic
|
32
|
+
end
|
33
|
+
|
34
|
+
def underline?
|
35
|
+
@underline
|
36
|
+
end
|
37
|
+
|
38
|
+
def ==(other)
|
39
|
+
self.class === other and
|
40
|
+
[name, foreground?, intensity?,
|
41
|
+
bold?, italic?, underline?] ==
|
42
|
+
[other.name, other.foreground?, other.intensity?,
|
43
|
+
other.bold?, other.italic?, other.underline?]
|
44
|
+
end
|
45
|
+
|
16
46
|
def sequence
|
17
47
|
sequence = []
|
18
48
|
if @name == "none"
|
19
49
|
elsif @name == "reset"
|
20
50
|
sequence << "0"
|
21
51
|
else
|
22
|
-
foreground_parameter =
|
23
|
-
foreground_parameter += 6 if
|
52
|
+
foreground_parameter = foreground? ? 3 : 4
|
53
|
+
foreground_parameter += 6 if intensity?
|
24
54
|
sequence << "#{foreground_parameter}#{NAMES.index(@name)}"
|
25
55
|
end
|
26
|
-
sequence << "1" if
|
27
|
-
sequence << "3" if
|
28
|
-
sequence << "4" if
|
56
|
+
sequence << "1" if bold?
|
57
|
+
sequence << "3" if italic?
|
58
|
+
sequence << "4" if underline?
|
29
59
|
sequence
|
30
60
|
end
|
31
61
|
|
@@ -39,6 +69,7 @@ module Test
|
|
39
69
|
end
|
40
70
|
|
41
71
|
class MixColor
|
72
|
+
attr_reader :colors
|
42
73
|
def initialize(colors)
|
43
74
|
@colors = colors
|
44
75
|
end
|
@@ -56,6 +87,10 @@ module Test
|
|
56
87
|
def +(other)
|
57
88
|
self.class.new([self, other])
|
58
89
|
end
|
90
|
+
|
91
|
+
def ==(other)
|
92
|
+
self.class === other and colors == other.colors
|
93
|
+
end
|
59
94
|
end
|
60
95
|
end
|
61
96
|
end
|
@@ -507,6 +507,20 @@ module Test
|
|
507
507
|
end
|
508
508
|
|
509
509
|
module_function
|
510
|
+
def need_fold?(diff)
|
511
|
+
/^[-+].{79}/ =~ diff
|
512
|
+
end
|
513
|
+
|
514
|
+
def fold(string)
|
515
|
+
string.split(/\r?\n/).collect do |line|
|
516
|
+
line.gsub(/(.{78})/, "\\1\n")
|
517
|
+
end.join("\n")
|
518
|
+
end
|
519
|
+
|
520
|
+
def folded_readable(from, to, options={})
|
521
|
+
readable(fold(from), fold(to), options)
|
522
|
+
end
|
523
|
+
|
510
524
|
def readable(from, to, options={})
|
511
525
|
diff(ReadableDiffer, from, to, options)
|
512
526
|
end
|
@@ -90,17 +90,14 @@ module Test
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def add_fixture_method_name(how, variable_name, method_name)
|
93
|
-
|
94
|
-
self.instance_variable_set(variable_name, [])
|
95
|
-
end
|
96
|
-
methods = self.instance_variable_get(variable_name)
|
93
|
+
methods = instance_eval("#{variable_name} ||= []")
|
97
94
|
|
98
95
|
if how == :prepend
|
99
96
|
methods = [method_name] | methods
|
100
97
|
else
|
101
98
|
methods = methods | [method_name]
|
102
99
|
end
|
103
|
-
|
100
|
+
instance_variable_set(variable_name, methods)
|
104
101
|
end
|
105
102
|
|
106
103
|
def registered_methods_variable_name(fixture, order)
|
@@ -144,19 +141,13 @@ module Test
|
|
144
141
|
interested_ancestors.inject([]) do |result, ancestor|
|
145
142
|
if ancestor.is_a?(Class)
|
146
143
|
ancestor.class_eval do
|
147
|
-
methods = []
|
148
|
-
unregistered_methods =
|
149
|
-
|
150
|
-
|
151
|
-
end
|
152
|
-
if instance_variable_defined?(unregistered_methods_variable)
|
153
|
-
unregistered_methods =
|
154
|
-
instance_variable_get(unregistered_methods_variable)
|
155
|
-
end
|
156
|
-
result + methods - unregistered_methods
|
144
|
+
methods = instance_eval("#{methods_variable} ||= []")
|
145
|
+
unregistered_methods =
|
146
|
+
instance_eval("#{unregistered_methods_variable} ||= []")
|
147
|
+
(result | methods) - unregistered_methods
|
157
148
|
end
|
158
149
|
else
|
159
|
-
|
150
|
+
result
|
160
151
|
end
|
161
152
|
end
|
162
153
|
end
|
@@ -56,6 +56,15 @@ module Test
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
# Notify some information.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# def test_notification
|
63
|
+
# notify("I'm here!")
|
64
|
+
# # Reached here
|
65
|
+
# notify("Special!") if special_case?
|
66
|
+
# # Reached here too
|
67
|
+
# end
|
59
68
|
def notify(message, &block)
|
60
69
|
notification = Notification.new(name, filter_backtrace(caller), message)
|
61
70
|
add_notification(notification)
|
@@ -56,6 +56,20 @@ module Test
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
# Omit the test of part of the test.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# def test_omission
|
63
|
+
# omit
|
64
|
+
# # Not reached here
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# def test_omission_with_here
|
68
|
+
# omit do
|
69
|
+
# # Not ran here
|
70
|
+
# end
|
71
|
+
# # Reached here
|
72
|
+
# end
|
59
73
|
def omit(message=nil, &block)
|
60
74
|
message ||= "omitted."
|
61
75
|
if block_given?
|
@@ -56,6 +56,22 @@ module Test
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
# Marks the test or part of the test is pending.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
# def test_pending
|
63
|
+
# pend
|
64
|
+
# # Not reached here
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# def test_pending_with_here
|
68
|
+
# pend do
|
69
|
+
# # Ran here
|
70
|
+
# # Fails if the block doesn't raise any error.
|
71
|
+
# # Because it means the block is passed unexpectedly.
|
72
|
+
# end
|
73
|
+
# # Reached here
|
74
|
+
# end
|
59
75
|
def pend(message=nil, &block)
|
60
76
|
message ||= "pended."
|
61
77
|
if block_given?
|
@@ -13,6 +13,32 @@ module Test
|
|
13
13
|
teardown :priority_teardown, :after => :append
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
@@enabled = false
|
18
|
+
def enabled?
|
19
|
+
@@enabled
|
20
|
+
end
|
21
|
+
|
22
|
+
def enable
|
23
|
+
@@enabled = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def disable
|
27
|
+
@@enabled = false
|
28
|
+
end
|
29
|
+
|
30
|
+
@@default = :normal
|
31
|
+
def default
|
32
|
+
@@default || :normal
|
33
|
+
end
|
34
|
+
|
35
|
+
def default=(default)
|
36
|
+
@@default = default
|
37
|
+
end
|
38
|
+
|
39
|
+
def available_values
|
40
|
+
Checker.available_priorities
|
41
|
+
end
|
16
42
|
end
|
17
43
|
|
18
44
|
class Checker
|
@@ -23,7 +49,7 @@ module Test
|
|
23
49
|
end
|
24
50
|
|
25
51
|
def need_to_run?(test)
|
26
|
-
priority = test[:priority] ||
|
52
|
+
priority = test[:priority] || Priority.default
|
27
53
|
if have_priority?(priority)
|
28
54
|
send(priority_check_method_name(priority), test)
|
29
55
|
else
|
@@ -31,6 +57,13 @@ module Test
|
|
31
57
|
end
|
32
58
|
end
|
33
59
|
|
60
|
+
def available_priorities
|
61
|
+
methods(false).collect do |name|
|
62
|
+
/\Arun_priority_(.+)\?\z/ =~ name.to_s
|
63
|
+
$1
|
64
|
+
end.compact
|
65
|
+
end
|
66
|
+
|
34
67
|
def run_priority_must?(test)
|
35
68
|
true
|
36
69
|
end
|
@@ -90,7 +123,7 @@ module Test
|
|
90
123
|
def result_dir
|
91
124
|
components = [".test-result",
|
92
125
|
@test.class.name || "AnonymousTestCase",
|
93
|
-
|
126
|
+
escaped_method_name]
|
94
127
|
parent_directories = [File.dirname($0), Dir.pwd]
|
95
128
|
if Process.respond_to?(:uid)
|
96
129
|
parent_directories << File.join(Dir.tmpdir, Process.uid.to_s)
|
@@ -112,7 +145,7 @@ module Test
|
|
112
145
|
end
|
113
146
|
|
114
147
|
def escaped_method_name
|
115
|
-
@method_name.to_s.gsub(/[!?=]$/) do |matched|
|
148
|
+
@test.method_name.to_s.gsub(/[!?=]$/) do |matched|
|
116
149
|
case matched
|
117
150
|
when "!"
|
118
151
|
".destructive"
|
@@ -135,10 +168,12 @@ module Test
|
|
135
168
|
end
|
136
169
|
|
137
170
|
def priority_setup
|
171
|
+
return unless Priority.enabled?
|
138
172
|
Checker.new(self).setup
|
139
173
|
end
|
140
174
|
|
141
175
|
def priority_teardown
|
176
|
+
return unless Priority.enabled?
|
142
177
|
Checker.new(self).teardown
|
143
178
|
end
|
144
179
|
end
|
@@ -31,8 +31,8 @@ module Test
|
|
31
31
|
["true", true],
|
32
32
|
]
|
33
33
|
opts.on("--[no-]use-color=[auto]", use_color_options,
|
34
|
-
"
|
35
|
-
"(default is auto") do |use_color|
|
34
|
+
"Uses color output",
|
35
|
+
"(default is auto)") do |use_color|
|
36
36
|
case use_color
|
37
37
|
when nil
|
38
38
|
use_color = true
|
@@ -41,6 +41,12 @@ module Test
|
|
41
41
|
end
|
42
42
|
auto_runner.runner_options[:use_color] = use_color
|
43
43
|
end
|
44
|
+
|
45
|
+
opts.on("--progress-row-max=MAX", Integer,
|
46
|
+
"Uses MAX as max terminal width for progress mark",
|
47
|
+
"(default is auto)") do |max|
|
48
|
+
auto_runner.runner_options[:progress_row_max] = max
|
49
|
+
end
|
44
50
|
end
|
45
51
|
end
|
46
52
|
end
|