activeldap 1.0.1 → 1.0.2
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/CHANGES +34 -0
- data/README +13 -0
- data/Rakefile +2 -1
- data/TODO +6 -0
- data/benchmark/bench-al.rb +68 -17
- data/examples/al-admin/app/helpers/application_helper.rb +3 -5
- data/examples/al-admin/app/views/layouts/_footer.html.erb +2 -0
- data/examples/al-admin/config/boot.rb +7 -7
- data/examples/al-admin/config/environment.rb +27 -12
- data/examples/al-admin/config/environments/development.rb +0 -1
- data/examples/al-admin/config/environments/production.rb +6 -1
- data/examples/al-admin/config/environments/test.rb +1 -1
- data/examples/al-admin/config/initializers/gettext.rb +15 -1
- data/examples/al-admin/po/en/al-admin.po +1 -1
- data/examples/al-admin/po/ja/al-admin.po +1 -1
- data/examples/al-admin/po/nl/al-admin.po +1 -1
- data/examples/al-admin/public/dispatch.cgi +0 -0
- data/examples/al-admin/public/dispatch.fcgi +0 -0
- data/examples/al-admin/public/dispatch.rb +0 -0
- data/examples/al-admin/public/javascripts/controls.js +73 -73
- data/examples/al-admin/public/javascripts/dragdrop.js +166 -165
- data/examples/al-admin/public/javascripts/effects.js +174 -166
- data/examples/al-admin/public/javascripts/prototype.js +362 -267
- data/examples/al-admin/script/about +0 -0
- data/examples/al-admin/script/console +0 -0
- data/examples/al-admin/script/dbconsole +3 -0
- data/examples/al-admin/script/destroy +0 -0
- data/examples/al-admin/script/generate +0 -0
- data/examples/al-admin/script/performance/benchmarker +0 -0
- data/examples/al-admin/script/performance/profiler +0 -0
- data/examples/al-admin/script/performance/request +0 -0
- data/examples/al-admin/script/plugin +0 -0
- data/examples/al-admin/script/process/inspector +0 -0
- data/examples/al-admin/script/process/reaper +0 -0
- data/examples/al-admin/script/process/spawner +0 -0
- data/examples/al-admin/script/runner +0 -0
- data/examples/al-admin/script/server +0 -0
- data/examples/al-admin/test/run-test.sh +0 -0
- data/examples/groupadd +0 -0
- data/examples/groupdel +0 -0
- data/examples/groupls +0 -0
- data/examples/groupmod +0 -0
- data/examples/lpasswd +0 -0
- data/examples/ouadd +0 -0
- data/examples/useradd +0 -0
- data/examples/useradd-binary +0 -0
- data/examples/userdel +0 -0
- data/examples/userls +0 -0
- data/examples/usermod +0 -0
- data/examples/usermod-binary-add +0 -0
- data/examples/usermod-binary-add-time +0 -0
- data/examples/usermod-binary-del +0 -0
- data/examples/usermod-lang-add +0 -0
- data/lib/active_ldap.rb +10 -4
- data/lib/active_ldap/action_controller/ldap_benchmarking.rb +28 -9
- data/lib/active_ldap/adapter/base.rb +30 -17
- data/lib/active_ldap/adapter/jndi.rb +5 -1
- data/lib/active_ldap/adapter/ldap.rb +5 -1
- data/lib/active_ldap/association/has_many_utils.rb +7 -1
- data/lib/active_ldap/associations.rb +10 -5
- data/lib/active_ldap/attributes.rb +6 -1
- data/lib/active_ldap/base.rb +154 -52
- data/lib/active_ldap/configuration.rb +1 -1
- data/lib/active_ldap/connection.rb +7 -4
- data/lib/active_ldap/get_text.rb +11 -3
- data/lib/active_ldap/ldif.rb +16 -4
- data/lib/active_ldap/operations.rb +13 -5
- data/lib/active_ldap/schema.rb +6 -2
- data/lib/active_ldap/schema/syntaxes.rb +15 -3
- data/lib/active_ldap/user_password.rb +4 -4
- data/lib/active_ldap/validations.rb +32 -44
- data/lib/active_ldap/xml.rb +125 -0
- data/po/en/active-ldap.po +740 -85
- data/po/ja/active-ldap.po +748 -547
- data/rails/README +54 -0
- data/rails/init.rb +33 -0
- data/rails/plugin/active_ldap/generators/README +2 -0
- data/rails/plugin/active_ldap/generators/model_active_ldap/model_active_ldap_generator.rb +1 -1
- data/rails/plugin/active_ldap/init.rb +3 -0
- data/rails_generators/model_active_ldap/USAGE +17 -0
- data/rails_generators/model_active_ldap/model_active_ldap_generator.rb +69 -0
- data/rails_generators/model_active_ldap/templates/model_active_ldap.rb +3 -0
- data/rails_generators/model_active_ldap/templates/unit_test.rb +8 -0
- data/rails_generators/scaffold_active_ldap/scaffold_active_ldap_generator.rb +7 -0
- data/rails_generators/scaffold_active_ldap/templates/ldap.yml +18 -0
- data/rails_generators/scaffold_al/scaffold_al_generator.rb +20 -0
- data/test-unit/History.txt +50 -1
- data/test-unit/Manifest.txt +22 -12
- data/test-unit/README.txt +31 -12
- data/test-unit/Rakefile +14 -1
- data/test-unit/TODO +5 -0
- data/test-unit/bin/testrb +0 -0
- data/test-unit/lib/test/unit.rb +62 -0
- data/test-unit/lib/test/unit/assertions.rb +419 -75
- data/test-unit/lib/test/unit/autorunner.rb +70 -13
- data/test-unit/lib/test/unit/collector.rb +1 -1
- data/test-unit/lib/test/unit/collector/load.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 +17 -2
- data/test-unit/lib/test/unit/runner/console.rb +8 -2
- data/test-unit/lib/test/unit/testcase.rb +188 -2
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +51 -26
- 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/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/run-test.rb +0 -0
- 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_assertions.rb +411 -69
- data/test-unit/test/test_testcase.rb +70 -3
- 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
- data/test/run-test.rb +0 -0
- data/test/test_adapter.rb +3 -0
- data/test/test_associations.rb +50 -7
- data/test/test_base.rb +193 -11
- data/test/test_connection_per_dn.rb +1 -1
- data/test/test_ldif.rb +86 -0
- data/test/test_load.rb +7 -0
- data/test/test_schema.rb +31 -1
- data/test/test_syntax.rb +20 -0
- data/test/test_user_password.rb +22 -14
- data/test/test_validation.rb +70 -29
- metadata +99 -77
- data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
- data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
- data/examples/al-admin/config/initializers/ralative_url_support.rb +0 -1
- data/examples/al-admin/lib/accept_http_rails_relative_url_root.rb +0 -9
- data/test-unit-ext/misc/rd2html.rb +0 -42
- data/test-unit/test/test_fixture.rb +0 -275
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'test/unit'
|
|
2
|
+
require 'test/unit/color-scheme'
|
|
2
3
|
require 'optparse'
|
|
3
4
|
|
|
4
5
|
module Test
|
|
@@ -11,10 +12,24 @@ module Test
|
|
|
11
12
|
class << self
|
|
12
13
|
def register_runner(id, runner_builder=Proc.new)
|
|
13
14
|
RUNNERS[id] = runner_builder
|
|
15
|
+
RUNNERS[id.to_s] = runner_builder
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def runner(id)
|
|
19
|
+
RUNNERS[id.to_s]
|
|
14
20
|
end
|
|
15
21
|
|
|
16
22
|
def register_collector(id, collector_builder=Proc.new)
|
|
17
23
|
COLLECTORS[id] = collector_builder
|
|
24
|
+
COLLECTORS[id.to_s] = collector_builder
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def collector(id)
|
|
28
|
+
COLLECTORS[id.to_s]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def register_color_scheme(id, scheme)
|
|
32
|
+
ColorScheme[id] = scheme
|
|
18
33
|
end
|
|
19
34
|
|
|
20
35
|
def setup_option(option_builder=Proc.new)
|
|
@@ -76,6 +91,7 @@ module Test
|
|
|
76
91
|
|
|
77
92
|
attr_reader :suite, :runner_options
|
|
78
93
|
attr_accessor :filters, :to_run, :pattern, :exclude, :base, :workdir
|
|
94
|
+
attr_accessor :color_scheme
|
|
79
95
|
attr_writer :runner, :collector
|
|
80
96
|
|
|
81
97
|
def initialize(standalone)
|
|
@@ -85,8 +101,11 @@ module Test
|
|
|
85
101
|
@collector = default_collector
|
|
86
102
|
@filters = []
|
|
87
103
|
@to_run = []
|
|
104
|
+
@color_scheme = ColorScheme.default
|
|
88
105
|
@runner_options = {}
|
|
89
106
|
@workdir = nil
|
|
107
|
+
default_config_file = "test-unit.yml"
|
|
108
|
+
load_config(default_config_file) if File.exist?(default_config_file)
|
|
90
109
|
yield(self) if block_given?
|
|
91
110
|
end
|
|
92
111
|
|
|
@@ -96,8 +115,7 @@ module Test
|
|
|
96
115
|
rescue OptionParser::ParseError => e
|
|
97
116
|
puts e
|
|
98
117
|
puts options
|
|
99
|
-
|
|
100
|
-
abort
|
|
118
|
+
exit(false)
|
|
101
119
|
else
|
|
102
120
|
@filters << proc{false} unless(@filters.empty?)
|
|
103
121
|
end
|
|
@@ -116,7 +134,7 @@ module Test
|
|
|
116
134
|
@runner = r
|
|
117
135
|
end
|
|
118
136
|
|
|
119
|
-
if(@standalone)
|
|
137
|
+
if (@standalone)
|
|
120
138
|
o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
|
|
121
139
|
@base = b
|
|
122
140
|
end
|
|
@@ -169,13 +187,19 @@ module Test
|
|
|
169
187
|
end
|
|
170
188
|
|
|
171
189
|
priority_filter = Proc.new do |test|
|
|
172
|
-
|
|
190
|
+
if @filters.size > 2
|
|
191
|
+
nil
|
|
192
|
+
else
|
|
193
|
+
Priority::Checker.new(test).need_to_run? or nil
|
|
194
|
+
end
|
|
173
195
|
end
|
|
174
196
|
o.on("--[no-]priority-mode",
|
|
175
197
|
"Runs some tests based on their priority.") do |priority_mode|
|
|
176
198
|
if priority_mode
|
|
199
|
+
Priority.enable
|
|
177
200
|
@filters |= [priority_filter]
|
|
178
201
|
else
|
|
202
|
+
Priority.disable
|
|
179
203
|
@filters -= [priority_filter]
|
|
180
204
|
end
|
|
181
205
|
end
|
|
@@ -185,6 +209,18 @@ module Test
|
|
|
185
209
|
$LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
|
|
186
210
|
end
|
|
187
211
|
|
|
212
|
+
color_schemes = ColorScheme.all
|
|
213
|
+
o.on("--color-scheme=SCHEME", color_schemes,
|
|
214
|
+
"Use SCHEME as color scheme.",
|
|
215
|
+
"(#{keyword_display(color_schemes)})") do |scheme|
|
|
216
|
+
@color_scheme = scheme
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
o.on("--config=FILE",
|
|
220
|
+
"Use YAML fomat FILE content as configuration file.") do |file|
|
|
221
|
+
load_config(file)
|
|
222
|
+
end
|
|
223
|
+
|
|
188
224
|
ADDITIONAL_OPTIONS.each do |option_builder|
|
|
189
225
|
option_builder.call(self, o)
|
|
190
226
|
end
|
|
@@ -201,13 +237,13 @@ module Test
|
|
|
201
237
|
|
|
202
238
|
o.on_tail('--console', 'Console runner (use --runner).') do
|
|
203
239
|
warn("Deprecated option (--console).")
|
|
204
|
-
@runner =
|
|
240
|
+
@runner = self.class.runner(:console)
|
|
205
241
|
end
|
|
206
242
|
|
|
207
243
|
if RUNNERS[:fox]
|
|
208
244
|
o.on_tail('--fox', 'Fox runner (use --runner).') do
|
|
209
245
|
warn("Deprecated option (--fox).")
|
|
210
|
-
@runner =
|
|
246
|
+
@runner = self.class.runner(:fox)
|
|
211
247
|
end
|
|
212
248
|
end
|
|
213
249
|
|
|
@@ -215,10 +251,12 @@ module Test
|
|
|
215
251
|
end
|
|
216
252
|
end
|
|
217
253
|
|
|
218
|
-
def keyword_display(
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
254
|
+
def keyword_display(keywords)
|
|
255
|
+
keywords.collect do |keyword, _|
|
|
256
|
+
keyword.to_s
|
|
257
|
+
end.uniq.sort.collect do |keyword|
|
|
258
|
+
keyword.sub(/^(.)([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
|
|
259
|
+
end.join(", ")
|
|
222
260
|
end
|
|
223
261
|
|
|
224
262
|
def run
|
|
@@ -226,21 +264,40 @@ module Test
|
|
|
226
264
|
return false if suite.nil?
|
|
227
265
|
runner = @runner[self]
|
|
228
266
|
return false if runner.nil?
|
|
267
|
+
@runner_options[:color_scheme] ||= @color_scheme
|
|
229
268
|
Dir.chdir(@workdir) if @workdir
|
|
230
269
|
runner.run(suite, @runner_options).passed?
|
|
231
270
|
end
|
|
232
271
|
|
|
272
|
+
def load_config(file)
|
|
273
|
+
require 'yaml'
|
|
274
|
+
config = YAML.load(File.read(file))
|
|
275
|
+
runner_name = config["runner"]
|
|
276
|
+
@runner = self.class.runner(runner_name) || @runner
|
|
277
|
+
@collector = self.class.collector(config["collector"]) || @collector
|
|
278
|
+
(config["color_schemes"] || {}).each do |name, options|
|
|
279
|
+
ColorScheme[name] = options
|
|
280
|
+
end
|
|
281
|
+
runner_options = {}
|
|
282
|
+
(config["#{runner_name}_options"] || {}).each do |key, value|
|
|
283
|
+
key = key.to_sym
|
|
284
|
+
value = ColorScheme[value] if key == :color_scheme
|
|
285
|
+
runner_options[key.to_sym] = value
|
|
286
|
+
end
|
|
287
|
+
@runner_options = @runner_options.merge(runner_options)
|
|
288
|
+
end
|
|
289
|
+
|
|
233
290
|
private
|
|
234
291
|
def default_runner
|
|
235
292
|
if ENV["EMACS"] == "t"
|
|
236
|
-
|
|
293
|
+
self.class.runner(:emacs)
|
|
237
294
|
else
|
|
238
|
-
|
|
295
|
+
self.class.runner(:console)
|
|
239
296
|
end
|
|
240
297
|
end
|
|
241
298
|
|
|
242
299
|
def default_collector
|
|
243
|
-
|
|
300
|
+
self.class.collector(@standalone ? :load : :descendant)
|
|
244
301
|
end
|
|
245
302
|
end
|
|
246
303
|
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)
|