glib2 0.90.7 → 0.90.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/ChangeLog +68 -0
  2. data/ext/glib2/rbglib.c +51 -15
  3. data/ext/glib2/rbglib.h +10 -2
  4. data/ext/glib2/rbglib_bookmarkfile.c +37 -74
  5. data/ext/glib2/rbglib_completion.c +8 -16
  6. data/ext/glib2/rbglib_convert.c +8 -18
  7. data/ext/glib2/rbglib_error.c +2 -8
  8. data/ext/glib2/rbglib_i18n.c +1 -2
  9. data/ext/glib2/rbglib_iochannel.c +81 -127
  10. data/ext/glib2/rbglib_keyfile.c +38 -86
  11. data/ext/glib2/rbglib_maincontext.c +29 -64
  12. data/ext/glib2/rbglib_mainloop.c +4 -8
  13. data/ext/glib2/rbglib_messages.c +7 -17
  14. data/ext/glib2/rbglib_pollfd.c +7 -14
  15. data/ext/glib2/rbglib_shell.c +3 -6
  16. data/ext/glib2/rbglib_source.c +14 -28
  17. data/ext/glib2/rbglib_spawn.c +7 -14
  18. data/ext/glib2/rbglib_threads.c +2 -4
  19. data/ext/glib2/rbglib_timer.c +7 -14
  20. data/ext/glib2/rbglib_unicode.c +45 -16
  21. data/ext/glib2/rbglib_utils.c +25 -50
  22. data/ext/glib2/rbglib_win32.c +10 -17
  23. data/ext/glib2/rbgobj_boxed.c +9 -21
  24. data/ext/glib2/rbgobj_closure.c +5 -11
  25. data/ext/glib2/rbgobj_enums.c +1 -2
  26. data/ext/glib2/rbgobj_object.c +23 -59
  27. data/ext/glib2/rbgobj_param.c +7 -15
  28. data/ext/glib2/rbgobj_signal.c +25 -65
  29. data/ext/glib2/rbgobj_type.c +36 -81
  30. data/ext/glib2/rbgobj_typeinstance.c +3 -6
  31. data/ext/glib2/rbgobj_typeinterface.c +3 -6
  32. data/ext/glib2/rbgobj_typemodule.c +4 -8
  33. data/ext/glib2/rbgobj_typeplugin.c +2 -4
  34. data/ext/glib2/rbgobj_valuetypes.c +7 -15
  35. data/ext/glib2/rbgobject.c +8 -18
  36. data/ext/glib2/rbgobject.h +3 -0
  37. data/ext/glib2/rbgprivate.h +0 -1
  38. data/ext/glib2/rbgutil.c +3 -6
  39. data/lib/gnome2-raketask.rb +1 -0
  40. data/lib/mkmf-gnome2.rb +12 -9
  41. data/test-unit/History.txt +43 -1
  42. data/test-unit/Manifest.txt +1 -1
  43. data/test-unit/html/index.html +62 -24
  44. data/test-unit/html/index.html.ja +54 -25
  45. data/test-unit/html/test-unit.css +3 -3
  46. data/test-unit/lib/test/unit/assertions.rb +489 -36
  47. data/test-unit/lib/test/unit/autorunner.rb +40 -0
  48. data/test-unit/lib/test/unit/collector.rb +6 -4
  49. data/test-unit/lib/test/unit/collector/load.rb +48 -5
  50. data/test-unit/lib/test/unit/collector/xml.rb +250 -0
  51. data/test-unit/lib/test/unit/error.rb +4 -3
  52. data/test-unit/lib/test/unit/fixture.rb +12 -3
  53. data/test-unit/lib/test/unit/runner/xml.rb +15 -0
  54. data/test-unit/lib/test/unit/testcase.rb +48 -16
  55. data/test-unit/lib/test/unit/testresult.rb +6 -2
  56. data/test-unit/lib/test/unit/testsuite.rb +24 -2
  57. data/test-unit/lib/test/unit/ui/console/testrunner.rb +65 -28
  58. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +11 -2
  59. data/test-unit/lib/test/unit/ui/xml/testrunner.rb +224 -0
  60. data/test-unit/lib/test/unit/version.rb +1 -1
  61. data/test-unit/test/run-test.rb +7 -0
  62. data/test-unit/test/{test_assertions.rb → test-assertions.rb} +708 -77
  63. data/test-unit/test/test-fixture.rb +37 -0
  64. data/test-unit/test/test-testcase.rb +24 -7
  65. data/test-unit/test/test_testsuite.rb +19 -11
  66. data/test/test_iochannel.rb +9 -9
  67. data/test/test_unicode.rb +44 -31
  68. metadata +8 -9
  69. data/ext/glib2/Makefile +0 -169
  70. data/ext/glib2/glib-enum-types.c +0 -1065
  71. data/ext/glib2/glib-enum-types.h +0 -144
  72. data/ext/glib2/ruby-glib2.pc +0 -3
@@ -154,13 +154,22 @@ module Test
154
154
  end
155
155
 
156
156
  private
157
- def run_fixture(fixture)
157
+ def run_fixture(fixture, options={})
158
158
  [
159
159
  self.class.send("before_#{fixture}_methods"),
160
160
  fixture,
161
161
  self.class.send("after_#{fixture}_methods")
162
162
  ].flatten.each do |method_name|
163
- send(method_name) if respond_to?(method_name, true)
163
+ next unless respond_to?(method_name, true)
164
+ if options[:handle_exception]
165
+ begin
166
+ send(method_name)
167
+ rescue Exception
168
+ raise unless handle_exception($!)
169
+ end
170
+ else
171
+ send(method_name)
172
+ end
164
173
  end
165
174
  end
166
175
 
@@ -169,7 +178,7 @@ module Test
169
178
  end
170
179
 
171
180
  def run_teardown
172
- run_fixture(:teardown)
181
+ run_fixture(:teardown, :handle_exception => true)
173
182
  end
174
183
  end
175
184
  end
@@ -0,0 +1,15 @@
1
+ module Test
2
+ module Unit
3
+ AutoRunner.register_runner(:xml) do |auto_runner|
4
+ require 'test/unit/ui/xml/testrunner'
5
+ Test::Unit::UI::XML::TestRunner
6
+ end
7
+
8
+ AutoRunner.setup_option do |auto_runner, opts|
9
+ opts.on("--output-file-descriptor=FD", Integer,
10
+ "Outputs to file descriptor FD") do |fd|
11
+ auto_runner.runner_options[:output_file_descriptor] = fd
12
+ end
13
+ end
14
+ end
15
+ end
@@ -87,6 +87,8 @@ module Test
87
87
 
88
88
  STARTED = name + "::STARTED" # :nodoc:
89
89
  FINISHED = name + "::FINISHED" # :nodoc:
90
+ STARTED_OBJECT = name + "::STARTED::OBJECT" # :nodoc:
91
+ FINISHED_OBJECT = name + "::FINISHED::OBJECT" # :nodoc:
90
92
 
91
93
  DESCENDANTS = [] # :nodoc:
92
94
  AVAILABLE_ORDERS = [:alphabetic, :random, :defined] # :nodoc:
@@ -219,9 +221,11 @@ module Test
219
221
  @@test_orders[self] = order
220
222
  end
221
223
 
222
- # Defines a test in declarative syntax.
224
+ # Defines a test in declarative syntax or marks
225
+ # following method as a test method.
223
226
  #
224
- # The following two test definitions are the same:
227
+ # In declarative syntax usage, the following two
228
+ # test definitions are the almost same:
225
229
  #
226
230
  # description "register user"
227
231
  # def test_register_user
@@ -231,11 +235,33 @@ module Test
231
235
  # test "register user" do
232
236
  # ...
233
237
  # end
234
- def test(test_description, &block)
235
- normalized_description = test_description.gsub(/[^a-zA-Z\d_]+/, '_')
236
- method_name = "test_#{normalized_description}".to_sym
237
- define_method(method_name, &block)
238
- description(test_description, method_name)
238
+ #
239
+ # In test method mark usage, the "my_test_method" is
240
+ # treated as a test method:
241
+ #
242
+ # test
243
+ # def my_test_method
244
+ # assert_equal("call me", ...)
245
+ # end
246
+ def test(*test_description_or_targets, &block)
247
+ if block_given?
248
+ test_description = test_description_or_targets.first
249
+ if test_description.nil?
250
+ raise ArgumentError, "test description is missing"
251
+ end
252
+ n_arguments = test_description_or_targets.size
253
+ if n_arguments > 1
254
+ message = "wrong number of arguments (#{n_arguments} for 1)"
255
+ raise ArgumentError, message
256
+ end
257
+ method_name = test_description
258
+ define_method(method_name, &block)
259
+ description(test_description, method_name)
260
+ attribute(:test, true, {}, method_name)
261
+ else
262
+ targets = test_description_or_targets
263
+ attribute(:test, true, {}, *targets)
264
+ end
239
265
  end
240
266
 
241
267
  # Describes a test.
@@ -259,7 +285,7 @@ module Test
259
285
  name.to_s
260
286
  end
261
287
  test_names = method_names.find_all do |method_name|
262
- method_name =~ /^test./
288
+ method_name =~ /^test./ or get_attribute(method_name, :test)
263
289
  end
264
290
  send("sort_test_names_in_#{test_order}_order", test_names)
265
291
  end
@@ -291,7 +317,7 @@ module Test
291
317
  # :startdoc:
292
318
  end
293
319
 
294
- attr_reader :method_name
320
+ attr_reader :method_name, :start_time, :elapsed_time
295
321
 
296
322
  # Creates a new instance of the fixture for running the
297
323
  # test represented by test_method_name.
@@ -306,6 +332,8 @@ module Test
306
332
  @method_name = test_method_name
307
333
  @test_passed = true
308
334
  @interrupted = false
335
+ @start_time = nil
336
+ @elapsed_time = nil
309
337
  end
310
338
 
311
339
  # Runs the individual test method represented by this
@@ -314,7 +342,9 @@ module Test
314
342
  def run(result)
315
343
  begin
316
344
  @_result = result
345
+ @start_time = Time.now
317
346
  yield(STARTED, name)
347
+ yield(STARTED_OBJECT, self)
318
348
  begin
319
349
  run_setup
320
350
  run_test
@@ -328,8 +358,10 @@ module Test
328
358
  raise unless handle_exception($!)
329
359
  end
330
360
  end
361
+ @elapsed_time = Time.now - @start_time
331
362
  result.add_run
332
363
  yield(FINISHED, name)
364
+ yield(FINISHED_OBJECT, self)
333
365
  ensure
334
366
  # @_result = nil # For test-spec's after_all :<
335
367
  end
@@ -440,6 +472,13 @@ module Test
440
472
  @interrupted
441
473
  end
442
474
 
475
+ # Returns whether this individual test passed or
476
+ # not. Primarily for use in teardown so that artifacts
477
+ # can be left behind if the test fails.
478
+ def passed?
479
+ @test_passed
480
+ end
481
+
443
482
  private
444
483
  def current_result
445
484
  @_result
@@ -460,13 +499,6 @@ module Test
460
499
  false
461
500
  end
462
501
 
463
- # Returns whether this individual test passed or
464
- # not. Primarily for use in teardown so that artifacts
465
- # can be left behind if the test fails.
466
- def passed?
467
- @test_passed
468
- end
469
-
470
502
  def problem_occurred
471
503
  @test_passed = false
472
504
  end
@@ -31,8 +31,10 @@ module Test
31
31
  include TestResultOmissionSupport
32
32
  include TestResultNotificationSupport
33
33
 
34
- CHANGED = "CHANGED"
35
- FAULT = "FAULT"
34
+ FINISHED = name + "::FINISHED"
35
+ CHANGED = name + "::CHANGED"
36
+ PASS_ASSERTION = name + "::PASS_ASSERTION"
37
+ FAULT = name + "::FAULT"
36
38
 
37
39
  attr_reader :run_count, :pass_count, :assertion_count, :faults
38
40
 
@@ -48,6 +50,7 @@ module Test
48
50
  # Records a test run.
49
51
  def add_run
50
52
  @run_count += 1
53
+ notify_listeners(FINISHED, self)
51
54
  notify_changed
52
55
  end
53
56
 
@@ -58,6 +61,7 @@ module Test
58
61
  # Records an individual assertion.
59
62
  def add_assertion
60
63
  @assertion_count += 1
64
+ notify_listeners(PASS_ASSERTION, self)
61
65
  notify_changed
62
66
  end
63
67
 
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # Author:: Nathaniel Talbott.
4
4
  # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
+ # Copyright:: Copyright (c) 2008-2011 Kouhei Sutou. All rights reserved.
5
6
  # License:: Ruby license.
6
7
 
7
8
  require 'test/unit/error'
@@ -17,10 +18,16 @@ module Test
17
18
  # has a suite method as simply providing a way to get a
18
19
  # meaningful TestSuite instance.
19
20
  class TestSuite
20
- attr_reader :name, :tests
21
-
21
+ attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
22
+
23
+ # Test suite that has higher priority is ran prior to
24
+ # test suites that have lower priority.
25
+ attr_accessor :priority
26
+
22
27
  STARTED = name + "::STARTED"
28
+ STARTED_OBJECT = name + "::STARTED::OBJECT"
23
29
  FINISHED = name + "::FINISHED"
30
+ FINISHED_OBJECT = name + "::FINISHED::OBJECT"
24
31
 
25
32
  # Creates a new TestSuite with the given name.
26
33
  def initialize(name="Unnamed TestSuite", test_case=nil)
@@ -28,19 +35,29 @@ module Test
28
35
  @tests = []
29
36
  @test_case = test_case
30
37
  @n_tests = 0
38
+ @priority = 0
39
+ @start_time = nil
40
+ @elapsed_time = nil
41
+ @passed = true
31
42
  end
32
43
 
33
44
  # Runs the tests and/or suites contained in this
34
45
  # TestSuite.
35
46
  def run(result, &progress_block)
47
+ @start_time = Time.now
36
48
  yield(STARTED, name)
49
+ yield(STARTED_OBJECT, self)
37
50
  run_startup(result)
38
51
  while test = @tests.shift
39
52
  @n_tests += test.size
40
53
  test.run(result, &progress_block)
54
+ @passed = false unless test.passed?
41
55
  end
42
56
  run_shutdown(result)
57
+ ensure
58
+ @elapsed_time = Time.now - @start_time
43
59
  yield(FINISHED, name)
60
+ yield(FINISHED_OBJECT, self)
44
61
  end
45
62
 
46
63
  # Adds the test to the suite.
@@ -79,6 +96,10 @@ module Test
79
96
  @tests == other.tests
80
97
  end
81
98
 
99
+ def passed?
100
+ @passed
101
+ end
102
+
82
103
  private
83
104
  def run_startup(result)
84
105
  return if @test_case.nil? or !@test_case.respond_to?(:startup)
@@ -104,6 +125,7 @@ module Test
104
125
  false
105
126
  else
106
127
  result.add_error(Error.new(@test_case.name, exception))
128
+ @passed = false
107
129
  true
108
130
  end
109
131
  end
@@ -56,21 +56,28 @@ module Test
56
56
  end
57
57
 
58
58
  def attach_to_mediator
59
- @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
60
- @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
61
- @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
62
- @mediator.add_listener(TestCase::STARTED, &method(:test_started))
63
- @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
64
- @mediator.add_listener(TestSuite::STARTED, &method(:test_suite_started))
65
- @mediator.add_listener(TestSuite::FINISHED, &method(:test_suite_finished))
59
+ @mediator.add_listener(TestResult::FAULT,
60
+ &method(:add_fault))
61
+ @mediator.add_listener(TestRunnerMediator::STARTED,
62
+ &method(:started))
63
+ @mediator.add_listener(TestRunnerMediator::FINISHED,
64
+ &method(:finished))
65
+ @mediator.add_listener(TestCase::STARTED_OBJECT,
66
+ &method(:test_started))
67
+ @mediator.add_listener(TestCase::FINISHED_OBJECT,
68
+ &method(:test_finished))
69
+ @mediator.add_listener(TestSuite::STARTED_OBJECT,
70
+ &method(:test_suite_started))
71
+ @mediator.add_listener(TestSuite::FINISHED_OBJECT,
72
+ &method(:test_suite_finished))
66
73
  end
67
-
74
+
68
75
  def add_fault(fault)
69
76
  @faults << fault
70
77
  output_progress(fault.single_character_display, fault_color(fault))
71
78
  @already_outputted = true if fault.critical?
72
79
  end
73
-
80
+
74
81
  def started(result)
75
82
  @result = result
76
83
  output_started
@@ -92,6 +99,15 @@ module Test
92
99
  nl
93
100
  output(@result, result_color)
94
101
  output("%g%% passed" % @result.pass_percentage, result_color)
102
+ unless elapsed_time.zero?
103
+ nl
104
+ throuputs =
105
+ [
106
+ "%.2f tests/s" % [@result.run_count / elapsed_time],
107
+ "%.2f assertions/s" % [@result.assertion_count / elapsed_time],
108
+ ]
109
+ output(throuputs.join(", "))
110
+ end
95
111
  end
96
112
 
97
113
  def output_fault(fault)
@@ -133,18 +149,43 @@ module Test
133
149
  end
134
150
 
135
151
  def output_fault_message(fault)
152
+ if fault.expected.respond_to?(:encoding) and
153
+ fault.actual.respond_to?(:encoding) and
154
+ fault.expected.encoding != fault.actual.encoding
155
+ need_encoding = true
156
+ else
157
+ need_encoding = false
158
+ end
136
159
  output(fault.user_message) if fault.user_message
137
160
  output_single("<")
138
161
  output_single(fault.inspected_expected, color("pass"))
139
- output("> expected but was")
162
+ output_single(">")
163
+ if need_encoding
164
+ output_single("(")
165
+ output_single(fault.expected.encoding.name, color("pass"))
166
+ output_single(")")
167
+ end
168
+ output(" expected but was")
140
169
  output_single("<")
141
170
  output_single(fault.inspected_actual, color("failure"))
142
- output(">")
171
+ output_single(">")
172
+ if need_encoding
173
+ output_single("(")
174
+ output_single(fault.actual.encoding.name, color("failure"))
175
+ output_single(")")
176
+ end
177
+ output("")
143
178
  from, to = prepare_for_diff(fault.expected, fault.actual)
144
179
  if from and to
145
- differ = ColorizedReadableDiffer.new(from.split(/\r?\n/),
146
- to.split(/\r?\n/),
147
- self)
180
+ from_lines = from.split(/\r?\n/)
181
+ to_lines = to.split(/\r?\n/)
182
+ if need_encoding
183
+ from_lines << ""
184
+ to_lines << ""
185
+ from_lines << "Encoding: #{fault.expected.encoding.name}"
186
+ to_lines << "Encoding: #{fault.actual.encoding.name}"
187
+ end
188
+ differ = ColorizedReadableDiffer.new(from_lines, to_lines, self)
148
189
  if differ.need_diff?
149
190
  output("")
150
191
  output("diff:")
@@ -157,10 +198,10 @@ module Test
157
198
  fault.long_display
158
199
  end
159
200
 
160
- def test_started(name)
201
+ def test_started(test)
161
202
  return unless output?(VERBOSE)
162
203
 
163
- name = name.sub(/\(.+?\)\z/, '')
204
+ name = test.name.sub(/\(.+?\)\z/, '')
164
205
  right_space = 8 * 2
165
206
  left_space = @progress_row_max - right_space
166
207
  left_space = left_space - indent.size - name.size
@@ -169,7 +210,7 @@ module Test
169
210
  @test_start = Time.now
170
211
  end
171
212
 
172
- def test_finished(name)
213
+ def test_finished(test)
173
214
  unless @already_outputted
174
215
  output_progress(".", color("pass"))
175
216
  end
@@ -180,24 +221,24 @@ module Test
180
221
  output(": (%f)" % (Time.now - @test_start), nil, VERBOSE)
181
222
  end
182
223
 
183
- def test_suite_started(name)
224
+ def test_suite_started(suite)
184
225
  if @top_level
185
226
  @top_level = false
186
227
  return
187
228
  end
188
229
 
189
230
  output_single(indent, nil, VERBOSE)
190
- if /\A[A-Z]/ =~ name
191
- _color = color("case")
192
- else
231
+ if suite.test_case.nil?
193
232
  _color = color("suite")
233
+ else
234
+ _color = color("case")
194
235
  end
195
- output_single(name, _color, VERBOSE)
236
+ output_single(suite.name, _color, VERBOSE)
196
237
  output(": ", nil, VERBOSE)
197
238
  @indent += 2
198
239
  end
199
240
 
200
- def test_suite_finished(name)
241
+ def test_suite_finished(suite)
201
242
  @indent -= 2
202
243
  end
203
244
 
@@ -286,7 +327,7 @@ module Test
286
327
  end
287
328
 
288
329
  def guess_term_width
289
- Integer(ENV["TERM_WIDTH"] || 0)
330
+ Integer(ENV["COLUMNS"] || ENV["TERM_WIDTH"] || 0)
290
331
  rescue ArgumentError
291
332
  0
292
333
  end
@@ -424,7 +465,3 @@ module Test
424
465
  end
425
466
  end
426
467
  end
427
-
428
- if __FILE__ == $0
429
- Test::Unit::UI::Console::TestRunner.start_command_line_test
430
- end