activeldap 0.10.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -30
- data/README +4 -2
- data/Rakefile +7 -0
- 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/po/en/al-admin.po +3 -3
- data/examples/al-admin/po/ja/al-admin.po +3 -3
- data/examples/al-admin/po/nl/al-admin.po +3 -3
- data/lib/active_ldap/adapter/base.rb +0 -2
- data/lib/active_ldap/base.rb +4 -2
- data/lib/active_ldap/get_text_support.rb +3 -11
- data/lib/active_ldap/operations.rb +1 -0
- data/lib/active_ldap/schema/syntaxes.rb +5 -3
- data/lib/active_ldap/validations.rb +25 -15
- data/lib/active_ldap.rb +1 -1
- data/po/en/active-ldap.po +1 -1
- data/po/ja/active-ldap.po +1 -1
- data/rails/plugin/active_ldap/init.rb +1 -1
- data/test/run-test.rb +2 -0
- data/test/test_base.rb +63 -1
- data/test/test_syntax.rb +3 -2
- data/test-unit-ext/NEWS.en +28 -0
- data/test-unit-ext/NEWS.ja +28 -0
- data/test-unit-ext/README.en +247 -0
- data/test-unit-ext/README.ja +246 -0
- data/test-unit-ext/Rakefile +111 -0
- data/{test → test-unit-ext/lib}/test-unit-ext/always-show-result.rb +0 -0
- data/test-unit-ext/lib/test-unit-ext/assertions.rb +40 -0
- data/test-unit-ext/lib/test-unit-ext/attributes.rb +129 -0
- data/{test → test-unit-ext/lib}/test-unit-ext/backtrace-filter.rb +0 -0
- data/test-unit-ext/lib/test-unit-ext/color.rb +59 -0
- data/test-unit-ext/lib/test-unit-ext/colorized-runner.rb +111 -0
- data/test-unit-ext/lib/test-unit-ext/diff.rb +516 -0
- data/{test → test-unit-ext/lib}/test-unit-ext/long-display-for-emacs.rb +0 -0
- data/test-unit-ext/lib/test-unit-ext/notification.rb +79 -0
- data/test-unit-ext/lib/test-unit-ext/omission.rb +96 -0
- data/test-unit-ext/lib/test-unit-ext/pending.rb +97 -0
- data/{test → test-unit-ext/lib}/test-unit-ext/priority.rb +25 -53
- data/test-unit-ext/lib/test-unit-ext/version.rb +3 -0
- data/test-unit-ext/lib/test-unit-ext/xml-report.rb +224 -0
- data/test-unit-ext/lib/test-unit-ext.rb +16 -0
- data/test-unit-ext/misc/rd2html.rb +42 -0
- data/test-unit-ext/test/run-test.rb +14 -0
- data/test-unit-ext/test/test_attributes.rb +139 -0
- data/test-unit-ext/test/test_color.rb +39 -0
- data/test-unit-ext/test/test_diff.rb +475 -0
- data/test-unit-ext/test/test_notification.rb +32 -0
- data/test-unit-ext/test/test_omission.rb +64 -0
- data/test-unit-ext/test/test_pending.rb +64 -0
- data/test-unit-ext/test/test_priority.rb +88 -0
- data/test-unit-ext/test/test_xml_report.rb +161 -0
- metadata +34 -7
- data/test/test-unit-ext.rb +0 -4
@@ -0,0 +1,129 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
class TestCase
|
6
|
+
class << self
|
7
|
+
alias_method :method_added_without_attributes, :method_added
|
8
|
+
def method_added(name)
|
9
|
+
method_added_without_attributes(name)
|
10
|
+
if defined?(@current_attributes)
|
11
|
+
attributes = {}
|
12
|
+
kept_attributes = {}
|
13
|
+
@current_attributes.each do |attribute_name, attribute|
|
14
|
+
attributes[attribute_name] = attribute[:value]
|
15
|
+
kept_attributes[attribute_name] = attribute if attribute[:keep]
|
16
|
+
end
|
17
|
+
set_attributes(name, attributes)
|
18
|
+
@current_attributes = kept_attributes
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def attribute(name, value, options={}, *tests)
|
23
|
+
unless options.is_a?(Hash)
|
24
|
+
tests << options
|
25
|
+
options = {}
|
26
|
+
end
|
27
|
+
@current_attributes ||= {}
|
28
|
+
if tests.empty?
|
29
|
+
@current_attributes[name] = options.merge(:value => value)
|
30
|
+
else
|
31
|
+
tests.each do |test|
|
32
|
+
set_attribute(test, {name => value})
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def bug(value, *tests)
|
38
|
+
attribute(:bug, value, *tests)
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_attributes(test_name, attributes)
|
42
|
+
return if attributes.empty?
|
43
|
+
test_name = normalize_test_name(test_name)
|
44
|
+
@attributes ||= {}
|
45
|
+
@attributes[test_name] ||= {}
|
46
|
+
@attributes[test_name] = @attributes[test_name].merge(attributes)
|
47
|
+
end
|
48
|
+
|
49
|
+
def attributes(test_name)
|
50
|
+
test_name = normalize_test_name(test_name)
|
51
|
+
@attributes ||= {}
|
52
|
+
@attributes[test_name]
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def normalize_test_name(test_name)
|
57
|
+
"test_#{test_name.to_s.sub(/^test_/, '')}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
alias_method :run_without_attributes, :run
|
62
|
+
def run(result, &block)
|
63
|
+
run_without_attributes(TestResultAttributesSupport.new(result, self),
|
64
|
+
&block)
|
65
|
+
end
|
66
|
+
|
67
|
+
def attributes
|
68
|
+
self.class.attributes(@method_name) || {}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class TestResultAttributesSupport
|
73
|
+
def initialize(result, test)
|
74
|
+
@result = result
|
75
|
+
@test = test
|
76
|
+
end
|
77
|
+
|
78
|
+
def add_failure(failure)
|
79
|
+
failure.attributes = @test.attributes
|
80
|
+
method_missing(:add_failure, failure)
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_error(error)
|
84
|
+
error.attributes = @test.attributes
|
85
|
+
method_missing(:add_error, error)
|
86
|
+
end
|
87
|
+
|
88
|
+
def method_missing(name, *args, &block)
|
89
|
+
@result.send(name, *args, &block)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
module AttributesFormatter
|
94
|
+
private
|
95
|
+
def format_attributes
|
96
|
+
return '' if attributes.empty?
|
97
|
+
attributes.collect do |key, value|
|
98
|
+
" #{key}: #{value}"
|
99
|
+
end.join("\n") + "\n"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class Failure
|
104
|
+
include AttributesFormatter
|
105
|
+
|
106
|
+
attr_accessor :attributes
|
107
|
+
|
108
|
+
alias_method :long_display_without_attributes, :long_display
|
109
|
+
def long_display
|
110
|
+
test_name_re = Regexp.escape(@test_name)
|
111
|
+
long_display_without_attributes.sub(/(^#{test_name_re}.*\n)/,
|
112
|
+
"\\1#{format_attributes}")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class Error
|
117
|
+
include AttributesFormatter
|
118
|
+
|
119
|
+
attr_accessor :attributes
|
120
|
+
|
121
|
+
alias_method :long_display_without_attributes, :long_display
|
122
|
+
def long_display
|
123
|
+
test_name_re = Regexp.escape(@test_name)
|
124
|
+
long_display_without_attributes.sub(/(^#{test_name_re}:\n)/,
|
125
|
+
"\\1#{format_attributes}")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
File without changes
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Test
|
2
|
+
class Color
|
3
|
+
NAMES = ["black", "red", "green", "yellow",
|
4
|
+
"blue", "magenta", "cyan", "white"]
|
5
|
+
def initialize(name, options={})
|
6
|
+
@name = name
|
7
|
+
@foreground = options[:foreground]
|
8
|
+
@foreground = true if @foreground.nil?
|
9
|
+
@intensity = options[:intensity]
|
10
|
+
@bold = options[:bold]
|
11
|
+
@italic = options[:italic]
|
12
|
+
@underline = options[:underline]
|
13
|
+
end
|
14
|
+
|
15
|
+
def sequence
|
16
|
+
sequence = []
|
17
|
+
if @name == "none"
|
18
|
+
elsif @name == "reset"
|
19
|
+
sequence << "0"
|
20
|
+
else
|
21
|
+
foreground_parameter = @foreground ? 3 : 4
|
22
|
+
foreground_parameter += 6 if @intensity
|
23
|
+
sequence << "#{foreground_parameter}#{NAMES.index(@name)}"
|
24
|
+
end
|
25
|
+
sequence << "1" if @bold
|
26
|
+
sequence << "3" if @italic
|
27
|
+
sequence << "4" if @underline
|
28
|
+
sequence
|
29
|
+
end
|
30
|
+
|
31
|
+
def escape_sequence
|
32
|
+
"\e[#{sequence.join(';')}m"
|
33
|
+
end
|
34
|
+
|
35
|
+
def +(other)
|
36
|
+
MixColor.new([self, other])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class MixColor
|
41
|
+
def initialize(colors)
|
42
|
+
@colors = colors
|
43
|
+
end
|
44
|
+
|
45
|
+
def sequence
|
46
|
+
@colors.inject([]) do |result, color|
|
47
|
+
result + color.sequence
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def escape_sequence
|
52
|
+
"\e[#{sequence.join(';')}m"
|
53
|
+
end
|
54
|
+
|
55
|
+
def +(other)
|
56
|
+
self.class.new([self, other])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require "test/unit/ui/console/testrunner"
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
module UI
|
6
|
+
module Console
|
7
|
+
class ColorizedTestRunner < TestRunner
|
8
|
+
extend TestRunnerUtilities
|
9
|
+
|
10
|
+
SCHEMES = {
|
11
|
+
:default => {
|
12
|
+
"success" => Color.new("green", :bold => true),
|
13
|
+
"failure" => Color.new("red", :bold => true),
|
14
|
+
"pending" => Color.new("magenta", :bold => true),
|
15
|
+
"omission" => Color.new("blue", :bold => true),
|
16
|
+
"notification" => Color.new("cyan", :bold => true),
|
17
|
+
"error" => Color.new("yellow", :bold => true),
|
18
|
+
},
|
19
|
+
}
|
20
|
+
|
21
|
+
def initialize(suite, output_level=NORMAL, io=STDOUT)
|
22
|
+
super
|
23
|
+
@use_color = guess_color_availability
|
24
|
+
@color_scheme = SCHEMES[:default]
|
25
|
+
@reset_color = Color.new("reset")
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def add_fault(fault)
|
30
|
+
@faults << fault
|
31
|
+
output_single_with_color(fault.single_character_display,
|
32
|
+
fault_color(fault),
|
33
|
+
PROGRESS_ONLY)
|
34
|
+
@already_outputted = true
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_finished(name)
|
38
|
+
unless @already_outputted
|
39
|
+
output_single_with_color(".",
|
40
|
+
@color_scheme["success"],
|
41
|
+
PROGRESS_ONLY)
|
42
|
+
end
|
43
|
+
nl(VERBOSE)
|
44
|
+
@already_outputted = false
|
45
|
+
end
|
46
|
+
|
47
|
+
def finished(elapsed_time)
|
48
|
+
nl
|
49
|
+
output("Finished in #{elapsed_time} seconds.")
|
50
|
+
@faults.each_with_index do |fault, index|
|
51
|
+
nl
|
52
|
+
output_single("%3d) " % (index + 1))
|
53
|
+
output_with_color(fault.long_display, fault_color(fault))
|
54
|
+
end
|
55
|
+
nl
|
56
|
+
output_with_color(@result.to_s, result_color)
|
57
|
+
end
|
58
|
+
|
59
|
+
def fault_color(fault)
|
60
|
+
@color_scheme[fault.class.name.split(/::/).last.downcase]
|
61
|
+
end
|
62
|
+
|
63
|
+
def result_color
|
64
|
+
if @result.passed?
|
65
|
+
if @result.pending_count > 0
|
66
|
+
@color_scheme["pending"]
|
67
|
+
elsif @result.notification_count > 0
|
68
|
+
@color_scheme["notification"]
|
69
|
+
else
|
70
|
+
@color_scheme["success"]
|
71
|
+
end
|
72
|
+
elsif @result.error_count > 0
|
73
|
+
@color_scheme["error"]
|
74
|
+
elsif @result.failure_count > 0
|
75
|
+
@color_scheme["failure"]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def output_with_color(message, color=nil, level=NORMAL)
|
80
|
+
return unless output?(level)
|
81
|
+
output_single_with_color(message, color, level)
|
82
|
+
@io.puts
|
83
|
+
end
|
84
|
+
|
85
|
+
def output_single_with_color(message, color=nil, level=NORMAL)
|
86
|
+
return unless output?(level)
|
87
|
+
if @use_color and color
|
88
|
+
message = "%s%s%s" % [color.escape_sequence,
|
89
|
+
message,
|
90
|
+
@reset_color.escape_sequence]
|
91
|
+
end
|
92
|
+
@io.write(message)
|
93
|
+
@io.flush
|
94
|
+
end
|
95
|
+
|
96
|
+
def guess_color_availability
|
97
|
+
return false unless @io.tty?
|
98
|
+
term = ENV["TERM"]
|
99
|
+
return true if term and (/term\z/ =~ term or term == "screen")
|
100
|
+
return true if ENV["EMACS"] == "t"
|
101
|
+
false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
AutoRunner::RUNNERS[:console] = Proc.new do
|
108
|
+
Test::Unit::UI::Console::ColorizedTestRunner
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|