spline 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/bin/spline +11 -9
  3. data/lib/spline/version.rb +1 -1
  4. data/lib/spline.rb +1 -8
  5. data/vendor/bundle/ruby/2.1.0/bin/rake +23 -0
  6. data/vendor/bundle/ruby/2.1.0/bin/spline +23 -0
  7. data/vendor/bundle/ruby/2.1.0/build_info/rake-10.3.2.info +1 -0
  8. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.autotest +7 -0
  9. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.gemtest +0 -0
  10. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.rubocop.yml +27 -0
  11. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/.togglerc +7 -0
  12. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/CONTRIBUTING.rdoc +34 -0
  13. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/History.rdoc +609 -0
  14. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/MIT-LICENSE +21 -0
  15. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/Manifest.txt +162 -0
  16. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/README.rdoc +137 -0
  17. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/Rakefile +81 -0
  18. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/bin/rake +33 -0
  19. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/alt_system.rb +110 -0
  20. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/application.rb +783 -0
  21. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/backtrace.rb +23 -0
  22. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/clean.rb +76 -0
  23. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cloneable.rb +16 -0
  24. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/.document +0 -0
  25. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/compositepublisher.rb +21 -0
  26. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/ftptools.rb +137 -0
  27. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/publisher.rb +81 -0
  28. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  29. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sshpublisher.rb +61 -0
  30. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sys.rb +4 -0
  31. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cpu_counter.rb +109 -0
  32. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/default_loader.rb +14 -0
  33. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/dsl_definition.rb +198 -0
  34. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/early_time.rb +21 -0
  35. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/core.rb +25 -0
  36. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/module.rb +1 -0
  37. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/string.rb +173 -0
  38. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/time.rb +15 -0
  39. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_creation_task.rb +24 -0
  40. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_list.rb +414 -0
  41. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_task.rb +46 -0
  42. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils.rb +116 -0
  43. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils_ext.rb +144 -0
  44. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/gempackagetask.rb +4 -0
  45. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_chain.rb +56 -0
  46. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_exception_mixin.rb +16 -0
  47. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/linked_list.rb +103 -0
  48. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/loaders/makefile.rb +40 -0
  49. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/multi_task.rb +13 -0
  50. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/name_space.rb +38 -0
  51. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/packagetask.rb +202 -0
  52. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pathmap.rb +3 -0
  53. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/phony.rb +15 -0
  54. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/private_reader.rb +20 -0
  55. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/promise.rb +99 -0
  56. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pseudo_status.rb +29 -0
  57. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_module.rb +38 -0
  58. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_test_loader.rb +22 -0
  59. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rdoctask.rb +4 -0
  60. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ruby182_test_unit_fix.rb +29 -0
  61. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  62. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/runtest.rb +27 -0
  63. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/scope.rb +42 -0
  64. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task.rb +383 -0
  65. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_argument_error.rb +7 -0
  66. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_arguments.rb +98 -0
  67. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_manager.rb +310 -0
  68. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/tasklib.rb +24 -0
  69. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/testtask.rb +212 -0
  70. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_history_display.rb +48 -0
  71. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_pool.rb +164 -0
  72. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/trace_output.rb +22 -0
  73. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/version.rb +7 -0
  74. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake/win32.rb +56 -0
  75. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/lib/rake.rb +78 -0
  76. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/rakelib/publish.rake +20 -0
  77. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/rakelib/test_times.rake +25 -0
  78. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/file_creation.rb +34 -0
  79. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/helper.rb +127 -0
  80. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/support/rakefile_definitions.rb +478 -0
  81. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/support/ruby_runner.rb +33 -0
  82. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_private_reader.rb +42 -0
  83. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake.rb +40 -0
  84. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application.rb +641 -0
  85. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application_options.rb +466 -0
  86. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_backtrace.rb +119 -0
  87. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_clean.rb +55 -0
  88. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_cpu_counter.rb +50 -0
  89. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_definitions.rb +79 -0
  90. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_directory_task.rb +63 -0
  91. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_dsl.rb +40 -0
  92. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_early_time.rb +31 -0
  93. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_extension.rb +59 -0
  94. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_creation_task.rb +56 -0
  95. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list.rb +627 -0
  96. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list_path_map.rb +8 -0
  97. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_task.rb +186 -0
  98. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_utils.rb +309 -0
  99. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_ftp_file.rb +74 -0
  100. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_functional.rb +482 -0
  101. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_invocation_chain.rb +64 -0
  102. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_linked_list.rb +84 -0
  103. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_makefile_loader.rb +46 -0
  104. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_multi_task.rb +58 -0
  105. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_name_space.rb +57 -0
  106. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_package_task.rb +79 -0
  107. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map.rb +168 -0
  108. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_explode.rb +34 -0
  109. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_partial.rb +18 -0
  110. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_pseudo_status.rb +21 -0
  111. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rake_test_loader.rb +20 -0
  112. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_reduce_compat.rb +26 -0
  113. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_require.rb +40 -0
  114. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rules.rb +388 -0
  115. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_scope.rb +44 -0
  116. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task.rb +392 -0
  117. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_argument_parsing.rb +109 -0
  118. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_arguments.rb +127 -0
  119. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_lib.rb +9 -0
  120. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager.rb +178 -0
  121. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager_argument_resolution.rb +19 -0
  122. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_with_arguments.rb +171 -0
  123. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_test_task.rb +141 -0
  124. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_thread_pool.rb +142 -0
  125. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_top_level_functions.rb +71 -0
  126. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_win32.rb +72 -0
  127. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_thread_history_display.rb +101 -0
  128. data/vendor/bundle/ruby/2.1.0/gems/rake-10.3.2/test/test_trace_output.rb +52 -0
  129. data/vendor/bundle/ruby/2.1.0/specifications/rake-10.3.2.gemspec +45 -0
  130. metadata +127 -2
@@ -0,0 +1,178 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TestRakeTaskManager < Rake::TestCase
4
+
5
+ def setup
6
+ super
7
+
8
+ @tm = Rake::TestCase::TaskManager.new
9
+ end
10
+
11
+ def test_create_task_manager
12
+ refute_nil @tm
13
+ assert_equal [], @tm.tasks
14
+ end
15
+
16
+ def test_define_task
17
+ t = @tm.define_task(Rake::Task, :t)
18
+ assert_equal "t", t.name
19
+ assert_equal @tm, t.application
20
+ end
21
+
22
+ def test_index
23
+ e = assert_raises RuntimeError do
24
+ @tm['bad']
25
+ end
26
+
27
+ assert_equal "Don't know how to build task 'bad'", e.message
28
+ end
29
+
30
+ def test_name_lookup
31
+ t = @tm.define_task(Rake::Task, :t)
32
+ assert_equal t, @tm[:t]
33
+ end
34
+
35
+ def test_namespace_task_create
36
+ @tm.in_namespace("x") do
37
+ t = @tm.define_task(Rake::Task, :t)
38
+ assert_equal "x:t", t.name
39
+ end
40
+ assert_equal ["x:t"], @tm.tasks.map { |t| t.name }
41
+ end
42
+
43
+ def test_define_namespaced_task
44
+ t = @tm.define_task(Rake::Task, 'n:a:m:e:t')
45
+ assert_equal Rake::Scope.make("e", "m", "a", "n"), t.scope
46
+ assert_equal "n:a:m:e:t", t.name
47
+ assert_equal @tm, t.application
48
+ end
49
+
50
+ def test_define_namespace_in_namespace
51
+ t = nil
52
+ @tm.in_namespace("n") do
53
+ t = @tm.define_task(Rake::Task, 'a:m:e:t')
54
+ end
55
+ assert_equal Rake::Scope.make("e", "m", "a", "n"), t.scope
56
+ assert_equal "n:a:m:e:t", t.name
57
+ assert_equal @tm, t.application
58
+ end
59
+
60
+ def test_anonymous_namespace
61
+ anon_ns = @tm.in_namespace(nil) do
62
+ t = @tm.define_task(Rake::Task, :t)
63
+ assert_equal "_anon_1:t", t.name
64
+ end
65
+ task = anon_ns[:t]
66
+ assert_equal "_anon_1:t", task.name
67
+ end
68
+
69
+ def test_create_filetask_in_namespace
70
+ @tm.in_namespace("x") do
71
+ t = @tm.define_task(Rake::FileTask, "fn")
72
+ assert_equal "fn", t.name
73
+ end
74
+
75
+ assert_equal ["fn"], @tm.tasks.map { |t| t.name }
76
+ end
77
+
78
+ def test_namespace_yields_same_namespace_as_returned
79
+ yielded_namespace = nil
80
+ returned_namespace = @tm.in_namespace("x") do |ns|
81
+ yielded_namespace = ns
82
+ end
83
+ assert_equal returned_namespace, yielded_namespace
84
+ end
85
+
86
+ def test_name_lookup_with_implicit_file_tasks
87
+ FileUtils.touch 'README.rdoc'
88
+
89
+ t = @tm["README.rdoc"]
90
+
91
+ assert_equal "README.rdoc", t.name
92
+ assert Rake::FileTask === t
93
+ end
94
+
95
+ def test_name_lookup_with_nonexistent_task
96
+ assert_raises(RuntimeError) {
97
+ @tm["DOES NOT EXIST"]
98
+ }
99
+ end
100
+
101
+ def test_name_lookup_in_multiple_scopes
102
+ aa = nil
103
+ bb = nil
104
+ xx = @tm.define_task(Rake::Task, :xx)
105
+ top_z = @tm.define_task(Rake::Task, :z)
106
+ @tm.in_namespace("a") do
107
+ aa = @tm.define_task(Rake::Task, :aa)
108
+ mid_z = @tm.define_task(Rake::Task, :z)
109
+ ns_d = @tm.define_task(Rake::Task, "n:t")
110
+ @tm.in_namespace("b") do
111
+ bb = @tm.define_task(Rake::Task, :bb)
112
+ bot_z = @tm.define_task(Rake::Task, :z)
113
+
114
+ assert_equal Rake::Scope.make("b", "a"), @tm.current_scope
115
+
116
+ assert_equal bb, @tm["a:b:bb"]
117
+ assert_equal aa, @tm["a:aa"]
118
+ assert_equal xx, @tm["xx"]
119
+ assert_equal bot_z, @tm["z"]
120
+ assert_equal mid_z, @tm["^z"]
121
+ assert_equal top_z, @tm["^^z"]
122
+ assert_equal top_z, @tm["^^^z"] # Over the top
123
+ assert_equal top_z, @tm["rake:z"]
124
+ end
125
+
126
+ assert_equal Rake::Scope.make("a"), @tm.current_scope
127
+
128
+ assert_equal bb, @tm["a:b:bb"]
129
+ assert_equal aa, @tm["a:aa"]
130
+ assert_equal xx, @tm["xx"]
131
+ assert_equal bb, @tm["b:bb"]
132
+ assert_equal aa, @tm["aa"]
133
+ assert_equal mid_z, @tm["z"]
134
+ assert_equal top_z, @tm["^z"]
135
+ assert_equal top_z, @tm["^^z"] # Over the top
136
+ assert_equal top_z, @tm["rake:z"]
137
+ assert_equal ns_d, @tm["n:t"]
138
+ assert_equal ns_d, @tm["a:n:t"]
139
+ end
140
+
141
+ assert_equal Rake::Scope.make, @tm.current_scope
142
+
143
+ assert_equal Rake::Scope.make, xx.scope
144
+ assert_equal Rake::Scope.make('a'), aa.scope
145
+ assert_equal Rake::Scope.make('b', 'a'), bb.scope
146
+ end
147
+
148
+ def test_lookup_with_explicit_scopes
149
+ t1, t2, t3, s = (0...4).map { nil }
150
+ t1 = @tm.define_task(Rake::Task, :t)
151
+ @tm.in_namespace("a") do
152
+ t2 = @tm.define_task(Rake::Task, :t)
153
+ s = @tm.define_task(Rake::Task, :s)
154
+ @tm.in_namespace("b") do
155
+ t3 = @tm.define_task(Rake::Task, :t)
156
+ end
157
+ end
158
+ assert_equal t1, @tm[:t, Rake::Scope.make]
159
+ assert_equal t2, @tm[:t, Rake::Scope.make("a")]
160
+ assert_equal t3, @tm[:t, Rake::Scope.make("b", "a")]
161
+ assert_equal s, @tm[:s, Rake::Scope.make("b", "a")]
162
+ assert_equal s, @tm[:s, Rake::Scope.make("a")]
163
+ end
164
+
165
+ def test_correctly_scoped_prerequisites_are_invoked
166
+ values = []
167
+ @tm = Rake::Application.new
168
+ @tm.define_task(Rake::Task, :z) do values << "top z" end
169
+ @tm.in_namespace("a") do
170
+ @tm.define_task(Rake::Task, :z) do values << "next z" end
171
+ @tm.define_task(Rake::Task, :x => :z)
172
+ end
173
+
174
+ @tm["a:x"].invoke
175
+ assert_equal ["next z"], values
176
+ end
177
+
178
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TestRakeTaskManagerArgumentResolution < Rake::TestCase
4
+
5
+ def test_good_arg_patterns
6
+ assert_equal [:t, [], []], task(:t)
7
+ assert_equal [:t, [], [:x]], task(:t => :x)
8
+ assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
9
+
10
+ assert_equal [:t, [:a, :b], []], task(:t, [:a, :b])
11
+ assert_equal [:t, [:a, :b], [:x]], task(:t, [:a, :b] => :x)
12
+ assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
13
+ end
14
+
15
+ def task(*args)
16
+ tm = Rake::TestCase::TaskManager.new
17
+ tm.resolve_args(args)
18
+ end
19
+ end
@@ -0,0 +1,171 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TestRakeTaskWithArguments < Rake::TestCase
4
+ include Rake
5
+
6
+ def setup
7
+ super
8
+
9
+ Task.clear
10
+ Rake::TaskManager.record_task_metadata = true
11
+ end
12
+
13
+ def teardown
14
+ Rake::TaskManager.record_task_metadata = false
15
+
16
+ super
17
+ end
18
+
19
+ def test_no_args_given
20
+ t = task :t
21
+ assert_equal [], t.arg_names
22
+ end
23
+
24
+ def test_args_given
25
+ t = task :t, :a, :b
26
+ assert_equal [:a, :b], t.arg_names
27
+ end
28
+
29
+ def test_name_and_needs
30
+ t = task(:t => [:pre])
31
+ assert_equal "t", t.name
32
+ assert_equal [], t.arg_names
33
+ assert_equal ["pre"], t.prerequisites
34
+ end
35
+
36
+ def test_name_args_and_prereqs
37
+ t = task(:t, [:x, :y] => [:pre])
38
+ assert_equal "t", t.name
39
+ assert_equal [:x, :y], t.arg_names
40
+ assert_equal ["pre"], t.prerequisites
41
+ end
42
+
43
+ def test_arg_list_is_empty_if_no_args_given
44
+ t = task(:t) { |tt, args| assert_equal({}, args.to_hash) }
45
+ t.invoke(1, 2, 3)
46
+ end
47
+
48
+ def test_tasks_can_access_arguments_as_hash
49
+ t = task :t, :a, :b, :c do |tt, args|
50
+ assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
51
+ assert_equal 1, args[:a]
52
+ assert_equal 2, args[:b]
53
+ assert_equal 3, args[:c]
54
+ assert_equal 1, args.a
55
+ assert_equal 2, args.b
56
+ assert_equal 3, args.c
57
+ end
58
+ t.invoke(1, 2, 3)
59
+ end
60
+
61
+ def test_actions_of_various_arity_are_ok_with_args
62
+ notes = []
63
+ t = task(:t, :x) do
64
+ notes << :a
65
+ end
66
+ t.enhance do | |
67
+ notes << :b
68
+ end
69
+ t.enhance do |task|
70
+ notes << :c
71
+ assert_kind_of Task, task
72
+ end
73
+ t.enhance do |t2, args|
74
+ notes << :d
75
+ assert_equal t, t2
76
+ assert_equal({:x => 1}, args.to_hash)
77
+ end
78
+ t.invoke(1)
79
+ assert_equal [:a, :b, :c, :d], notes
80
+ end
81
+
82
+ def test_arguments_are_passed_to_block
83
+ t = task(:t, :a, :b) { |tt, args|
84
+ assert_equal({ :a => 1, :b => 2 }, args.to_hash)
85
+ }
86
+ t.invoke(1, 2)
87
+ end
88
+
89
+ def test_extra_parameters_are_ignored
90
+ t = task(:t, :a) { |tt, args|
91
+ assert_equal 1, args.a
92
+ assert_nil args.b
93
+ }
94
+ t.invoke(1, 2)
95
+ end
96
+
97
+ def test_arguments_are_passed_to_all_blocks
98
+ counter = 0
99
+ t = task :t, :a
100
+ task :t do |tt, args|
101
+ assert_equal 1, args.a
102
+ counter += 1
103
+ end
104
+ task :t do |tt, args|
105
+ assert_equal 1, args.a
106
+ counter += 1
107
+ end
108
+ t.invoke(1)
109
+ assert_equal 2, counter
110
+ end
111
+
112
+ def test_block_with_no_parameters_is_ok
113
+ t = task(:t) { }
114
+ t.invoke(1, 2)
115
+ end
116
+
117
+ def test_name_with_args
118
+ desc "T"
119
+ t = task(:tt, :a, :b)
120
+ assert_equal "tt", t.name
121
+ assert_equal "T", t.comment
122
+ assert_equal "[a,b]", t.arg_description
123
+ assert_equal "tt[a,b]", t.name_with_args
124
+ assert_equal [:a, :b], t.arg_names
125
+ end
126
+
127
+ def test_named_args_are_passed_to_prereqs
128
+ value = nil
129
+ task(:pre, :rev) { |t, args| value = args.rev }
130
+ t = task(:t, [:name, :rev] => [:pre])
131
+ t.invoke("bill", "1.2")
132
+ assert_equal "1.2", value
133
+ end
134
+
135
+ def test_args_not_passed_if_no_prereq_names_on_task
136
+ task(:pre) { |t, args|
137
+ assert_equal({}, args.to_hash)
138
+ assert_equal "bill", args.name
139
+ }
140
+ t = task(:t, [:name, :rev] => [:pre])
141
+ t.invoke("bill", "1.2")
142
+ end
143
+
144
+ def test_args_not_passed_if_no_prereq_names_on_multitask
145
+ task(:pre) { |t, args|
146
+ assert_equal({}, args.to_hash)
147
+ assert_equal "bill", args.name
148
+ }
149
+ t = multitask(:t, [:name, :rev] => [:pre])
150
+ t.invoke("bill", "1.2")
151
+ end
152
+
153
+ def test_args_not_passed_if_no_arg_names
154
+ task(:pre, :rev) { |t, args|
155
+ assert_equal({}, args.to_hash)
156
+ }
157
+ t = task(:t => [:pre])
158
+ t.invoke("bill", "1.2")
159
+ end
160
+
161
+ def test_values_at
162
+ t = task(:pre, [:a, :b, :c]) { |task, args|
163
+ a, b, c = args.values_at(:a, :b, :c)
164
+ assert_equal %w[1 2 3], [a, b, c]
165
+ }
166
+
167
+ t.invoke(*%w[1 2 3])
168
+
169
+ # HACK no assertions
170
+ end
171
+ end
@@ -0,0 +1,141 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+ require 'rake/testtask'
3
+
4
+ class TestRakeTestTask < Rake::TestCase
5
+ include Rake
6
+
7
+ def test_initialize
8
+ tt = Rake::TestTask.new do |t| end
9
+ refute_nil tt
10
+ assert_equal :test, tt.name
11
+ assert_equal ['lib'], tt.libs
12
+ assert_equal 'test/test*.rb', tt.pattern
13
+ assert_equal false, tt.verbose
14
+ assert Task.task_defined?(:test)
15
+ end
16
+
17
+ def test_initialize_override
18
+ tt = Rake::TestTask.new(:example) do |t|
19
+ t.description = "Run example tests"
20
+ t.libs = ['src', 'ext']
21
+ t.pattern = 'test/tc_*.rb'
22
+ t.verbose = true
23
+ end
24
+ refute_nil tt
25
+ assert_equal "Run example tests", tt.description
26
+ assert_equal :example, tt.name
27
+ assert_equal ['src', 'ext'], tt.libs
28
+ assert_equal 'test/tc_*.rb', tt.pattern
29
+ assert_equal true, tt.verbose
30
+ assert Task.task_defined?(:example)
31
+ end
32
+
33
+ def test_file_list_env_test
34
+ ENV['TEST'] = 'testfile.rb'
35
+ tt = Rake::TestTask.new do |t|
36
+ t.pattern = '*'
37
+ end
38
+
39
+ assert_equal ["testfile.rb"], tt.file_list.to_a
40
+ ensure
41
+ ENV.delete 'TEST'
42
+ end
43
+
44
+ def test_libs_equals
45
+ test_task = Rake::TestTask.new do |t|
46
+ t.libs << ["A", "B"]
47
+ end
48
+
49
+ path = %w[lib A B].join File::PATH_SEPARATOR
50
+
51
+ assert_equal "-I\"#{path}\"", test_task.ruby_opts_string
52
+ end
53
+
54
+ def test_libs_equals_empty
55
+ test_task = Rake::TestTask.new do |t|
56
+ t.libs = []
57
+ end
58
+
59
+ assert_equal '', test_task.ruby_opts_string
60
+ end
61
+
62
+ def test_pattern_equals
63
+ tt = Rake::TestTask.new do |t|
64
+ t.pattern = '*.rb'
65
+ end
66
+ assert_equal ['*.rb'], tt.file_list.to_a
67
+ end
68
+
69
+ def test_pattern_equals_test_files_equals
70
+ tt = Rake::TestTask.new do |t|
71
+ t.test_files = FileList['a.rb', 'b.rb']
72
+ t.pattern = '*.rb'
73
+ end
74
+ assert_equal ['a.rb', 'b.rb', '*.rb'], tt.file_list.to_a
75
+ end
76
+
77
+ def test_run_code_direct
78
+ test_task = Rake::TestTask.new do |t|
79
+ t.loader = :direct
80
+ end
81
+
82
+ assert_equal '-e "ARGV.each{|f| require f}"', test_task.run_code
83
+ end
84
+
85
+ def test_run_code_rake
86
+ spec = Gem::Specification.new 'rake', 0
87
+ spec.loaded_from = File.join Gem::Specification.dirs.last, 'rake-0.gemspec'
88
+ rake, Gem.loaded_specs['rake'] = Gem.loaded_specs['rake'], spec
89
+
90
+ test_task = Rake::TestTask.new do |t|
91
+ t.loader = :rake
92
+ end
93
+
94
+ assert_match(/\A-I".*?" ".*?"\Z/, test_task.run_code)
95
+ ensure
96
+ Gem.loaded_specs['rake'] = rake
97
+ end
98
+
99
+ def test_run_code_rake_default_gem
100
+ default_spec = Gem::Specification.new 'rake', 0
101
+ default_spec.loaded_from = File.join Gem::Specification.default_specifications_dir, 'rake-0.gemspec'
102
+ rake, Gem.loaded_specs['rake'] = Gem.loaded_specs['rake'], default_spec
103
+
104
+ test_task = Rake::TestTask.new do |t|
105
+ t.loader = :rake
106
+ end
107
+
108
+ assert_match(/\A ".*?"\Z/, test_task.run_code)
109
+ ensure
110
+ Gem.loaded_specs['rake'] = rake
111
+ end
112
+
113
+ def test_run_code_testrb_ruby_1_8_2
114
+ test_task = Rake::TestTask.new do |t|
115
+ t.loader = :testrb
116
+ end
117
+
118
+ def test_task.ruby_version() '1.8.2' end
119
+
120
+ assert_match(/^-S testrb +".*"$/, test_task.run_code)
121
+ end
122
+
123
+ def test_run_code_testrb_ruby_1_8_6
124
+ test_task = Rake::TestTask.new do |t|
125
+ t.loader = :testrb
126
+ end
127
+
128
+ def test_task.ruby_version() '1.8.6' end
129
+
130
+ assert_match(/^-S testrb +$/, test_task.run_code)
131
+ end
132
+
133
+ def test_test_files_equals
134
+ tt = Rake::TestTask.new do |t|
135
+ t.test_files = FileList['a.rb', 'b.rb']
136
+ end
137
+
138
+ assert_equal ["a.rb", 'b.rb'], tt.file_list.to_a
139
+ end
140
+
141
+ end
@@ -0,0 +1,142 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+ require 'rake/thread_pool'
3
+ require 'test/unit/assertions'
4
+
5
+ class TestRakeTestThreadPool < Rake::TestCase
6
+ include Rake
7
+
8
+ def test_pool_executes_in_current_thread_for_zero_threads
9
+ pool = ThreadPool.new(0)
10
+ f = pool.future { Thread.current }
11
+ pool.join
12
+ assert_equal Thread.current, f.value
13
+ end
14
+
15
+ def test_pool_executes_in_other_thread_for_pool_of_size_one
16
+ pool = ThreadPool.new(1)
17
+ f = pool.future { Thread.current }
18
+ pool.join
19
+ refute_equal Thread.current, f.value
20
+ end
21
+
22
+ def test_pool_executes_in_two_other_threads_for_pool_of_size_two
23
+ pool = ThreadPool.new(2)
24
+ threads = 2.times.map {
25
+ pool.future {
26
+ sleep 0.1
27
+ Thread.current
28
+ }
29
+ }.each { |f|
30
+ f.value
31
+ }
32
+
33
+ refute_equal threads[0], threads[1]
34
+ refute_equal Thread.current, threads[0]
35
+ refute_equal Thread.current, threads[1]
36
+ end
37
+
38
+ def test_pool_creates_the_correct_number_of_threads
39
+ pool = ThreadPool.new(2)
40
+ threads = Set.new
41
+ t_mutex = Mutex.new
42
+ 10.times.each do
43
+ pool.future do
44
+ sleep 0.02
45
+ t_mutex.synchronize { threads << Thread.current }
46
+ end
47
+ end
48
+ pool.join
49
+ assert_equal 2, threads.count
50
+ end
51
+
52
+ def test_pool_future_does_not_duplicate_arguments
53
+ pool = ThreadPool.new(2)
54
+ obj = Object.new
55
+ captured = nil
56
+ pool.future(obj) { |var| captured = var }
57
+ pool.join
58
+ assert_equal obj, captured
59
+ end
60
+
61
+ def test_pool_join_empties_queue
62
+ pool = ThreadPool.new(2)
63
+ repeat = 25
64
+ repeat.times {
65
+ pool.future do
66
+ repeat.times {
67
+ pool.future do
68
+ repeat.times {
69
+ pool.future do end
70
+ }
71
+ end
72
+ }
73
+ end
74
+ }
75
+
76
+ pool.join
77
+ assert_equal(
78
+ true,
79
+ pool.__send__(:__queue__).empty?,
80
+ "queue should be empty")
81
+ end
82
+
83
+ CustomError = Class.new(StandardError)
84
+
85
+ # test that throwing an exception way down in the blocks propagates
86
+ # to the top
87
+ def test_exceptions
88
+ pool = ThreadPool.new(10)
89
+
90
+ deep_exception_block = lambda do |count|
91
+ raise CustomError if count < 1
92
+ pool.future(count - 1, &deep_exception_block).value
93
+ end
94
+
95
+ assert_raises(CustomError) do
96
+ pool.future(2, &deep_exception_block).value
97
+ end
98
+ end
99
+
100
+ def test_pool_prevents_deadlock
101
+ pool = ThreadPool.new(5)
102
+
103
+ common_dependency_a = pool.future { sleep 0.2 }
104
+ futures_a = 10.times.map {
105
+ pool.future {
106
+ common_dependency_a.value
107
+ sleep(rand() * 0.01)
108
+ }
109
+ }
110
+
111
+ common_dependency_b = pool.future { futures_a.each { |f| f.value } }
112
+ futures_b = 10.times.map {
113
+ pool.future {
114
+ common_dependency_b.value
115
+ sleep(rand() * 0.01)
116
+ }
117
+ }
118
+
119
+ futures_b.each { |f| f.value }
120
+ pool.join
121
+ end
122
+
123
+ def test_pool_reports_correct_results
124
+ pool = ThreadPool.new(7)
125
+
126
+ a = 18
127
+ b = 5
128
+ c = 3
129
+
130
+ result = a.times.map do
131
+ pool.future do
132
+ b.times.map do
133
+ pool.future { sleep rand * 0.001; c }
134
+ end.reduce(0) { |m, f| m + f.value }
135
+ end
136
+ end.reduce(0) { |m, f| m + f.value }
137
+
138
+ assert_equal a * b * c, result
139
+ pool.join
140
+ end
141
+
142
+ end