rroonga 0.9.4-x86-mingw32 → 0.9.5-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/NEWS.ja.rdoc +29 -0
  2. data/NEWS.rdoc +29 -0
  3. data/Rakefile +6 -6
  4. data/ext/groonga/rb-grn-array.c +1 -1
  5. data/ext/groonga/rb-grn-context.c +15 -28
  6. data/ext/groonga/rb-grn-exception.c +46 -1
  7. data/ext/groonga/rb-grn-expression.c +22 -13
  8. data/ext/groonga/rb-grn-fix-size-column.c +2 -8
  9. data/ext/groonga/rb-grn-hash.c +8 -1
  10. data/ext/groonga/rb-grn-object.c +1 -1
  11. data/ext/groonga/rb-grn-patricia-trie.c +23 -1
  12. data/ext/groonga/rb-grn-table-key-support.c +22 -0
  13. data/ext/groonga/rb-grn-table.c +37 -5
  14. data/ext/groonga/rb-grn-utils.c +20 -2
  15. data/ext/groonga/rb-grn.h +1 -1
  16. data/ext/groonga/rb-groonga.c +76 -38
  17. data/extconf.rb +17 -1
  18. data/html/developer.html +32 -7
  19. data/html/footer.html.erb +5 -0
  20. data/html/heading-mark.svg +393 -0
  21. data/html/index.html +33 -3
  22. data/lib/1.8/groonga.so +0 -0
  23. data/lib/1.9/groonga.so +0 -0
  24. data/lib/groonga.rb +3 -7
  25. data/lib/groonga/context.rb +2 -13
  26. data/lib/groonga/expression-builder.rb +273 -67
  27. data/lib/groonga/pagination.rb +143 -0
  28. data/lib/groonga/record.rb +2 -0
  29. data/lib/groonga/schema.rb +140 -29
  30. data/pkg/rroonga-0.9.5/NEWS.ja.rdoc +156 -0
  31. data/pkg/rroonga-0.9.5/NEWS.rdoc +158 -0
  32. data/pkg/rroonga-0.9.5/README.ja.rdoc +65 -0
  33. data/pkg/rroonga-0.9.5/README.rdoc +66 -0
  34. data/pkg/rroonga-0.9.5/text/TUTORIAL.ja.rdoc +394 -0
  35. data/pkg/rroonga-0.9.5/text/expression.rdoc +285 -0
  36. data/rroonga-build.rb +2 -2
  37. data/test-unit/Rakefile +40 -0
  38. data/test-unit/TODO +5 -0
  39. data/test-unit/bin/testrb +5 -0
  40. data/test-unit/html/classic.html +15 -0
  41. data/test-unit/html/index.html +25 -0
  42. data/test-unit/html/index.html.ja +27 -0
  43. data/test-unit/lib/test/unit.rb +323 -0
  44. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  45. data/test-unit/lib/test/unit/assertions.rb +1230 -0
  46. data/test-unit/lib/test/unit/attribute.rb +125 -0
  47. data/test-unit/lib/test/unit/autorunner.rb +360 -0
  48. data/test-unit/lib/test/unit/collector.rb +36 -0
  49. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  50. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  51. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  52. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  53. data/test-unit/lib/test/unit/color-scheme.rb +102 -0
  54. data/test-unit/lib/test/unit/color.rb +96 -0
  55. data/test-unit/lib/test/unit/diff.rb +724 -0
  56. data/test-unit/lib/test/unit/error.rb +130 -0
  57. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  58. data/test-unit/lib/test/unit/failure.rb +136 -0
  59. data/test-unit/lib/test/unit/fixture.rb +176 -0
  60. data/test-unit/lib/test/unit/notification.rb +129 -0
  61. data/test-unit/lib/test/unit/omission.rb +191 -0
  62. data/test-unit/lib/test/unit/pending.rb +150 -0
  63. data/test-unit/lib/test/unit/priority.rb +180 -0
  64. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  65. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  66. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  67. data/test-unit/lib/test/unit/testcase.rb +476 -0
  68. data/test-unit/lib/test/unit/testresult.rb +89 -0
  69. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  70. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  71. data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
  72. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  73. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  74. data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
  75. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  76. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  77. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  78. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  79. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  80. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  81. data/test-unit/lib/test/unit/version.rb +7 -0
  82. data/test-unit/sample/adder.rb +13 -0
  83. data/test-unit/sample/subtracter.rb +12 -0
  84. data/test-unit/sample/test_adder.rb +20 -0
  85. data/test-unit/sample/test_subtracter.rb +20 -0
  86. data/test-unit/sample/test_user.rb +23 -0
  87. data/test-unit/test/collector/test-descendant.rb +133 -0
  88. data/test-unit/test/collector/test-load.rb +442 -0
  89. data/test-unit/test/collector/test_dir.rb +406 -0
  90. data/test-unit/test/collector/test_objectspace.rb +100 -0
  91. data/test-unit/test/run-test.rb +15 -0
  92. data/test-unit/test/test-attribute.rb +86 -0
  93. data/test-unit/test/test-color-scheme.rb +67 -0
  94. data/test-unit/test/test-color.rb +47 -0
  95. data/test-unit/test/test-diff.rb +518 -0
  96. data/test-unit/test/test-emacs-runner.rb +60 -0
  97. data/test-unit/test/test-fixture.rb +287 -0
  98. data/test-unit/test/test-notification.rb +33 -0
  99. data/test-unit/test/test-omission.rb +81 -0
  100. data/test-unit/test/test-pending.rb +70 -0
  101. data/test-unit/test/test-priority.rb +119 -0
  102. data/test-unit/test/test-testcase.rb +544 -0
  103. data/test-unit/test/test_assertions.rb +1151 -0
  104. data/test-unit/test/test_error.rb +26 -0
  105. data/test-unit/test/test_failure.rb +33 -0
  106. data/test-unit/test/test_testresult.rb +113 -0
  107. data/test-unit/test/test_testsuite.rb +129 -0
  108. data/test-unit/test/testunit-test-util.rb +14 -0
  109. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  110. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  111. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  112. data/test-unit/test/util/test_observable.rb +102 -0
  113. data/test-unit/test/util/test_procwrapper.rb +36 -0
  114. data/test/groonga-test-utils.rb +3 -2
  115. data/test/run-test.rb +14 -2
  116. data/test/test-column.rb +7 -7
  117. data/test/test-context-select.rb +34 -11
  118. data/test/test-exception.rb +3 -0
  119. data/test/test-expression-builder.rb +11 -0
  120. data/test/test-expression.rb +3 -6
  121. data/test/test-gqtp.rb +3 -5
  122. data/test/test-pagination.rb +249 -0
  123. data/test/test-record.rb +36 -8
  124. data/test/test-remote.rb +11 -4
  125. data/test/test-schema-create-table.rb +251 -0
  126. data/test/test-schema.rb +4 -24
  127. data/test/test-table-offset-and-limit.rb +3 -5
  128. data/test/test-table-select-mecab.rb +80 -0
  129. data/test/test-table-select-weight.rb +104 -0
  130. data/test/test-table.rb +22 -4
  131. data/test/test-version.rb +1 -1
  132. data/text/TUTORIAL.ja.rdoc +2 -0
  133. data/text/expression.rdoc +1 -0
  134. data/vendor/local/bin/grntest.exe +0 -0
  135. data/vendor/local/bin/groonga.exe +0 -0
  136. data/vendor/local/bin/libgroonga-0.dll +0 -0
  137. data/vendor/local/include/{groonga.h → groonga/groonga.h} +93 -32
  138. data/vendor/local/lib/groonga/modules/functions/cast.dll +0 -0
  139. data/vendor/local/lib/groonga/modules/functions/cast.la +41 -0
  140. data/vendor/local/lib/pkgconfig/groonga.pc +12 -0
  141. data/vendor/local/share/groonga/admin_html/css/admin.css +104 -0
  142. data/vendor/local/share/groonga/admin_html/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  143. data/vendor/local/share/groonga/admin_html/index.html +1355 -0
  144. data/vendor/local/share/groonga/admin_html/js/jquery-1.4.2.min.js +154 -0
  145. data/vendor/local/share/groonga/admin_html/js/jquery-ui-1.8.1.custom.min.js +756 -0
  146. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +47 -0
  147. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +57 -0
  148. data/vendor/local/share/groonga/munin/plugins/groonga_disk +162 -0
  149. data/vendor/local/share/groonga/munin/plugins/groonga_memory +51 -0
  150. data/vendor/local/share/groonga/munin/plugins/groonga_n_records +110 -0
  151. data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +133 -0
  152. data/vendor/local/share/groonga/munin/plugins/groonga_status +84 -0
  153. metadata +126 -36
@@ -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,360 @@
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
+ @@default_runner = nil
22
+ def default_runner
23
+ runner(@@default_runner)
24
+ end
25
+
26
+ def default_runner=(id)
27
+ @@default_runner = id
28
+ end
29
+
30
+ def register_collector(id, collector_builder=Proc.new)
31
+ COLLECTORS[id] = collector_builder
32
+ COLLECTORS[id.to_s] = collector_builder
33
+ end
34
+
35
+ def collector(id)
36
+ COLLECTORS[id.to_s]
37
+ end
38
+
39
+ def register_color_scheme(id, scheme)
40
+ ColorScheme[id] = scheme
41
+ end
42
+
43
+ def setup_option(option_builder=Proc.new)
44
+ ADDITIONAL_OPTIONS << option_builder
45
+ end
46
+ end
47
+
48
+ def self.run(force_standalone=false, default_dir=nil, argv=ARGV, &block)
49
+ r = new(force_standalone || standalone?, &block)
50
+ r.base = default_dir
51
+ r.process_args(argv)
52
+ r.run
53
+ end
54
+
55
+ def self.standalone?
56
+ return false unless("-e" == $0)
57
+ ObjectSpace.each_object(Class) do |klass|
58
+ return false if(klass < TestCase)
59
+ end
60
+ true
61
+ end
62
+
63
+ register_collector(:descendant) do |auto_runner|
64
+ require 'test/unit/collector/descendant'
65
+ collector = Collector::Descendant.new
66
+ collector.filter = auto_runner.filters
67
+ collector.collect($0.sub(/\.rb\Z/, ''))
68
+ end
69
+
70
+ register_collector(:load) do |auto_runner|
71
+ require 'test/unit/collector/load'
72
+ collector = Collector::Load.new
73
+ collector.patterns.concat(auto_runner.pattern) if auto_runner.pattern
74
+ collector.excludes.concat(auto_runner.exclude) if auto_runner.exclude
75
+ collector.base = auto_runner.base
76
+ collector.filter = auto_runner.filters
77
+ collector.collect(*auto_runner.to_run)
78
+ end
79
+
80
+ # deprecated
81
+ register_collector(:object_space) do |auto_runner|
82
+ require 'test/unit/collector/objectspace'
83
+ c = Collector::ObjectSpace.new
84
+ c.filter = auto_runner.filters
85
+ c.collect($0.sub(/\.rb\Z/, ''))
86
+ end
87
+
88
+ # deprecated
89
+ register_collector(:dir) do |auto_runner|
90
+ require 'test/unit/collector/dir'
91
+ c = Collector::Dir.new
92
+ c.filter = auto_runner.filters
93
+ c.pattern.concat(auto_runner.pattern) if auto_runner.pattern
94
+ c.exclude.concat(auto_runner.exclude) if auto_runner.exclude
95
+ c.base = auto_runner.base
96
+ $:.push(auto_runner.base) if auto_runner.base
97
+ c.collect(*(auto_runner.to_run.empty? ? ['.'] : auto_runner.to_run))
98
+ end
99
+
100
+ attr_reader :suite, :runner_options
101
+ attr_accessor :filters, :to_run, :pattern, :exclude, :base, :workdir
102
+ attr_accessor :color_scheme
103
+ attr_writer :runner, :collector
104
+
105
+ def initialize(standalone)
106
+ Unit.run = true
107
+ @standalone = standalone
108
+ @runner = default_runner
109
+ @collector = default_collector
110
+ @filters = []
111
+ @to_run = []
112
+ @color_scheme = ColorScheme.default
113
+ @runner_options = {}
114
+ @default_arguments = []
115
+ @workdir = nil
116
+ config_file = "test-unit.yml"
117
+ if File.exist?(config_file)
118
+ load_config(config_file)
119
+ else
120
+ load_global_config
121
+ end
122
+ yield(self) if block_given?
123
+ end
124
+
125
+ def process_args(args = ARGV)
126
+ begin
127
+ args.unshift(*@default_arguments)
128
+ options.order!(args) {|arg| @to_run << arg}
129
+ rescue OptionParser::ParseError => e
130
+ puts e
131
+ puts options
132
+ exit(false)
133
+ end
134
+ not @to_run.empty?
135
+ end
136
+
137
+ def options
138
+ @options ||= OptionParser.new do |o|
139
+ o.banner = "Test::Unit automatic runner."
140
+ o.banner << "\nUsage: #{$0} [options] [-- untouched arguments]"
141
+
142
+ o.on
143
+ o.on('-r', '--runner=RUNNER', RUNNERS,
144
+ "Use the given RUNNER.",
145
+ "(" + keyword_display(RUNNERS) + ")") do |r|
146
+ @runner = r
147
+ end
148
+
149
+ if (@standalone)
150
+ o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
151
+ @base = b
152
+ end
153
+
154
+ o.on('-w', '--workdir=DIR', "Working directory to run tests.") do |w|
155
+ @workdir = w
156
+ end
157
+
158
+ o.on('-a', '--add=TORUN', Array,
159
+ "Add TORUN to the list of things to run;",
160
+ "can be a file or a directory.") do |a|
161
+ @to_run.concat(a)
162
+ end
163
+
164
+ @pattern = []
165
+ o.on('-p', '--pattern=PATTERN', Regexp,
166
+ "Match files to collect against PATTERN.") do |e|
167
+ @pattern << e
168
+ end
169
+
170
+ @exclude = []
171
+ o.on('-x', '--exclude=PATTERN', Regexp,
172
+ "Ignore files to collect against PATTERN.") do |e|
173
+ @exclude << e
174
+ end
175
+ end
176
+
177
+ o.on('-n', '--name=NAME', String,
178
+ "Runs tests matching NAME.",
179
+ "(patterns may be used).") do |n|
180
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
181
+ case n
182
+ when Regexp
183
+ @filters << proc{|t| n =~ t.method_name ? true : false}
184
+ else
185
+ @filters << proc{|t| n == t.method_name}
186
+ end
187
+ end
188
+
189
+ o.on('-t', '--testcase=TESTCASE', String,
190
+ "Runs tests in TestCases matching TESTCASE.",
191
+ "(patterns may be used).") do |n|
192
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
193
+ case n
194
+ when Regexp
195
+ @filters << proc{|t| n =~ t.class.name ? true : false}
196
+ else
197
+ @filters << proc{|t| n == t.class.name}
198
+ end
199
+ end
200
+
201
+ priority_filter = Proc.new do |test|
202
+ if @filters == [priority_filter]
203
+ Priority::Checker.new(test).need_to_run?
204
+ else
205
+ nil
206
+ end
207
+ end
208
+ o.on("--[no-]priority-mode",
209
+ "Runs some tests based on their priority.") do |priority_mode|
210
+ if priority_mode
211
+ Priority.enable
212
+ @filters |= [priority_filter]
213
+ else
214
+ Priority.disable
215
+ @filters -= [priority_filter]
216
+ end
217
+ end
218
+
219
+ o.on("--default-priority=PRIORITY",
220
+ Priority.available_values,
221
+ "Uses PRIORITY as default priority",
222
+ "(#{keyword_display(Priority.available_values)})") do |priority|
223
+ Priority.default = priority
224
+ end
225
+
226
+ o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
227
+ "Appends directory list to $LOAD_PATH.") do |dirs|
228
+ $LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
229
+ end
230
+
231
+ color_schemes = ColorScheme.all
232
+ o.on("--color-scheme=SCHEME", color_schemes,
233
+ "Use SCHEME as color scheme.",
234
+ "(#{keyword_display(color_schemes)})") do |scheme|
235
+ @color_scheme = scheme
236
+ end
237
+
238
+ o.on("--config=FILE",
239
+ "Use YAML fomat FILE content as configuration file.") do |file|
240
+ load_config(file)
241
+ end
242
+
243
+ o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
244
+ "Run tests in a test case in ORDER order.",
245
+ "(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
246
+ TestCase.test_order = order
247
+ end
248
+
249
+ ADDITIONAL_OPTIONS.each do |option_builder|
250
+ option_builder.call(self, o)
251
+ end
252
+
253
+ o.on('--',
254
+ "Stop processing options so that the",
255
+ "remaining options will be passed to the",
256
+ "test."){o.terminate}
257
+
258
+ o.on('-h', '--help', 'Display this help.'){puts o; exit}
259
+
260
+ o.on_tail
261
+ o.on_tail('Deprecated options:')
262
+
263
+ o.on_tail('--console', 'Console runner (use --runner).') do
264
+ warn("Deprecated option (--console).")
265
+ @runner = self.class.runner(:console)
266
+ end
267
+
268
+ if RUNNERS[:fox]
269
+ o.on_tail('--fox', 'Fox runner (use --runner).') do
270
+ warn("Deprecated option (--fox).")
271
+ @runner = self.class.runner(:fox)
272
+ end
273
+ end
274
+
275
+ o.on_tail
276
+ end
277
+ end
278
+
279
+ def keyword_display(keywords)
280
+ keywords = keywords.collect do |keyword, _|
281
+ keyword.to_s
282
+ end.uniq.sort
283
+
284
+ i = 0
285
+ keywords.collect do |keyword|
286
+ if (i > 0 and keyword[0] == keywords[i - 1][0]) or
287
+ ((i < keywords.size - 1) and (keyword[0] == keywords[i + 1][0]))
288
+ n = 2
289
+ else
290
+ n = 1
291
+ end
292
+ i += 1
293
+ keyword.sub(/^(.{#{n}})([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
294
+ end.join(", ")
295
+ end
296
+
297
+ def run
298
+ suite = @collector[self]
299
+ return false if suite.nil?
300
+ runner = @runner[self]
301
+ return false if runner.nil?
302
+ @runner_options[:color_scheme] ||= @color_scheme
303
+ Dir.chdir(@workdir) if @workdir
304
+ runner.run(suite, @runner_options).passed?
305
+ end
306
+
307
+ def load_config(file)
308
+ require 'yaml'
309
+ config = YAML.load(File.read(file))
310
+ runner_name = config["runner"]
311
+ @runner = self.class.runner(runner_name) || @runner
312
+ @collector = self.class.collector(config["collector"]) || @collector
313
+ (config["color_schemes"] || {}).each do |name, options|
314
+ ColorScheme[name] = options
315
+ end
316
+ runner_options = {}
317
+ (config["#{runner_name}_options"] || {}).each do |key, value|
318
+ key = key.to_sym
319
+ value = ColorScheme[value] if key == :color_scheme
320
+ if key == :arguments
321
+ @default_arguments.concat(value.split)
322
+ else
323
+ runner_options[key.to_sym] = value
324
+ end
325
+ end
326
+ @runner_options = @runner_options.merge(runner_options)
327
+ end
328
+
329
+ private
330
+ def default_runner
331
+ runner = self.class.default_runner
332
+ if ENV["EMACS"] == "t"
333
+ runner ||= self.class.runner(:emacs)
334
+ else
335
+ runner ||= self.class.runner(:console)
336
+ end
337
+ runner
338
+ end
339
+
340
+ def default_collector
341
+ self.class.collector(@standalone ? :load : :descendant)
342
+ end
343
+
344
+ def global_config_file
345
+ File.expand_path("~/.test-unit.xml")
346
+ rescue ArgumentError
347
+ nil
348
+ end
349
+
350
+ def load_global_config
351
+ file = global_config_file
352
+ load_config(file) if file and File.exist?(file)
353
+ end
354
+ end
355
+ end
356
+ end
357
+
358
+ require 'test/unit/runner/console'
359
+ require 'test/unit/runner/emacs'
360
+ require 'test/unit/runner/tap'