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,31 @@
1
+ module Test
2
+ module Unit
3
+ module Util
4
+ module Output
5
+ ##
6
+ # Returns output for standard output and standard
7
+ # error as string.
8
+ #
9
+ # Example:
10
+ # capture_output do
11
+ # puts("stdout")
12
+ # warn("stderr")
13
+ # end # -> ["stdout\n", "stderr\n"]
14
+ def capture_output
15
+ require 'stringio'
16
+
17
+ output = StringIO.new
18
+ error = StringIO.new
19
+ stdout_save, stderr_save = $stdout, $stderr
20
+ $stdout, $stderr = output, error
21
+ begin
22
+ yield
23
+ [output.string, error.string]
24
+ ensure
25
+ $stdout, $stderr = stdout_save, stderr_save
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+ module Util
10
+
11
+ # Allows the storage of a Proc passed through '&' in a
12
+ # hash.
13
+ #
14
+ # Note: this may be inefficient, since the hash being
15
+ # used is not necessarily very good. In Observable,
16
+ # efficiency is not too important, since the hash is
17
+ # only accessed when adding and removing listeners,
18
+ # not when notifying.
19
+
20
+ class ProcWrapper
21
+
22
+ # Creates a new wrapper for a_proc.
23
+ def initialize(a_proc)
24
+ @a_proc = a_proc
25
+ @hash = a_proc.inspect.sub(/^(#<#{a_proc.class}:)/){''}.sub(/(>)$/){''}.hex
26
+ end
27
+
28
+ def hash
29
+ return @hash
30
+ end
31
+
32
+ def ==(other)
33
+ case(other)
34
+ when ProcWrapper
35
+ return @a_proc == other.to_proc
36
+ else
37
+ return super
38
+ end
39
+ end
40
+ alias :eql? :==
41
+
42
+ def to_proc
43
+ return @a_proc
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,7 @@
1
+
2
+ # HACK: quick and dirty to get integrated into the new project - ryan
3
+ module Test
4
+ module Unit
5
+ VERSION = '2.1.2'
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ class Adder
6
+ def initialize(number)
7
+ @number = number
8
+ end
9
+ def add(number)
10
+ return @number + number
11
+ end
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ class Subtracter
6
+ def initialize(number)
7
+ @number = number
8
+ end
9
+ def subtract(number)
10
+ return @number - number
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'adder'
7
+
8
+ class TestAdder < Test::Unit::TestCase
9
+ def setup
10
+ @adder = Adder.new(5)
11
+ end
12
+
13
+ def test_add
14
+ assert_equal(7, @adder.add(2), "Should have added correctly")
15
+ end
16
+
17
+ def teardown
18
+ @adder = nil
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+ require 'subtracter'
7
+
8
+ class TestSubtracter < Test::Unit::TestCase
9
+ def setup
10
+ @subtracter = Subtracter.new(5)
11
+ end
12
+
13
+ def test_subtract
14
+ assert_equal(3, @subtracter.subtract(2), "Should have subtracted correctly")
15
+ end
16
+
17
+ def teardown
18
+ @subtracter = nil
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ # nested test case example.
2
+ require 'test/unit'
3
+
4
+ class UserTest < Test::Unit::TestCase
5
+ def setup
6
+ @user = "me"
7
+ end
8
+
9
+ def test_full_name
10
+ assert_equal("me", @user)
11
+ end
12
+
13
+ class ProfileTest < UserTest
14
+ setup
15
+ def setup_profile
16
+ @user += ": profile"
17
+ end
18
+
19
+ def test_has_profile
20
+ assert_match(/: profile/, @user)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,133 @@
1
+ require 'test/unit'
2
+ require 'test/unit/collector/descendant'
3
+
4
+ class TestUnitCollectorDescendant < Test::Unit::TestCase
5
+ def setup
6
+ @previous_descendants = Test::Unit::TestCase::DESCENDANTS.dup
7
+ Test::Unit::TestCase::DESCENDANTS.clear
8
+
9
+ @test_case1 = Class.new(Test::Unit::TestCase) do
10
+ def self.name
11
+ "test-case1"
12
+ end
13
+
14
+ def test_1
15
+ end
16
+
17
+ def test_2
18
+ end
19
+ end
20
+
21
+ @test_case2 = Class.new(Test::Unit::TestCase) do
22
+ def self.name
23
+ "test-case2"
24
+ end
25
+
26
+ def test_0
27
+ end
28
+ end
29
+
30
+ @no_test_case = Class.new do
31
+ def self.name
32
+ "no-test-case"
33
+ end
34
+
35
+ def test_4
36
+ end
37
+ end
38
+ end
39
+
40
+ def teardown
41
+ Test::Unit::TestCase::DESCENDANTS.replace(@previous_descendants)
42
+ end
43
+
44
+ def test_basic_collection
45
+ assert_collect(full_suite("name"), "name")
46
+
47
+ assert_collect(full_suite("name"), "name") do |collector|
48
+ collector.filter = []
49
+ end
50
+ end
51
+
52
+ def test_filtered_collection
53
+ assert_collect(empty_suite) do |collector|
54
+ collector.filter = Proc.new {false}
55
+ end
56
+
57
+ assert_collect(full_suite) do |collector|
58
+ collector.filter = Proc.new {true}
59
+ end
60
+
61
+ assert_collect(full_suite) do |collector|
62
+ collector.filter = Proc.new {nil}
63
+ end
64
+
65
+ assert_collect(empty_suite) do |collector|
66
+ collector.filter = [Proc.new {false}, Proc.new {true}]
67
+ end
68
+
69
+ assert_collect(empty_suite) do |collector|
70
+ collector.filter = [Proc.new {true}, Proc.new {false}]
71
+ end
72
+
73
+ assert_collect(empty_suite) do |collector|
74
+ collector.filter = [Proc.new {nil}, Proc.new {false}]
75
+ end
76
+
77
+ assert_collect(full_suite) do |collector|
78
+ collector.filter = [Proc.new {nil}, Proc.new {true}]
79
+ end
80
+
81
+ expected = empty_suite
82
+ suite1 = Test::Unit::TestSuite.new(@test_case1.name)
83
+ suite1 << @test_case1.new("test_1")
84
+ suite2 = Test::Unit::TestSuite.new(@test_case2.name)
85
+ suite2 << @test_case2.new("test_0")
86
+ expected << suite1 << suite2
87
+ assert_collect(expected) do |collector|
88
+ collector.filter = Proc.new do |test|
89
+ ['test_1', 'test_0'].include?(test.method_name)
90
+ end
91
+ end
92
+
93
+ suite1 = Test::Unit::TestSuite.new(@test_case1.name)
94
+ suite1 << @test_case1.new("test_1")
95
+ suite2 = Test::Unit::TestSuite.new(@test_case2.name)
96
+ suite2 << @test_case2.new("test_0")
97
+ assert_collect(empty_suite) do |collector|
98
+ filters = [Proc.new {|test| test.method_name == 'test_1' ? true : nil},
99
+ Proc.new {|test| test.method_name == 'test_0' ? true : nil},
100
+ Proc.new {false}]
101
+ collector.filter = filters
102
+ end
103
+ end
104
+
105
+ private
106
+ def assert_collect(expected, *collect_args)
107
+ collector = Test::Unit::Collector::Descendant.new
108
+ yield(collector) if block_given?
109
+ assert_equal(expected, collector.send(:collect, *collect_args))
110
+ end
111
+
112
+ def default_name
113
+ Test::Unit::Collector::Descendant::NAME
114
+ end
115
+
116
+ def empty_suite(name=nil)
117
+ Test::Unit::TestSuite.new(name || default_name)
118
+ end
119
+
120
+ def full_suite(name=nil)
121
+ sub_suite1 = Test::Unit::TestSuite.new(@test_case1.name)
122
+ sub_suite1 << @test_case1.new('test_1')
123
+ sub_suite1 << @test_case1.new('test_2')
124
+
125
+ sub_suite2 = Test::Unit::TestSuite.new(@test_case2.name)
126
+ sub_suite2 << @test_case2.new('test_0')
127
+
128
+ suite = empty_suite(name)
129
+ suite << sub_suite1
130
+ suite << sub_suite2
131
+ suite
132
+ end
133
+ end
@@ -0,0 +1,442 @@
1
+ require 'tmpdir'
2
+ require 'pathname'
3
+
4
+ require 'test/unit'
5
+ require 'test/unit/collector/load'
6
+
7
+ class TestUnitCollectorLoad < Test::Unit::TestCase
8
+ def setup
9
+ @previous_descendants = Test::Unit::TestCase::DESCENDANTS.dup
10
+ Test::Unit::TestCase::DESCENDANTS.clear
11
+
12
+ @temporary_test_cases_module_name = "TempTestCases"
13
+ ::Object.const_set(@temporary_test_cases_module_name, Module.new)
14
+
15
+ @test_dir = Pathname(Dir.tmpdir) + "test-unit"
16
+ @extra_test_dir = Pathname(Dir.tmpdir) + "test-unit-extra"
17
+ ensure_clean_directory(@test_dir)
18
+ ensure_clean_directory(@extra_test_dir)
19
+ end
20
+
21
+ setup
22
+ def setup_top_level_test_cases
23
+ @test_case1 = @test_dir + "test_case1.rb"
24
+ @test_case2 = @test_dir + "test_case2.rb"
25
+ @no_load_test_case3 = @test_dir + "case3.rb"
26
+
27
+ @test_case1.open("w") do |test_case|
28
+ test_case.puts(<<-EOT)
29
+ module #{@temporary_test_cases_module_name}
30
+ class TestCase1 < Test::Unit::TestCase
31
+ def test1_1
32
+ end
33
+
34
+ def test1_2
35
+ end
36
+ end
37
+ end
38
+ EOT
39
+ end
40
+
41
+ @test_case2.open("w") do |test_case|
42
+ test_case.puts(<<-EOT)
43
+ module #{@temporary_test_cases_module_name}
44
+ class TestCase2 < Test::Unit::TestCase
45
+ def test2
46
+ end
47
+ end
48
+ end
49
+ EOT
50
+ end
51
+
52
+ @no_load_test_case3.open("w") do |test_case|
53
+ test_case.puts(<<-EOT)
54
+ module #{@temporary_test_cases_module_name}
55
+ class NoLoadTestCase3 < Test::Unit::TestCase
56
+ def test3
57
+ end
58
+ end
59
+ end
60
+ EOT
61
+ end
62
+ end
63
+
64
+ setup
65
+ def setup_sub_level_test_cases
66
+ @sub_test_dir = @test_dir + "sub"
67
+ @sub_test_dir.mkpath
68
+
69
+ @sub_test_case4 = @sub_test_dir + "test_case4.rb"
70
+ @no_load_sub_test_case5 = @sub_test_dir + "case5.rb"
71
+ @sub_test_case6 = @sub_test_dir + "test_case6.rb"
72
+
73
+ @sub_test_case4.open("w") do |test_case|
74
+ test_case.puts(<<-EOT)
75
+ module #{@temporary_test_cases_module_name}
76
+ class SubTestCase4 < Test::Unit::TestCase
77
+ def test4_1
78
+ end
79
+
80
+ def test4_2
81
+ end
82
+ end
83
+ end
84
+ EOT
85
+ end
86
+
87
+ @no_load_sub_test_case5.open("w") do |test_case|
88
+ test_case.puts(<<-EOT)
89
+ module #{@temporary_test_cases_module_name}
90
+ class NoLoadSubTestCase5 < Test::Unit::TestCase
91
+ def test5_1
92
+ end
93
+
94
+ def test5_2
95
+ end
96
+ end
97
+ end
98
+ EOT
99
+ end
100
+
101
+ @sub_test_case6.open("w") do |test_case|
102
+ test_case.puts(<<-EOT)
103
+ module #{@temporary_test_cases_module_name}
104
+ class SubTestCase6 < Test::Unit::TestCase
105
+ def test6
106
+ end
107
+ end
108
+ end
109
+ EOT
110
+ end
111
+ end
112
+
113
+ setup
114
+ def setup_sub_level_test_cases2
115
+ @sub2_test_dir = @test_dir + "sub2"
116
+ @sub2_test_dir.mkpath
117
+
118
+ @no_load_sub2_test_case7 = @sub2_test_dir + "case7.rb"
119
+ @sub2_test_case8 = @sub2_test_dir + "test_case8.rb"
120
+ @sub2_test_case9 = @sub2_test_dir + "test_case9.rb"
121
+
122
+ @no_load_sub2_test_case7.open("w") do |test_case|
123
+ test_case.puts(<<-EOT)
124
+ module #{@temporary_test_cases_module_name}
125
+ class NoLoadSub2TestCase7 < Test::Unit::TestCase
126
+ def test7_1
127
+ end
128
+
129
+ def test7_2
130
+ end
131
+ end
132
+ end
133
+ EOT
134
+ end
135
+
136
+ @sub2_test_case8.open("w") do |test_case|
137
+ test_case.puts(<<-EOT)
138
+ module #{@temporary_test_cases_module_name}
139
+ class Sub2TestCase8 < Test::Unit::TestCase
140
+ def test8_1
141
+ end
142
+
143
+ def test8_2
144
+ end
145
+ end
146
+ end
147
+ EOT
148
+ end
149
+
150
+ @sub2_test_case9.open("w") do |test_case|
151
+ test_case.puts(<<-EOT)
152
+ module #{@temporary_test_cases_module_name}
153
+ class Sub2TestCase9 < Test::Unit::TestCase
154
+ def test9
155
+ end
156
+ end
157
+ end
158
+ EOT
159
+ end
160
+ end
161
+
162
+ setup
163
+ def setup_svn_test_cases
164
+ @svn_test_dir = @test_dir + ".svn"
165
+ @svn_test_dir.mkpath
166
+
167
+ @svn_test_case10 = @svn_test_dir + "test_case10.rb"
168
+
169
+ @svn_test_case10.open("w") do |test_case|
170
+ test_case.puts(<<-EOT)
171
+ module #{@temporary_test_cases_module_name}
172
+ class SvnTestCase10 < Test::Unit::TestCase
173
+ def test7
174
+ end
175
+ end
176
+ end
177
+ EOT
178
+ end
179
+ end
180
+
181
+ setup
182
+ def setup_sub_cvs_test_cases
183
+ @sub_cvs_test_dir = @sub_test_dir + "CVS"
184
+ @sub_cvs_test_dir.mkpath
185
+
186
+ @sub_cvs_test_case11 = @sub_cvs_test_dir + "test_case11.rb"
187
+
188
+ @sub_cvs_test_case11.open("w") do |test_case|
189
+ test_case.puts(<<-EOT)
190
+ module #{@temporary_test_cases_module_name}
191
+ class SubCVSTestCase11 < Test::Unit::TestCase
192
+ def test11
193
+ end
194
+ end
195
+ end
196
+ EOT
197
+ end
198
+ end
199
+
200
+ setup
201
+ def setup_sub_git_test_cases
202
+ @sub_git_test_dir = @sub_test_dir + ".git"
203
+ @sub_git_test_dir.mkpath
204
+
205
+ @sub_git_test_case11 = @sub_git_test_dir + "test_case11.rb"
206
+
207
+ @sub_git_test_case11.open("w") do |test_case|
208
+ test_case.puts(<<-EOT)
209
+ module #{@temporary_test_cases_module_name}
210
+ class SubGitTestCase11 < Test::Unit::TestCase
211
+ def test11
212
+ end
213
+ end
214
+ end
215
+ EOT
216
+ end
217
+ end
218
+
219
+ setup
220
+ def setup_extra_top_level_test_cases
221
+ @test_cases12 = @extra_test_dir + "test_cases12.rb"
222
+ @test_cases12.open("w") do |test_case|
223
+ test_case.puts(<<-EOT)
224
+ module #{@temporary_test_cases_module_name}
225
+ class TestCase121 < Test::Unit::TestCase
226
+ def test121_1
227
+ end
228
+
229
+ def test121_2
230
+ end
231
+ end
232
+
233
+ class TestCase122 < Test::Unit::TestCase
234
+ def test122_1
235
+ end
236
+
237
+ def test122_2
238
+ end
239
+ end
240
+ end
241
+ EOT
242
+ end
243
+ end
244
+
245
+ setup
246
+ def setup_sub_level_extra_test_cases
247
+ @sub_extra_test_dir = @extra_test_dir + "sub"
248
+ @sub_extra_test_dir.mkpath
249
+
250
+ @cases13_test = @sub_extra_test_dir + "13cases_test.rb"
251
+ @cases13_test.open("w") do |test_case|
252
+ test_case.puts(<<-EOT)
253
+ module #{@temporary_test_cases_module_name}
254
+ class SubTestCase13 < Test::Unit::TestCase
255
+ def test13_1
256
+ end
257
+
258
+ def test13_2
259
+ end
260
+ end
261
+ end
262
+ EOT
263
+ end
264
+ end
265
+
266
+ def teardown
267
+ @test_dir.rmtree if @test_dir.exist?
268
+ ::Object.send(:remove_const, @temporary_test_cases_module_name)
269
+ Test::Unit::TestCase::DESCENDANTS.replace(@previous_descendants)
270
+ end
271
+
272
+ def test_simple_collect
273
+ assert_collect([:suite, {:name => @sub_test_dir.basename.to_s},
274
+ [:suite, {:name => _test_case_name("SubTestCase4")},
275
+ [:test, {:name => "test4_1"}],
276
+ [:test, {:name => "test4_2"}]],
277
+ [:suite, {:name => _test_case_name("SubTestCase6")},
278
+ [:test, {:name => "test6"}]]],
279
+ @sub_test_dir.to_s)
280
+ end
281
+
282
+ def test_simple_collect_test_suffix
283
+ assert_collect([:suite, {:name => @extra_test_dir.basename.to_s},
284
+ [:suite, {:name => _test_case_name("TestCase121")},
285
+ [:test, {:name => "test121_1"}],
286
+ [:test, {:name => "test121_2"}]],
287
+ [:suite, {:name => _test_case_name("TestCase122")},
288
+ [:test, {:name => "test122_1"}],
289
+ [:test, {:name => "test122_2"}]],
290
+ [:suite, {:name => @sub_extra_test_dir.basename.to_s},
291
+ [:suite, {:name => _test_case_name("SubTestCase13")},
292
+ [:test, {:name => "test13_1"}],
293
+ [:test, {:name => "test13_2"}]]]],
294
+ @extra_test_dir.to_s)
295
+ end
296
+
297
+ def test_multilevel_collect
298
+ assert_collect([:suite, {:name => "."},
299
+ [:suite, {:name => _test_case_name("TestCase1")},
300
+ [:test, {:name => "test1_1"}],
301
+ [:test, {:name => "test1_2"}]],
302
+ [:suite, {:name => _test_case_name("TestCase2")},
303
+ [:test, {:name => "test2"}]],
304
+ [:suite, {:name => @sub_test_dir.basename.to_s},
305
+ [:suite, {:name => _test_case_name("SubTestCase4")},
306
+ [:test, {:name => "test4_1"}],
307
+ [:test, {:name => "test4_2"}]],
308
+ [:suite, {:name => _test_case_name("SubTestCase6")},
309
+ [:test, {:name => "test6"}]]],
310
+ [:suite, {:name => @sub2_test_dir.basename.to_s},
311
+ [:suite, {:name => _test_case_name("Sub2TestCase8")},
312
+ [:test, {:name => "test8_1"}],
313
+ [:test, {:name => "test8_2"}]],
314
+ [:suite, {:name => _test_case_name("Sub2TestCase9")},
315
+ [:test, {:name => "test9"}]]]])
316
+ end
317
+
318
+ def test_collect_file
319
+ assert_collect([:suite, {:name => _test_case_name("TestCase1")},
320
+ [:test, {:name => "test1_1"}],
321
+ [:test, {:name => "test1_2"}]],
322
+ @test_case1.to_s)
323
+ end
324
+
325
+ def test_collect_file_no_pattern_match_file_name
326
+ assert_collect([:suite, {:name => _test_case_name("NoLoadSubTestCase5")},
327
+ [:test, {:name => "test5_1"}],
328
+ [:test, {:name => "test5_2"}]],
329
+ @no_load_sub_test_case5.to_s)
330
+ end
331
+
332
+ def test_collect_file_test_cases
333
+ assert_collect([:suite, {:name => "[#{@test_cases12}]"},
334
+ [:suite, {:name => _test_case_name("TestCase121")},
335
+ [:test, {:name => "test121_1"}],
336
+ [:test, {:name => "test121_2"}]],
337
+ [:suite, {:name => _test_case_name("TestCase122")},
338
+ [:test, {:name => "test122_1"}],
339
+ [:test, {:name => "test122_2"}]]],
340
+ @test_cases12.to_s)
341
+ end
342
+
343
+ def test_collect_files
344
+ assert_collect([:suite,
345
+ {:name => "[#{@test_case1}, #{@test_case2}]"},
346
+ [:suite, {:name => _test_case_name("TestCase1")},
347
+ [:test, {:name => "test1_1"}],
348
+ [:test, {:name => "test1_2"}]],
349
+ [:suite, {:name => _test_case_name("TestCase2")},
350
+ [:test, {:name => "test2"}]]],
351
+ @test_case1.to_s, @test_case2.to_s)
352
+ end
353
+
354
+ def test_nil_pattern
355
+ assert_collect([:suite, {:name => @sub_test_dir.basename.to_s},
356
+ [:suite, {:name => _test_case_name("NoLoadSubTestCase5")},
357
+ [:test, {:name => "test5_1"}],
358
+ [:test, {:name => "test5_2"}]],
359
+ [:suite, {:name => _test_case_name("SubTestCase4")},
360
+ [:test, {:name => "test4_1"}],
361
+ [:test, {:name => "test4_2"}]],
362
+ [:suite, {:name => _test_case_name("SubTestCase6")},
363
+ [:test, {:name => "test6"}]]],
364
+ @sub_test_dir.to_s) do |collector|
365
+ collector.patterns.clear
366
+ end
367
+ end
368
+
369
+ def test_filtering
370
+ assert_collect([:suite, {:name => "."},
371
+ [:suite, {:name => _test_case_name("TestCase1")},
372
+ [:test, {:name => "test1_1"}],
373
+ [:test, {:name => "test1_2"}]]]) do |collector|
374
+ collector.filter = Proc.new do |test|
375
+ !/\Atest1/.match(test.method_name).nil?
376
+ end
377
+ end
378
+ end
379
+
380
+ def test_collect_multi
381
+ test_dirs = [@sub_test_dir.to_s, @sub2_test_dir.to_s]
382
+ assert_collect([:suite, {:name => "[#{test_dirs.join(', ')}]"},
383
+ [:suite, {:name => @sub_test_dir.basename.to_s},
384
+ [:suite, {:name => _test_case_name("SubTestCase4")},
385
+ [:test, {:name => "test4_1"}],
386
+ [:test, {:name => "test4_2"}]],
387
+ [:suite, {:name => _test_case_name("SubTestCase6")},
388
+ [:test, {:name => "test6"}]]],
389
+ [:suite, {:name => @sub2_test_dir.basename.to_s},
390
+ [:suite, {:name => _test_case_name("Sub2TestCase8")},
391
+ [:test, {:name => "test8_1"}],
392
+ [:test, {:name => "test8_2"}]],
393
+ [:suite, {:name => _test_case_name("Sub2TestCase9")},
394
+ [:test, {:name => "test9"}]]]],
395
+ *test_dirs)
396
+ end
397
+
398
+ private
399
+ def assert_collect(expected, *collect_args)
400
+ keep_required_files do
401
+ Dir.chdir(@test_dir.to_s) do
402
+ collector = Test::Unit::Collector::Load.new
403
+ yield(collector) if block_given?
404
+ actual = inspect_test_object(collector.send(:collect, *collect_args))
405
+ assert_equal(expected, actual)
406
+ end
407
+ end
408
+ end
409
+
410
+ def ensure_clean_directory(directory)
411
+ directory.rmtree if directory.exist?
412
+ directory.mkpath
413
+ end
414
+
415
+ def keep_required_files
416
+ required_files = $".dup
417
+ yield
418
+ ensure
419
+ $".replace(required_files)
420
+ end
421
+
422
+ def _test_case_name(test_case_class_name)
423
+ "#{@temporary_test_cases_module_name}::#{test_case_class_name}"
424
+ end
425
+
426
+ def inspect_test_object(test_object)
427
+ return nil if test_object.nil?
428
+ case test_object
429
+ when Test::Unit::TestSuite
430
+ sub_tests = test_object.tests.collect do |test|
431
+ inspect_test_object(test)
432
+ end.sort_by do |type, attributes, *children|
433
+ attributes[:name]
434
+ end
435
+ [:suite, {:name => test_object.name}, *sub_tests]
436
+ when Test::Unit::TestCase
437
+ [:test, {:name => test_object.method_name}]
438
+ else
439
+ raise "unexpected test object: #{test_object.inspect}"
440
+ end
441
+ end
442
+ end