ActiveSambaLdap 0.0.7

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 (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'