activeldap 0.10.0 → 1.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.
Files changed (53) hide show
  1. data/CHANGES +6 -30
  2. data/README +4 -2
  3. data/Rakefile +7 -0
  4. data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
  5. data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
  6. data/examples/al-admin/po/en/al-admin.po +3 -3
  7. data/examples/al-admin/po/ja/al-admin.po +3 -3
  8. data/examples/al-admin/po/nl/al-admin.po +3 -3
  9. data/lib/active_ldap/adapter/base.rb +0 -2
  10. data/lib/active_ldap/base.rb +4 -2
  11. data/lib/active_ldap/get_text_support.rb +3 -11
  12. data/lib/active_ldap/operations.rb +1 -0
  13. data/lib/active_ldap/schema/syntaxes.rb +5 -3
  14. data/lib/active_ldap/validations.rb +25 -15
  15. data/lib/active_ldap.rb +1 -1
  16. data/po/en/active-ldap.po +1 -1
  17. data/po/ja/active-ldap.po +1 -1
  18. data/rails/plugin/active_ldap/init.rb +1 -1
  19. data/test/run-test.rb +2 -0
  20. data/test/test_base.rb +63 -1
  21. data/test/test_syntax.rb +3 -2
  22. data/test-unit-ext/NEWS.en +28 -0
  23. data/test-unit-ext/NEWS.ja +28 -0
  24. data/test-unit-ext/README.en +247 -0
  25. data/test-unit-ext/README.ja +246 -0
  26. data/test-unit-ext/Rakefile +111 -0
  27. data/{test → test-unit-ext/lib}/test-unit-ext/always-show-result.rb +0 -0
  28. data/test-unit-ext/lib/test-unit-ext/assertions.rb +40 -0
  29. data/test-unit-ext/lib/test-unit-ext/attributes.rb +129 -0
  30. data/{test → test-unit-ext/lib}/test-unit-ext/backtrace-filter.rb +0 -0
  31. data/test-unit-ext/lib/test-unit-ext/color.rb +59 -0
  32. data/test-unit-ext/lib/test-unit-ext/colorized-runner.rb +111 -0
  33. data/test-unit-ext/lib/test-unit-ext/diff.rb +516 -0
  34. data/{test → test-unit-ext/lib}/test-unit-ext/long-display-for-emacs.rb +0 -0
  35. data/test-unit-ext/lib/test-unit-ext/notification.rb +79 -0
  36. data/test-unit-ext/lib/test-unit-ext/omission.rb +96 -0
  37. data/test-unit-ext/lib/test-unit-ext/pending.rb +97 -0
  38. data/{test → test-unit-ext/lib}/test-unit-ext/priority.rb +25 -53
  39. data/test-unit-ext/lib/test-unit-ext/version.rb +3 -0
  40. data/test-unit-ext/lib/test-unit-ext/xml-report.rb +224 -0
  41. data/test-unit-ext/lib/test-unit-ext.rb +16 -0
  42. data/test-unit-ext/misc/rd2html.rb +42 -0
  43. data/test-unit-ext/test/run-test.rb +14 -0
  44. data/test-unit-ext/test/test_attributes.rb +139 -0
  45. data/test-unit-ext/test/test_color.rb +39 -0
  46. data/test-unit-ext/test/test_diff.rb +475 -0
  47. data/test-unit-ext/test/test_notification.rb +32 -0
  48. data/test-unit-ext/test/test_omission.rb +64 -0
  49. data/test-unit-ext/test/test_pending.rb +64 -0
  50. data/test-unit-ext/test/test_priority.rb +88 -0
  51. data/test-unit-ext/test/test_xml_report.rb +161 -0
  52. metadata +34 -7
  53. 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
@@ -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