glib2 0.20.0 → 0.90.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. data/ChangeLog +92 -0
  2. data/README +22 -10
  3. data/Rakefile +54 -72
  4. data/ext/glib2/depend +10 -0
  5. data/ext/glib2/extconf.rb +61 -0
  6. data/ext/glib2/glib2.def +89 -0
  7. data/{src → ext/glib2}/rbgcompat.h +0 -0
  8. data/{src → ext/glib2}/rbglib.c +17 -7
  9. data/{src → ext/glib2}/rbglib.h +2 -2
  10. data/{src → ext/glib2}/rbglib_bookmarkfile.c +0 -0
  11. data/{src → ext/glib2}/rbglib_completion.c +0 -0
  12. data/{src → ext/glib2}/rbglib_convert.c +0 -0
  13. data/{src → ext/glib2}/rbglib_error.c +0 -0
  14. data/{src → ext/glib2}/rbglib_fileutils.c +0 -0
  15. data/{src → ext/glib2}/rbglib_i18n.c +0 -0
  16. data/{src → ext/glib2}/rbglib_int64.c +0 -0
  17. data/{src → ext/glib2}/rbglib_iochannel.c +0 -0
  18. data/{src → ext/glib2}/rbglib_keyfile.c +0 -0
  19. data/{src → ext/glib2}/rbglib_maincontext.c +1 -3
  20. data/{src → ext/glib2}/rbglib_mainloop.c +0 -0
  21. data/{src → ext/glib2}/rbglib_messages.c +0 -0
  22. data/{src → ext/glib2}/rbglib_pollfd.c +0 -0
  23. data/{src → ext/glib2}/rbglib_shell.c +0 -0
  24. data/{src → ext/glib2}/rbglib_source.c +0 -0
  25. data/{src → ext/glib2}/rbglib_spawn.c +0 -0
  26. data/{src → ext/glib2}/rbglib_threads.c +0 -0
  27. data/{src → ext/glib2}/rbglib_timer.c +0 -0
  28. data/{src → ext/glib2}/rbglib_unicode.c +0 -0
  29. data/{src → ext/glib2}/rbglib_utils.c +0 -0
  30. data/{src → ext/glib2}/rbglib_win32.c +0 -0
  31. data/{src → ext/glib2}/rbgobj_boxed.c +0 -0
  32. data/{src → ext/glib2}/rbgobj_closure.c +0 -0
  33. data/{src → ext/glib2}/rbgobj_convert.c +0 -0
  34. data/{src → ext/glib2}/rbgobj_enums.c +0 -0
  35. data/{src → ext/glib2}/rbgobj_fundamental.c +0 -0
  36. data/{src → ext/glib2}/rbgobj_object.c +0 -0
  37. data/{src → ext/glib2}/rbgobj_param.c +0 -0
  38. data/{src → ext/glib2}/rbgobj_paramspecs.c +0 -0
  39. data/{src → ext/glib2}/rbgobj_signal.c +0 -0
  40. data/{src → ext/glib2}/rbgobj_strv.c +0 -0
  41. data/{src → ext/glib2}/rbgobj_type.c +0 -0
  42. data/{src → ext/glib2}/rbgobj_typeinstance.c +0 -0
  43. data/{src → ext/glib2}/rbgobj_typeinterface.c +0 -0
  44. data/{src → ext/glib2}/rbgobj_typemodule.c +0 -0
  45. data/{src → ext/glib2}/rbgobj_typeplugin.c +0 -0
  46. data/{src → ext/glib2}/rbgobj_value.c +0 -0
  47. data/{src → ext/glib2}/rbgobj_valuearray.c +0 -0
  48. data/{src → ext/glib2}/rbgobj_valuetypes.c +0 -0
  49. data/{src → ext/glib2}/rbgobject.c +0 -0
  50. data/{src → ext/glib2}/rbgobject.h +0 -0
  51. data/{src → ext/glib2}/rbgprivate.h +0 -0
  52. data/ext/glib2/rbgutil.c +316 -0
  53. data/{src → ext/glib2}/rbgutil.h +9 -9
  54. data/{src → ext/glib2}/rbgutil_callback.c +0 -0
  55. data/extconf.rb +48 -60
  56. data/{src/lib → lib}/glib-mkenums.rb +2 -2
  57. data/{src/lib → lib}/glib2.rb +28 -9
  58. data/lib/gnome2-win32-binary-downloader.rb +92 -0
  59. data/{src/lib → lib}/mkmf-gnome2.rb +76 -89
  60. data/test-unit/COPYING +56 -0
  61. data/test-unit/GPL +340 -0
  62. data/test-unit/History.txt +232 -0
  63. data/test-unit/Manifest.txt +110 -0
  64. data/test-unit/PSFL +271 -0
  65. data/test-unit/README.txt +75 -0
  66. data/test-unit/Rakefile +53 -0
  67. data/test-unit/TODO +5 -0
  68. data/test-unit/bin/testrb +5 -0
  69. data/test-unit/html/bar.png +0 -0
  70. data/test-unit/html/bar.svg +153 -0
  71. data/test-unit/html/developer.png +0 -0
  72. data/test-unit/html/developer.svg +469 -0
  73. data/test-unit/html/famfamfam-logo.png +0 -0
  74. data/test-unit/html/favicon.ico +0 -0
  75. data/test-unit/html/favicon.png +0 -0
  76. data/test-unit/html/favicon.svg +82 -0
  77. data/test-unit/html/heading-mark.png +0 -0
  78. data/test-unit/html/heading-mark.svg +393 -0
  79. data/test-unit/html/index.html +247 -0
  80. data/test-unit/html/index.html.ja +270 -0
  81. data/test-unit/html/install.png +0 -0
  82. data/test-unit/html/install.svg +636 -0
  83. data/test-unit/html/jp.png +0 -0
  84. data/test-unit/html/kinotan-failure.png +0 -0
  85. data/test-unit/html/kinotan-pass.png +0 -0
  86. data/test-unit/html/logo.png +0 -0
  87. data/test-unit/html/logo.svg +483 -0
  88. data/test-unit/html/reference.png +0 -0
  89. data/test-unit/html/rubyforge.png +0 -0
  90. data/test-unit/html/tango-logo.png +0 -0
  91. data/test-unit/html/test-unit.css +339 -0
  92. data/test-unit/html/tutorial.png +0 -0
  93. data/test-unit/html/tutorial.svg +559 -0
  94. data/test-unit/html/us.png +0 -0
  95. data/test-unit/images/color-diff.png +0 -0
  96. data/test-unit/lib/test/unit.rb +328 -0
  97. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  98. data/test-unit/lib/test/unit/assertions.rb +1334 -0
  99. data/test-unit/lib/test/unit/attribute.rb +125 -0
  100. data/test-unit/lib/test/unit/autorunner.rb +363 -0
  101. data/test-unit/lib/test/unit/collector.rb +36 -0
  102. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  103. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  104. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  105. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  106. data/test-unit/lib/test/unit/color-scheme.rb +106 -0
  107. data/test-unit/lib/test/unit/color.rb +96 -0
  108. data/test-unit/lib/test/unit/diff.rb +740 -0
  109. data/test-unit/lib/test/unit/error.rb +130 -0
  110. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  111. data/test-unit/lib/test/unit/failure.rb +136 -0
  112. data/test-unit/lib/test/unit/fixture.rb +176 -0
  113. data/test-unit/lib/test/unit/notification.rb +129 -0
  114. data/test-unit/lib/test/unit/omission.rb +191 -0
  115. data/test-unit/lib/test/unit/pending.rb +150 -0
  116. data/test-unit/lib/test/unit/priority.rb +180 -0
  117. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  118. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  119. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  120. data/test-unit/lib/test/unit/testcase.rb +483 -0
  121. data/test-unit/lib/test/unit/testresult.rb +121 -0
  122. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  123. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  124. data/test-unit/lib/test/unit/ui/console/testrunner.rb +430 -0
  125. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  126. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +82 -0
  127. data/test-unit/lib/test/unit/ui/testrunner.rb +53 -0
  128. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  129. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  130. data/test-unit/lib/test/unit/util/backtracefilter.rb +42 -0
  131. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  132. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  133. data/test-unit/lib/test/unit/util/output.rb +31 -0
  134. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  135. data/test-unit/lib/test/unit/version.rb +7 -0
  136. data/test-unit/sample/adder.rb +13 -0
  137. data/test-unit/sample/subtracter.rb +12 -0
  138. data/test-unit/sample/test_adder.rb +20 -0
  139. data/test-unit/sample/test_subtracter.rb +20 -0
  140. data/test-unit/sample/test_user.rb +23 -0
  141. data/test-unit/test/collector/test-descendant.rb +133 -0
  142. data/test-unit/test/collector/test-load.rb +442 -0
  143. data/test-unit/test/collector/test_dir.rb +406 -0
  144. data/test-unit/test/collector/test_objectspace.rb +100 -0
  145. data/test-unit/test/run-test.rb +15 -0
  146. data/test-unit/test/test-attribute.rb +86 -0
  147. data/test-unit/test/test-color-scheme.rb +69 -0
  148. data/test-unit/test/test-color.rb +47 -0
  149. data/test-unit/test/test-diff.rb +518 -0
  150. data/test-unit/test/test-emacs-runner.rb +60 -0
  151. data/test-unit/test/test-fixture.rb +287 -0
  152. data/test-unit/test/test-notification.rb +33 -0
  153. data/test-unit/test/test-omission.rb +81 -0
  154. data/test-unit/test/test-pending.rb +70 -0
  155. data/test-unit/test/test-priority.rb +119 -0
  156. data/test-unit/test/test-testcase.rb +544 -0
  157. data/test-unit/test/test_assertions.rb +1197 -0
  158. data/test-unit/test/test_error.rb +26 -0
  159. data/test-unit/test/test_failure.rb +33 -0
  160. data/test-unit/test/test_testresult.rb +113 -0
  161. data/test-unit/test/test_testsuite.rb +129 -0
  162. data/test-unit/test/testunit-test-util.rb +14 -0
  163. data/test-unit/test/ui/test_tap.rb +33 -0
  164. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  165. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  166. data/test-unit/test/util/test-output.rb +11 -0
  167. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  168. data/test-unit/test/util/test_observable.rb +102 -0
  169. data/test-unit/test/util/test_procwrapper.rb +36 -0
  170. data/test/run-test.rb +2 -6
  171. metadata +197 -100
  172. data/src/glib-enum-types.c +0 -1032
  173. data/src/glib-enum-types.h +0 -140
  174. data/src/lib/pkg-config.rb +0 -137
  175. data/src/rbgutil.c +0 -222
@@ -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,363 @@
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, :listeners
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
+ @listeners = []
117
+ config_file = "test-unit.yml"
118
+ if File.exist?(config_file)
119
+ load_config(config_file)
120
+ else
121
+ load_global_config
122
+ end
123
+ yield(self) if block_given?
124
+ end
125
+
126
+ def process_args(args = ARGV)
127
+ begin
128
+ args.unshift(*@default_arguments)
129
+ options.order!(args) {|arg| @to_run << arg}
130
+ rescue OptionParser::ParseError => e
131
+ puts e
132
+ puts options
133
+ exit(false)
134
+ end
135
+ not @to_run.empty?
136
+ end
137
+
138
+ def options
139
+ @options ||= OptionParser.new do |o|
140
+ o.banner = "Test::Unit automatic runner."
141
+ o.banner << "\nUsage: #{$0} [options] [-- untouched arguments]"
142
+
143
+ o.on
144
+ o.on('-r', '--runner=RUNNER', RUNNERS,
145
+ "Use the given RUNNER.",
146
+ "(" + keyword_display(RUNNERS) + ")") do |r|
147
+ @runner = r
148
+ end
149
+
150
+ if (@standalone)
151
+ o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
152
+ @base = b
153
+ end
154
+
155
+ o.on('-w', '--workdir=DIR', "Working directory to run tests.") do |w|
156
+ @workdir = w
157
+ end
158
+
159
+ o.on('-a', '--add=TORUN', Array,
160
+ "Add TORUN to the list of things to run;",
161
+ "can be a file or a directory.") do |a|
162
+ @to_run.concat(a)
163
+ end
164
+
165
+ @pattern = []
166
+ o.on('-p', '--pattern=PATTERN', Regexp,
167
+ "Match files to collect against PATTERN.") do |e|
168
+ @pattern << e
169
+ end
170
+
171
+ @exclude = []
172
+ o.on('-x', '--exclude=PATTERN', Regexp,
173
+ "Ignore files to collect against PATTERN.") do |e|
174
+ @exclude << e
175
+ end
176
+ end
177
+
178
+ o.on('-n', '--name=NAME', String,
179
+ "Runs tests matching NAME.",
180
+ "(patterns may be used).") do |n|
181
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
182
+ case n
183
+ when Regexp
184
+ @filters << proc{|t| n =~ t.method_name ? true : false}
185
+ else
186
+ @filters << proc{|t| n == t.method_name}
187
+ end
188
+ end
189
+
190
+ o.on('-t', '--testcase=TESTCASE', String,
191
+ "Runs tests in TestCases matching TESTCASE.",
192
+ "(patterns may be used).") do |n|
193
+ n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
194
+ case n
195
+ when Regexp
196
+ @filters << proc{|t| n =~ t.class.name ? true : false}
197
+ else
198
+ @filters << proc{|t| n == t.class.name}
199
+ end
200
+ end
201
+
202
+ priority_filter = Proc.new do |test|
203
+ if @filters == [priority_filter]
204
+ Priority::Checker.new(test).need_to_run?
205
+ else
206
+ nil
207
+ end
208
+ end
209
+ o.on("--[no-]priority-mode",
210
+ "Runs some tests based on their priority.") do |priority_mode|
211
+ if priority_mode
212
+ Priority.enable
213
+ @filters |= [priority_filter]
214
+ else
215
+ Priority.disable
216
+ @filters -= [priority_filter]
217
+ end
218
+ end
219
+
220
+ o.on("--default-priority=PRIORITY",
221
+ Priority.available_values,
222
+ "Uses PRIORITY as default priority",
223
+ "(#{keyword_display(Priority.available_values)})") do |priority|
224
+ Priority.default = priority
225
+ end
226
+
227
+ o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
228
+ "Appends directory list to $LOAD_PATH.") do |dirs|
229
+ $LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
230
+ end
231
+
232
+ color_schemes = ColorScheme.all
233
+ o.on("--color-scheme=SCHEME", color_schemes,
234
+ "Use SCHEME as color scheme.",
235
+ "(#{keyword_display(color_schemes)})") do |scheme|
236
+ @color_scheme = scheme
237
+ end
238
+
239
+ o.on("--config=FILE",
240
+ "Use YAML fomat FILE content as configuration file.") do |file|
241
+ load_config(file)
242
+ end
243
+
244
+ o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
245
+ "Run tests in a test case in ORDER order.",
246
+ "(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
247
+ TestCase.test_order = order
248
+ end
249
+
250
+ ADDITIONAL_OPTIONS.each do |option_builder|
251
+ option_builder.call(self, o)
252
+ end
253
+
254
+ o.on('--',
255
+ "Stop processing options so that the",
256
+ "remaining options will be passed to the",
257
+ "test."){o.terminate}
258
+
259
+ o.on('-h', '--help', 'Display this help.'){puts o; exit}
260
+
261
+ o.on_tail
262
+ o.on_tail('Deprecated options:')
263
+
264
+ o.on_tail('--console', 'Console runner (use --runner).') do
265
+ warn("Deprecated option (--console).")
266
+ @runner = self.class.runner(:console)
267
+ end
268
+
269
+ if RUNNERS[:fox]
270
+ o.on_tail('--fox', 'Fox runner (use --runner).') do
271
+ warn("Deprecated option (--fox).")
272
+ @runner = self.class.runner(:fox)
273
+ end
274
+ end
275
+
276
+ o.on_tail
277
+ end
278
+ end
279
+
280
+ def keyword_display(keywords)
281
+ keywords = keywords.collect do |keyword, _|
282
+ keyword.to_s
283
+ end.uniq.sort
284
+
285
+ i = 0
286
+ keywords.collect do |keyword|
287
+ if (i > 0 and keyword[0] == keywords[i - 1][0]) or
288
+ ((i < keywords.size - 1) and (keyword[0] == keywords[i + 1][0]))
289
+ n = 2
290
+ else
291
+ n = 1
292
+ end
293
+ i += 1
294
+ keyword.sub(/^(.{#{n}})([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
295
+ end.join(", ")
296
+ end
297
+
298
+ def run
299
+ suite = @collector[self]
300
+ return false if suite.nil?
301
+ runner = @runner[self]
302
+ return false if runner.nil?
303
+ @runner_options[:color_scheme] ||= @color_scheme
304
+ @runner_options[:listeners] ||= []
305
+ @runner_options[:listeners].concat(@listeners)
306
+ Dir.chdir(@workdir) if @workdir
307
+ runner.run(suite, @runner_options).passed?
308
+ end
309
+
310
+ def load_config(file)
311
+ require 'yaml'
312
+ config = YAML.load(File.read(file))
313
+ runner_name = config["runner"]
314
+ @runner = self.class.runner(runner_name) || @runner
315
+ @collector = self.class.collector(config["collector"]) || @collector
316
+ (config["color_schemes"] || {}).each do |name, options|
317
+ ColorScheme[name] = options
318
+ end
319
+ runner_options = {}
320
+ (config["#{runner_name}_options"] || {}).each do |key, value|
321
+ key = key.to_sym
322
+ value = ColorScheme[value] if key == :color_scheme
323
+ if key == :arguments
324
+ @default_arguments.concat(value.split)
325
+ else
326
+ runner_options[key.to_sym] = value
327
+ end
328
+ end
329
+ @runner_options = @runner_options.merge(runner_options)
330
+ end
331
+
332
+ private
333
+ def default_runner
334
+ runner = self.class.default_runner
335
+ if ENV["EMACS"] == "t"
336
+ runner ||= self.class.runner(:emacs)
337
+ else
338
+ runner ||= self.class.runner(:console)
339
+ end
340
+ runner
341
+ end
342
+
343
+ def default_collector
344
+ self.class.collector(@standalone ? :load : :descendant)
345
+ end
346
+
347
+ def global_config_file
348
+ File.expand_path("~/.test-unit.yml")
349
+ rescue ArgumentError
350
+ nil
351
+ end
352
+
353
+ def load_global_config
354
+ file = global_config_file
355
+ load_config(file) if file and File.exist?(file)
356
+ end
357
+ end
358
+ end
359
+ end
360
+
361
+ require 'test/unit/runner/console'
362
+ require 'test/unit/runner/emacs'
363
+ require 'test/unit/runner/tap'