ActiveSambaLdap 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/NEWS.en +40 -0
  2. data/NEWS.ja +44 -0
  3. data/README.en +366 -0
  4. data/README.ja +361 -0
  5. data/Rakefile +168 -0
  6. data/bin/asl-groupadd +73 -0
  7. data/bin/asl-groupadd.help +1 -0
  8. data/bin/asl-groupdel +61 -0
  9. data/bin/asl-groupdel.help +1 -0
  10. data/bin/asl-groupmod +137 -0
  11. data/bin/asl-groupmod.help +1 -0
  12. data/bin/asl-groupshow +33 -0
  13. data/bin/asl-groupshow.help +1 -0
  14. data/bin/asl-passwd +90 -0
  15. data/bin/asl-passwd.help +1 -0
  16. data/bin/asl-populate +101 -0
  17. data/bin/asl-populate.help +1 -0
  18. data/bin/asl-purge +26 -0
  19. data/bin/asl-purge.help +1 -0
  20. data/bin/asl-samba-computeradd +96 -0
  21. data/bin/asl-samba-computeradd.help +1 -0
  22. data/bin/asl-samba-groupadd +57 -0
  23. data/bin/asl-samba-groupadd.help +1 -0
  24. data/bin/asl-samba-groupdel +55 -0
  25. data/bin/asl-samba-groupdel.help +1 -0
  26. data/bin/asl-samba-groupmod +99 -0
  27. data/bin/asl-samba-groupmod.help +1 -0
  28. data/bin/asl-samba-useradd +100 -0
  29. data/bin/asl-samba-useradd.help +1 -0
  30. data/bin/asl-samba-userdel +49 -0
  31. data/bin/asl-samba-userdel.help +1 -0
  32. data/bin/asl-samba-usermod +94 -0
  33. data/bin/asl-samba-usermod.help +1 -0
  34. data/bin/asl-useradd +264 -0
  35. data/bin/asl-useradd.help +1 -0
  36. data/bin/asl-userdel +84 -0
  37. data/bin/asl-userdel.help +1 -0
  38. data/bin/asl-usermod +335 -0
  39. data/bin/asl-usermod.help +1 -0
  40. data/bin/asl-usershow +33 -0
  41. data/bin/asl-usershow.help +1 -0
  42. data/lib/active_samba_ldap.rb +42 -0
  43. data/lib/active_samba_ldap/account_entry.rb +208 -0
  44. data/lib/active_samba_ldap/base.rb +137 -0
  45. data/lib/active_samba_ldap/command.rb +100 -0
  46. data/lib/active_samba_ldap/computer.rb +24 -0
  47. data/lib/active_samba_ldap/computer_account_entry.rb +34 -0
  48. data/lib/active_samba_ldap/configuration.rb +333 -0
  49. data/lib/active_samba_ldap/dc.rb +19 -0
  50. data/lib/active_samba_ldap/entry.rb +81 -0
  51. data/lib/active_samba_ldap/get_text_support.rb +12 -0
  52. data/lib/active_samba_ldap/group.rb +17 -0
  53. data/lib/active_samba_ldap/group_entry.rb +187 -0
  54. data/lib/active_samba_ldap/idmap.rb +19 -0
  55. data/lib/active_samba_ldap/ou.rb +20 -0
  56. data/lib/active_samba_ldap/populate.rb +257 -0
  57. data/lib/active_samba_ldap/reloadable.rb +15 -0
  58. data/lib/active_samba_ldap/samba_account_entry.rb +225 -0
  59. data/lib/active_samba_ldap/samba_entry.rb +26 -0
  60. data/lib/active_samba_ldap/samba_group_entry.rb +143 -0
  61. data/lib/active_samba_ldap/unix_id_pool.rb +43 -0
  62. data/lib/active_samba_ldap/user.rb +44 -0
  63. data/lib/active_samba_ldap/user_account_entry.rb +30 -0
  64. data/lib/active_samba_ldap/version.rb +3 -0
  65. data/lib/samba/encrypt.rb +86 -0
  66. data/misc/rd2html.rb +42 -0
  67. data/po/ja/active-samba-ldap.po +465 -0
  68. data/rails/README +30 -0
  69. data/rails/init.rb +33 -0
  70. data/rails_generators/scaffold_active_samba_ldap/scaffold_active_samba_ldap_generator.rb +27 -0
  71. data/rails_generators/scaffold_active_samba_ldap/templates/computer.rb +3 -0
  72. data/rails_generators/scaffold_active_samba_ldap/templates/dc.rb +3 -0
  73. data/rails_generators/scaffold_active_samba_ldap/templates/group.rb +3 -0
  74. data/rails_generators/scaffold_active_samba_ldap/templates/idmap.rb +3 -0
  75. data/rails_generators/scaffold_active_samba_ldap/templates/ldap.yml +24 -0
  76. data/rails_generators/scaffold_active_samba_ldap/templates/ou.rb +3 -0
  77. data/rails_generators/scaffold_active_samba_ldap/templates/samba_controller.rb +12 -0
  78. data/rails_generators/scaffold_active_samba_ldap/templates/samba_helper.rb +2 -0
  79. data/rails_generators/scaffold_active_samba_ldap/templates/samba_index.rhtml +17 -0
  80. data/rails_generators/scaffold_active_samba_ldap/templates/samba_populate.rhtml +15 -0
  81. data/rails_generators/scaffold_active_samba_ldap/templates/samba_purge.rhtml +10 -0
  82. data/rails_generators/scaffold_active_samba_ldap/templates/unix_id_pool.rb +3 -0
  83. data/rails_generators/scaffold_active_samba_ldap/templates/user.rb +3 -0
  84. data/setup.rb +1585 -0
  85. data/test-unit/History.txt +107 -0
  86. data/test-unit/README.txt +52 -0
  87. data/test-unit/Rakefile +40 -0
  88. data/test-unit/TODO +5 -0
  89. data/test-unit/bin/testrb +5 -0
  90. data/test-unit/lib/test/unit.rb +342 -0
  91. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  92. data/test-unit/lib/test/unit/assertions.rb +1149 -0
  93. data/test-unit/lib/test/unit/attribute.rb +125 -0
  94. data/test-unit/lib/test/unit/autorunner.rb +329 -0
  95. data/test-unit/lib/test/unit/collector.rb +43 -0
  96. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  97. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  98. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  99. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  100. data/test-unit/lib/test/unit/color-scheme.rb +86 -0
  101. data/test-unit/lib/test/unit/color.rb +96 -0
  102. data/test-unit/lib/test/unit/diff.rb +538 -0
  103. data/test-unit/lib/test/unit/error.rb +124 -0
  104. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  105. data/test-unit/lib/test/unit/failure.rb +110 -0
  106. data/test-unit/lib/test/unit/fixture.rb +176 -0
  107. data/test-unit/lib/test/unit/notification.rb +125 -0
  108. data/test-unit/lib/test/unit/omission.rb +143 -0
  109. data/test-unit/lib/test/unit/pending.rb +146 -0
  110. data/test-unit/lib/test/unit/priority.rb +181 -0
  111. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  112. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  113. data/test-unit/lib/test/unit/testcase.rb +425 -0
  114. data/test-unit/lib/test/unit/testresult.rb +89 -0
  115. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  116. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  117. data/test-unit/lib/test/unit/ui/console/testrunner.rb +223 -0
  118. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  119. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  120. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  121. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  122. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  123. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  124. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  125. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  126. data/test-unit/lib/test/unit/version.rb +7 -0
  127. data/test-unit/sample/adder.rb +13 -0
  128. data/test-unit/sample/subtracter.rb +12 -0
  129. data/test-unit/sample/tc_adder.rb +18 -0
  130. data/test-unit/sample/tc_subtracter.rb +18 -0
  131. data/test-unit/sample/test_user.rb +22 -0
  132. data/test-unit/sample/ts_examples.rb +7 -0
  133. data/test-unit/test/collector/test-descendant.rb +135 -0
  134. data/test-unit/test/collector/test-load.rb +333 -0
  135. data/test-unit/test/collector/test_dir.rb +406 -0
  136. data/test-unit/test/collector/test_objectspace.rb +98 -0
  137. data/test-unit/test/run-test.rb +13 -0
  138. data/test-unit/test/test-attribute.rb +86 -0
  139. data/test-unit/test/test-color-scheme.rb +56 -0
  140. data/test-unit/test/test-color.rb +47 -0
  141. data/test-unit/test/test-diff.rb +477 -0
  142. data/test-unit/test/test-emacs-runner.rb +60 -0
  143. data/test-unit/test/test-fixture.rb +287 -0
  144. data/test-unit/test/test-notification.rb +33 -0
  145. data/test-unit/test/test-omission.rb +81 -0
  146. data/test-unit/test/test-pending.rb +70 -0
  147. data/test-unit/test/test-priority.rb +119 -0
  148. data/test-unit/test/test-testcase.rb +507 -0
  149. data/test-unit/test/test_assertions.rb +1082 -0
  150. data/test-unit/test/test_error.rb +26 -0
  151. data/test-unit/test/test_failure.rb +33 -0
  152. data/test-unit/test/test_testresult.rb +113 -0
  153. data/test-unit/test/test_testsuite.rb +129 -0
  154. data/test-unit/test/testunit-test-util.rb +14 -0
  155. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  156. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  157. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  158. data/test-unit/test/util/test_observable.rb +102 -0
  159. data/test-unit/test/util/test_procwrapper.rb +36 -0
  160. data/test/asl-test-utils.rb +276 -0
  161. data/test/command.rb +67 -0
  162. data/test/config.yaml.sample +17 -0
  163. data/test/run-test.rb +20 -0
  164. data/test/test_asl_groupadd.rb +69 -0
  165. data/test/test_asl_groupdel.rb +88 -0
  166. data/test/test_asl_groupmod.rb +259 -0
  167. data/test/test_asl_groupshow.rb +21 -0
  168. data/test/test_asl_passwd.rb +126 -0
  169. data/test/test_asl_populate.rb +92 -0
  170. data/test/test_asl_purge.rb +21 -0
  171. data/test/test_asl_useradd.rb +712 -0
  172. data/test/test_asl_userdel.rb +75 -0
  173. data/test/test_asl_usermod.rb +549 -0
  174. data/test/test_asl_usershow.rb +27 -0
  175. data/test/test_entry.rb +21 -0
  176. data/test/test_group.rb +21 -0
  177. data/test/test_password.rb +51 -0
  178. data/test/test_samba_encrypt.rb +35 -0
  179. data/test/test_user_home_directory.rb +43 -0
  180. metadata +314 -0
@@ -0,0 +1,125 @@
1
+ module Test
2
+ module Unit
3
+ module Attribute
4
+ class << self
5
+ def included(base)
6
+ base.extend(BaseClassMethods)
7
+ base.extend(ClassMethods)
8
+ end
9
+ end
10
+
11
+ module BaseClassMethods
12
+ def attributes_table
13
+ {}
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ def method_added(name)
19
+ super
20
+ return unless defined?(@current_attributes)
21
+
22
+ attributes = {}
23
+ kept_attributes = {}
24
+ @current_attributes.each do |attribute_name, attribute|
25
+ attributes[attribute_name] = attribute[:value]
26
+ kept_attributes[attribute_name] = attribute if attribute[:keep]
27
+ end
28
+ set_attributes(name, attributes)
29
+ @current_attributes = kept_attributes
30
+ end
31
+
32
+ def attribute(name, value, options={}, *method_names)
33
+ unless options.is_a?(Hash)
34
+ method_names << options
35
+ options = {}
36
+ end
37
+ @current_attributes ||= {}
38
+ if method_names.empty?
39
+ @current_attributes[name] = options.merge(:value => value)
40
+ else
41
+ method_names.each do |method_name|
42
+ set_attributes(method_name, {name => value})
43
+ end
44
+ end
45
+ end
46
+
47
+ def attributes_table
48
+ @attributes_table ||= {}
49
+ super.merge(@attributes_table)
50
+ end
51
+
52
+ def set_attributes(method_name, new_attributes)
53
+ return if new_attributes.empty?
54
+ method_name = normalize_method_name(method_name)
55
+ @attributes_table ||= {}
56
+ @attributes_table[method_name] ||= {}
57
+ current_attributes = @attributes_table[method_name]
58
+ new_attributes.each do |key, value|
59
+ key = normalize_attribute_name(key)
60
+ observers = attribute_observers(key) || []
61
+ observers.each do |observer|
62
+ observer.call(self,
63
+ key,
64
+ (attributes(method_name) || {})[key],
65
+ value,
66
+ method_name)
67
+ end
68
+ current_attributes[key] = value
69
+ end
70
+ end
71
+
72
+ def attributes(method_name)
73
+ method_name = normalize_method_name(method_name)
74
+ attributes = attributes_table[method_name]
75
+ ancestors[1..-1].each do |ancestor|
76
+ if ancestor.is_a?(Class) and ancestor < Test::Unit::Attribute
77
+ parent_attributes = ancestor.attributes(method_name)
78
+ if attributes
79
+ attributes = (parent_attributes || {}).merge(attributes)
80
+ else
81
+ attributes = parent_attributes
82
+ end
83
+ break
84
+ end
85
+ end
86
+ attributes
87
+ end
88
+
89
+ def get_attribute(method_name, attribute_name)
90
+ attribute_name = normalize_attribute_name(attribute_name)
91
+ (attributes(method_name) || {})[attribute_name]
92
+ end
93
+
94
+ @@attribute_observers = {}
95
+ def register_attribute_observer(attribute_name, observer=Proc.new)
96
+ attribute_name = normalize_attribute_name(attribute_name)
97
+ @@attribute_observers[attribute_name] ||= []
98
+ @@attribute_observers[attribute_name] << observer
99
+ end
100
+
101
+ def attribute_observers(attribute_name)
102
+ attribute_name = normalize_attribute_name(attribute_name)
103
+ @@attribute_observers[attribute_name]
104
+ end
105
+
106
+ private
107
+ def normalize_attribute_name(name)
108
+ name.to_s
109
+ end
110
+
111
+ def normalize_method_name(name)
112
+ name.to_s
113
+ end
114
+ end
115
+
116
+ def attributes
117
+ self.class.attributes(@method_name) || {}
118
+ end
119
+
120
+ def [](name)
121
+ self.class.get_attribute(@method_name, name)
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,329 @@
1
+ require 'test/unit/color-scheme'
2
+ require 'optparse'
3
+
4
+ module Test
5
+ module Unit
6
+ class AutoRunner
7
+ RUNNERS = {}
8
+ COLLECTORS = {}
9
+ ADDITIONAL_OPTIONS = []
10
+
11
+ class << self
12
+ def register_runner(id, runner_builder=Proc.new)
13
+ RUNNERS[id] = runner_builder
14
+ RUNNERS[id.to_s] = runner_builder
15
+ end
16
+
17
+ def runner(id)
18
+ RUNNERS[id.to_s]
19
+ end
20
+
21
+ def register_collector(id, collector_builder=Proc.new)
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
32
+ end
33
+
34
+ def setup_option(option_builder=Proc.new)
35
+ ADDITIONAL_OPTIONS << option_builder
36
+ end
37
+ end
38
+
39
+ def self.run(force_standalone=false, default_dir=nil, argv=ARGV, &block)
40
+ r = new(force_standalone || standalone?, &block)
41
+ r.base = default_dir
42
+ r.process_args(argv)
43
+ r.run
44
+ end
45
+
46
+ def self.standalone?
47
+ return false unless("-e" == $0)
48
+ ObjectSpace.each_object(Class) do |klass|
49
+ return false if(klass < TestCase)
50
+ end
51
+ true
52
+ end
53
+
54
+ register_collector(:descendant) do |auto_runner|
55
+ require 'test/unit/collector/descendant'
56
+ collector = Collector::Descendant.new
57
+ collector.filter = auto_runner.filters
58
+ collector.collect($0.sub(/\.rb\Z/, ''))
59
+ end
60
+
61
+ register_collector(:load) do |auto_runner|
62
+ require 'test/unit/collector/load'
63
+ collector = Collector::Load.new
64
+ collector.patterns.concat(auto_runner.pattern) if auto_runner.pattern
65
+ collector.excludes.concat(auto_runner.exclude) if auto_runner.exclude
66
+ collector.base = auto_runner.base
67
+ collector.filter = auto_runner.filters
68
+ collector.collect(*auto_runner.to_run)
69
+ end
70
+
71
+ # deprecated
72
+ register_collector(:object_space) do |auto_runner|
73
+ require 'test/unit/collector/objectspace'
74
+ c = Collector::ObjectSpace.new
75
+ c.filter = auto_runner.filters
76
+ c.collect($0.sub(/\.rb\Z/, ''))
77
+ end
78
+
79
+ # deprecated
80
+ register_collector(:dir) do |auto_runner|
81
+ require 'test/unit/collector/dir'
82
+ c = Collector::Dir.new
83
+ c.filter = auto_runner.filters
84
+ c.pattern.concat(auto_runner.pattern) if auto_runner.pattern
85
+ c.exclude.concat(auto_runner.exclude) if auto_runner.exclude
86
+ c.base = auto_runner.base
87
+ $:.push(auto_runner.base) if auto_runner.base
88
+ c.collect(*(auto_runner.to_run.empty? ? ['.'] : auto_runner.to_run))
89
+ end
90
+
91
+ attr_reader :suite, :runner_options
92
+ attr_accessor :filters, :to_run, :pattern, :exclude, :base, :workdir
93
+ attr_accessor :color_scheme
94
+ attr_writer :runner, :collector
95
+
96
+ def initialize(standalone)
97
+ Unit.run = true
98
+ @standalone = standalone
99
+ @runner = default_runner
100
+ @collector = default_collector
101
+ @filters = []
102
+ @to_run = []
103
+ @color_scheme = ColorScheme.default
104
+ @runner_options = {}
105
+ @workdir = nil
106
+ default_config_file = "test-unit.yml"
107
+ load_config(default_config_file) if File.exist?(default_config_file)
108
+ yield(self) if block_given?
109
+ end
110
+
111
+ def process_args(args = ARGV)
112
+ begin
113
+ options.order!(args) {|arg| @to_run << arg}
114
+ rescue OptionParser::ParseError => e
115
+ puts e
116
+ puts options
117
+ exit(false)
118
+ else
119
+ @filters << proc{false} unless(@filters.empty?)
120
+ end
121
+ not @to_run.empty?
122
+ end
123
+
124
+ def options
125
+ @options ||= OptionParser.new do |o|
126
+ o.banner = "Test::Unit automatic runner."
127
+ o.banner << "\nUsage: #{$0} [options] [-- untouched arguments]"
128
+
129
+ o.on
130
+ o.on('-r', '--runner=RUNNER', RUNNERS,
131
+ "Use the given RUNNER.",
132
+ "(" + keyword_display(RUNNERS) + ")") do |r|
133
+ @runner = r
134
+ end
135
+
136
+ if (@standalone)
137
+ o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
138
+ @base = b
139
+ end
140
+
141
+ o.on('-w', '--workdir=DIR', "Working directory to run tests.") do |w|
142
+ @workdir = w
143
+ end
144
+
145
+ o.on('-a', '--add=TORUN', Array,
146
+ "Add TORUN to the list of things to run;",
147
+ "can be a file or a directory.") do |a|
148
+ @to_run.concat(a)
149
+ end
150
+
151
+ @pattern = []
152
+ o.on('-p', '--pattern=PATTERN', Regexp,
153
+ "Match files to collect against PATTERN.") do |e|
154
+ @pattern << e
155
+ end
156
+
157
+ @exclude = []
158
+ o.on('-x', '--exclude=PATTERN', Regexp,
159
+ "Ignore files to collect against PATTERN.") do |e|
160
+ @exclude << e
161
+ end
162
+ end
163
+
164
+ o.on('-n', '--name=NAME', String,
165
+ "Runs tests matching NAME.",
166
+ "(patterns may be used).") do |n|
167
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
168
+ case n
169
+ when Regexp
170
+ @filters << proc{|t| n =~ t.method_name ? true : nil}
171
+ else
172
+ @filters << proc{|t| n == t.method_name ? true : nil}
173
+ end
174
+ end
175
+
176
+ o.on('-t', '--testcase=TESTCASE', String,
177
+ "Runs tests in TestCases matching TESTCASE.",
178
+ "(patterns may be used).") do |n|
179
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
180
+ case n
181
+ when Regexp
182
+ @filters << proc{|t| n =~ t.class.name ? true : nil}
183
+ else
184
+ @filters << proc{|t| n == t.class.name ? true : nil}
185
+ end
186
+ end
187
+
188
+ priority_filter = Proc.new do |test|
189
+ if @filters.size > 2
190
+ nil
191
+ else
192
+ Priority::Checker.new(test).need_to_run? or nil
193
+ end
194
+ end
195
+ o.on("--[no-]priority-mode",
196
+ "Runs some tests based on their priority.") do |priority_mode|
197
+ if priority_mode
198
+ Priority.enable
199
+ @filters |= [priority_filter]
200
+ else
201
+ Priority.disable
202
+ @filters -= [priority_filter]
203
+ end
204
+ end
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
+
213
+ o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
214
+ "Appends directory list to $LOAD_PATH.") do |dirs|
215
+ $LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
216
+ end
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
+
236
+ ADDITIONAL_OPTIONS.each do |option_builder|
237
+ option_builder.call(self, o)
238
+ end
239
+
240
+ o.on('--',
241
+ "Stop processing options so that the",
242
+ "remaining options will be passed to the",
243
+ "test."){o.terminate}
244
+
245
+ o.on('-h', '--help', 'Display this help.'){puts o; exit}
246
+
247
+ o.on_tail
248
+ o.on_tail('Deprecated options:')
249
+
250
+ o.on_tail('--console', 'Console runner (use --runner).') do
251
+ warn("Deprecated option (--console).")
252
+ @runner = self.class.runner(:console)
253
+ end
254
+
255
+ if RUNNERS[:fox]
256
+ o.on_tail('--fox', 'Fox runner (use --runner).') do
257
+ warn("Deprecated option (--fox).")
258
+ @runner = self.class.runner(:fox)
259
+ end
260
+ end
261
+
262
+ o.on_tail
263
+ end
264
+ end
265
+
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(", ")
282
+ end
283
+
284
+ def run
285
+ suite = @collector[self]
286
+ return false if suite.nil?
287
+ runner = @runner[self]
288
+ return false if runner.nil?
289
+ @runner_options[:color_scheme] ||= @color_scheme
290
+ Dir.chdir(@workdir) if @workdir
291
+ runner.run(suite, @runner_options).passed?
292
+ end
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
+
312
+ private
313
+ def default_runner
314
+ if ENV["EMACS"] == "t"
315
+ self.class.runner(:emacs)
316
+ else
317
+ self.class.runner(:console)
318
+ end
319
+ end
320
+
321
+ def default_collector
322
+ self.class.collector(@standalone ? :load : :descendant)
323
+ end
324
+ end
325
+ end
326
+ end
327
+
328
+ require 'test/unit/runner/console'
329
+ require 'test/unit/runner/emacs'