rake 10.5.0 → 13.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +5 -5
  2. data/History.rdoc +2032 -288
  3. data/README.rdoc +40 -24
  4. data/doc/jamis.rb +1 -0
  5. data/doc/rake.1 +139 -124
  6. data/doc/rakefile.rdoc +2 -4
  7. data/{bin → exe}/rake +1 -7
  8. data/lib/rake/application.rb +131 -90
  9. data/lib/rake/backtrace.rb +3 -2
  10. data/lib/rake/clean.rb +7 -5
  11. data/lib/rake/cloneable.rb +1 -0
  12. data/lib/rake/cpu_counter.rb +10 -28
  13. data/lib/rake/default_loader.rb +1 -0
  14. data/lib/rake/dsl_definition.rb +5 -11
  15. data/lib/rake/early_time.rb +1 -0
  16. data/lib/rake/ext/core.rb +1 -0
  17. data/lib/rake/ext/string.rb +22 -21
  18. data/lib/rake/file_creation_task.rb +4 -3
  19. data/lib/rake/file_list.rb +34 -27
  20. data/lib/rake/file_task.rb +12 -4
  21. data/lib/rake/file_utils.rb +38 -32
  22. data/lib/rake/file_utils_ext.rb +8 -18
  23. data/lib/rake/invocation_chain.rb +1 -0
  24. data/lib/rake/invocation_exception_mixin.rb +1 -0
  25. data/lib/rake/late_time.rb +2 -1
  26. data/lib/rake/linked_list.rb +24 -15
  27. data/lib/rake/loaders/makefile.rb +5 -4
  28. data/lib/rake/multi_task.rb +2 -1
  29. data/lib/rake/name_space.rb +1 -1
  30. data/lib/rake/packagetask.rb +40 -17
  31. data/lib/rake/phony.rb +2 -1
  32. data/lib/rake/private_reader.rb +1 -0
  33. data/lib/rake/promise.rb +13 -12
  34. data/lib/rake/pseudo_status.rb +1 -0
  35. data/lib/rake/rake_module.rb +30 -1
  36. data/lib/rake/rake_test_loader.rb +9 -4
  37. data/lib/rake/rule_recursion_overflow_error.rb +2 -2
  38. data/lib/rake/scope.rb +3 -2
  39. data/lib/rake/task.rb +82 -31
  40. data/lib/rake/task_argument_error.rb +1 -0
  41. data/lib/rake/task_arguments.rb +15 -4
  42. data/lib/rake/task_manager.rb +56 -32
  43. data/lib/rake/tasklib.rb +2 -14
  44. data/lib/rake/testtask.rb +37 -61
  45. data/lib/rake/thread_history_display.rb +4 -3
  46. data/lib/rake/thread_pool.rb +16 -17
  47. data/lib/rake/trace_output.rb +2 -1
  48. data/lib/rake/version.rb +4 -1
  49. data/lib/rake/win32.rb +10 -15
  50. data/lib/rake.rb +35 -43
  51. data/rake.gemspec +100 -0
  52. metadata +27 -223
  53. data/.autotest +0 -7
  54. data/.rubocop.yml +0 -27
  55. data/.togglerc +0 -7
  56. data/CONTRIBUTING.rdoc +0 -38
  57. data/Manifest.txt +0 -166
  58. data/Rakefile +0 -81
  59. data/doc/release_notes/rake-0.4.14.rdoc +0 -23
  60. data/doc/release_notes/rake-0.4.15.rdoc +0 -35
  61. data/doc/release_notes/rake-0.5.0.rdoc +0 -53
  62. data/doc/release_notes/rake-0.5.3.rdoc +0 -78
  63. data/doc/release_notes/rake-0.5.4.rdoc +0 -46
  64. data/doc/release_notes/rake-0.6.0.rdoc +0 -141
  65. data/doc/release_notes/rake-0.7.0.rdoc +0 -119
  66. data/doc/release_notes/rake-0.7.1.rdoc +0 -59
  67. data/doc/release_notes/rake-0.7.2.rdoc +0 -121
  68. data/doc/release_notes/rake-0.7.3.rdoc +0 -47
  69. data/doc/release_notes/rake-0.8.0.rdoc +0 -114
  70. data/doc/release_notes/rake-0.8.2.rdoc +0 -165
  71. data/doc/release_notes/rake-0.8.3.rdoc +0 -112
  72. data/doc/release_notes/rake-0.8.4.rdoc +0 -147
  73. data/doc/release_notes/rake-0.8.5.rdoc +0 -53
  74. data/doc/release_notes/rake-0.8.6.rdoc +0 -37
  75. data/doc/release_notes/rake-0.8.7.rdoc +0 -55
  76. data/doc/release_notes/rake-0.9.0.rdoc +0 -112
  77. data/doc/release_notes/rake-0.9.1.rdoc +0 -52
  78. data/doc/release_notes/rake-0.9.2.2.rdoc +0 -55
  79. data/doc/release_notes/rake-0.9.2.rdoc +0 -49
  80. data/doc/release_notes/rake-0.9.3.rdoc +0 -102
  81. data/doc/release_notes/rake-0.9.4.rdoc +0 -60
  82. data/doc/release_notes/rake-0.9.5.rdoc +0 -55
  83. data/doc/release_notes/rake-0.9.6.rdoc +0 -64
  84. data/doc/release_notes/rake-10.0.0.rdoc +0 -178
  85. data/doc/release_notes/rake-10.0.1.rdoc +0 -58
  86. data/doc/release_notes/rake-10.0.2.rdoc +0 -53
  87. data/doc/release_notes/rake-10.0.3.rdoc +0 -191
  88. data/doc/release_notes/rake-10.1.0.rdoc +0 -61
  89. data/lib/rake/alt_system.rb +0 -110
  90. data/lib/rake/contrib/.document +0 -1
  91. data/lib/rake/contrib/compositepublisher.rb +0 -21
  92. data/lib/rake/contrib/ftptools.rb +0 -137
  93. data/lib/rake/contrib/publisher.rb +0 -81
  94. data/lib/rake/contrib/rubyforgepublisher.rb +0 -18
  95. data/lib/rake/contrib/sshpublisher.rb +0 -61
  96. data/lib/rake/contrib/sys.rb +0 -4
  97. data/lib/rake/ext/module.rb +0 -2
  98. data/lib/rake/ext/pathname.rb +0 -25
  99. data/lib/rake/ext/time.rb +0 -18
  100. data/lib/rake/gempackagetask.rb +0 -4
  101. data/lib/rake/pathmap.rb +0 -3
  102. data/lib/rake/rdoctask.rb +0 -4
  103. data/lib/rake/ruby182_test_unit_fix.rb +0 -29
  104. data/lib/rake/runtest.rb +0 -27
  105. data/rakelib/publish.rake +0 -20
  106. data/rakelib/test_times.rake +0 -25
  107. data/test/file_creation.rb +0 -34
  108. data/test/helper.rb +0 -129
  109. data/test/support/rakefile_definitions.rb +0 -478
  110. data/test/support/ruby_runner.rb +0 -34
  111. data/test/test_private_reader.rb +0 -42
  112. data/test/test_rake.rb +0 -40
  113. data/test/test_rake_application.rb +0 -643
  114. data/test/test_rake_application_options.rb +0 -468
  115. data/test/test_rake_backtrace.rb +0 -119
  116. data/test/test_rake_clean.rb +0 -61
  117. data/test/test_rake_cpu_counter.rb +0 -68
  118. data/test/test_rake_definitions.rb +0 -84
  119. data/test/test_rake_directory_task.rb +0 -76
  120. data/test/test_rake_dsl.rb +0 -40
  121. data/test/test_rake_early_time.rb +0 -31
  122. data/test/test_rake_extension.rb +0 -59
  123. data/test/test_rake_file_creation_task.rb +0 -56
  124. data/test/test_rake_file_list.rb +0 -670
  125. data/test/test_rake_file_list_path_map.rb +0 -8
  126. data/test/test_rake_file_task.rb +0 -197
  127. data/test/test_rake_file_utils.rb +0 -314
  128. data/test/test_rake_ftp_file.rb +0 -74
  129. data/test/test_rake_functional.rb +0 -482
  130. data/test/test_rake_invocation_chain.rb +0 -64
  131. data/test/test_rake_late_time.rb +0 -18
  132. data/test/test_rake_linked_list.rb +0 -84
  133. data/test/test_rake_makefile_loader.rb +0 -46
  134. data/test/test_rake_multi_task.rb +0 -64
  135. data/test/test_rake_name_space.rb +0 -57
  136. data/test/test_rake_package_task.rb +0 -79
  137. data/test/test_rake_path_map.rb +0 -168
  138. data/test/test_rake_path_map_explode.rb +0 -34
  139. data/test/test_rake_path_map_partial.rb +0 -18
  140. data/test/test_rake_pathname_extensions.rb +0 -15
  141. data/test/test_rake_pseudo_status.rb +0 -21
  142. data/test/test_rake_rake_test_loader.rb +0 -20
  143. data/test/test_rake_reduce_compat.rb +0 -26
  144. data/test/test_rake_require.rb +0 -40
  145. data/test/test_rake_rules.rb +0 -388
  146. data/test/test_rake_scope.rb +0 -44
  147. data/test/test_rake_task.rb +0 -393
  148. data/test/test_rake_task_argument_parsing.rb +0 -119
  149. data/test/test_rake_task_arguments.rb +0 -127
  150. data/test/test_rake_task_lib.rb +0 -9
  151. data/test/test_rake_task_manager.rb +0 -178
  152. data/test/test_rake_task_manager_argument_resolution.rb +0 -19
  153. data/test/test_rake_task_with_arguments.rb +0 -172
  154. data/test/test_rake_test_task.rb +0 -146
  155. data/test/test_rake_thread_pool.rb +0 -145
  156. data/test/test_rake_top_level_functions.rb +0 -71
  157. data/test/test_rake_win32.rb +0 -72
  158. data/test/test_thread_history_display.rb +0 -101
  159. data/test/test_trace_output.rb +0 -52
@@ -1,388 +0,0 @@
1
- require File.expand_path('../helper', __FILE__)
2
- require 'fileutils'
3
-
4
- class TestRakeRules < Rake::TestCase
5
- include Rake
6
-
7
- SRCFILE = "abc.c"
8
- SRCFILE2 = "xyz.c"
9
- FTNFILE = "abc.f"
10
- OBJFILE = "abc.o"
11
- FOOFILE = "foo"
12
- DOTFOOFILE = ".foo"
13
-
14
- def setup
15
- super
16
-
17
- Task.clear
18
- @runs = []
19
- end
20
-
21
- def test_multiple_rules1
22
- create_file(FTNFILE)
23
- delete_file(SRCFILE)
24
- delete_file(OBJFILE)
25
- rule(/\.o$/ => ['.c']) do @runs << :C end
26
- rule(/\.o$/ => ['.f']) do @runs << :F end
27
- t = Task[OBJFILE]
28
- t.invoke
29
- Task[OBJFILE].invoke
30
- assert_equal [:F], @runs
31
- end
32
-
33
- def test_multiple_rules2
34
- create_file(FTNFILE)
35
- delete_file(SRCFILE)
36
- delete_file(OBJFILE)
37
- rule(/\.o$/ => ['.f']) do @runs << :F end
38
- rule(/\.o$/ => ['.c']) do @runs << :C end
39
- Task[OBJFILE].invoke
40
- assert_equal [:F], @runs
41
- end
42
-
43
- def test_create_with_source
44
- create_file(SRCFILE)
45
- rule(/\.o$/ => ['.c']) do |t|
46
- @runs << t.name
47
- assert_equal OBJFILE, t.name
48
- assert_equal SRCFILE, t.source
49
- end
50
- Task[OBJFILE].invoke
51
- assert_equal [OBJFILE], @runs
52
- end
53
-
54
- def test_single_dependent
55
- create_file(SRCFILE)
56
- rule(/\.o$/ => '.c') do |t|
57
- @runs << t.name
58
- end
59
- Task[OBJFILE].invoke
60
- assert_equal [OBJFILE], @runs
61
- end
62
-
63
- def test_rule_can_be_created_by_string
64
- create_file(SRCFILE)
65
- rule '.o' => ['.c'] do |t|
66
- @runs << t.name
67
- end
68
- Task[OBJFILE].invoke
69
- assert_equal [OBJFILE], @runs
70
- end
71
-
72
- def test_rule_prereqs_can_be_created_by_string
73
- create_file(SRCFILE)
74
- rule '.o' => '.c' do |t|
75
- @runs << t.name
76
- end
77
- Task[OBJFILE].invoke
78
- assert_equal [OBJFILE], @runs
79
- end
80
-
81
- def test_plain_strings_as_dependents_refer_to_files
82
- create_file(SRCFILE)
83
- rule '.o' => SRCFILE do |t|
84
- @runs << t.name
85
- end
86
- Task[OBJFILE].invoke
87
- assert_equal [OBJFILE], @runs
88
- end
89
-
90
- def test_file_names_beginning_with_dot_can_be_tricked_into_referring_to_file
91
- verbose(false) do
92
- create_file('.foo')
93
- rule '.o' => "./.foo" do |t|
94
- @runs << t.name
95
- end
96
- Task[OBJFILE].invoke
97
- assert_equal [OBJFILE], @runs
98
- end
99
- end
100
-
101
- def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
102
- verbose(false) do
103
-
104
- create_file(".foo")
105
- rule '.o' => lambda { ".foo" } do |t|
106
- @runs << "#{t.name} - #{t.source}"
107
- end
108
- Task[OBJFILE].invoke
109
- assert_equal ["#{OBJFILE} - .foo"], @runs
110
- end
111
- end
112
-
113
- def test_file_names_containing_percent_can_be_wrapped_in_lambda
114
- verbose(false) do
115
- create_file("foo%x")
116
- rule '.o' => lambda { "foo%x" } do |t|
117
- @runs << "#{t.name} - #{t.source}"
118
- end
119
- Task[OBJFILE].invoke
120
- assert_equal ["#{OBJFILE} - foo%x"], @runs
121
- end
122
- end
123
-
124
- def test_non_extension_rule_name_refers_to_file
125
- verbose(false) do
126
- create_file("abc.c")
127
- rule "abc" => '.c' do |t|
128
- @runs << t.name
129
- end
130
- Task["abc"].invoke
131
- assert_equal ["abc"], @runs
132
- end
133
- end
134
-
135
- def test_pathmap_automatically_applies_to_name
136
- verbose(false) do
137
- create_file("zzabc.c")
138
- rule ".o" => 'zz%{x,a}n.c' do |t|
139
- @runs << "#{t.name} - #{t.source}"
140
- end
141
- Task["xbc.o"].invoke
142
- assert_equal ["xbc.o - zzabc.c"], @runs
143
- end
144
- end
145
-
146
- def test_plain_strings_are_just_filenames
147
- verbose(false) do
148
- create_file("plainname")
149
- rule ".o" => 'plainname' do |t|
150
- @runs << "#{t.name} - #{t.source}"
151
- end
152
- Task["xbc.o"].invoke
153
- assert_equal ["xbc.o - plainname"], @runs
154
- end
155
- end
156
-
157
- def test_rule_runs_when_explicit_task_has_no_actions
158
- create_file(SRCFILE)
159
- create_file(SRCFILE2)
160
- delete_file(OBJFILE)
161
- rule '.o' => '.c' do |t|
162
- @runs << t.source
163
- end
164
- file OBJFILE => [SRCFILE2]
165
- Task[OBJFILE].invoke
166
- assert_equal [SRCFILE], @runs
167
- end
168
-
169
- def test_close_matches_on_name_do_not_trigger_rule
170
- create_file("x.c")
171
- rule '.o' => ['.c'] do |t|
172
- @runs << t.name
173
- end
174
- assert_raises(RuntimeError) { Task['x.obj'].invoke }
175
- assert_raises(RuntimeError) { Task['x.xyo'].invoke }
176
- end
177
-
178
- def test_rule_rebuilds_obj_when_source_is_newer
179
- create_timed_files(OBJFILE, SRCFILE)
180
- rule(/\.o$/ => ['.c']) do
181
- @runs << :RULE
182
- end
183
- Task[OBJFILE].invoke
184
- assert_equal [:RULE], @runs
185
- end
186
-
187
- def test_rule_with_two_sources_runs_if_both_sources_are_present
188
- create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
189
- rule OBJFILE => [lambda { SRCFILE }, lambda { SRCFILE2 }] do
190
- @runs << :RULE
191
- end
192
- Task[OBJFILE].invoke
193
- assert_equal [:RULE], @runs
194
- end
195
-
196
- def test_rule_with_two_sources_but_one_missing_does_not_run
197
- create_timed_files(OBJFILE, SRCFILE)
198
- delete_file(SRCFILE2)
199
- rule OBJFILE => [lambda { SRCFILE }, lambda { SRCFILE2 }] do
200
- @runs << :RULE
201
- end
202
- Task[OBJFILE].invoke
203
- assert_equal [], @runs
204
- end
205
-
206
- def test_rule_with_two_sources_builds_both_sources
207
- task 'x.aa'
208
- task 'x.bb'
209
- rule '.a' => '.aa' do
210
- @runs << "A"
211
- end
212
- rule '.b' => '.bb' do
213
- @runs << "B"
214
- end
215
- rule ".c" => ['.a', '.b'] do
216
- @runs << "C"
217
- end
218
- Task["x.c"].invoke
219
- assert_equal ["A", "B", "C"], @runs.sort
220
- end
221
-
222
- def test_second_rule_runs_when_first_rule_doesnt
223
- create_timed_files(OBJFILE, SRCFILE)
224
- delete_file(SRCFILE2)
225
- rule OBJFILE => [lambda { SRCFILE }, lambda { SRCFILE2 }] do
226
- @runs << :RULE1
227
- end
228
- rule OBJFILE => [lambda { SRCFILE }] do
229
- @runs << :RULE2
230
- end
231
- Task[OBJFILE].invoke
232
- assert_equal [:RULE2], @runs
233
- end
234
-
235
- def test_second_rule_doest_run_if_first_triggers
236
- create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
237
- rule OBJFILE => [lambda { SRCFILE }, lambda { SRCFILE2 }] do
238
- @runs << :RULE1
239
- end
240
- rule OBJFILE => [lambda { SRCFILE }] do
241
- @runs << :RULE2
242
- end
243
- Task[OBJFILE].invoke
244
- assert_equal [:RULE1], @runs
245
- end
246
-
247
- def test_second_rule_doest_run_if_first_triggers_with_reversed_rules
248
- create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
249
- rule OBJFILE => [lambda { SRCFILE }] do
250
- @runs << :RULE1
251
- end
252
- rule OBJFILE => [lambda { SRCFILE }, lambda { SRCFILE2 }] do
253
- @runs << :RULE2
254
- end
255
- Task[OBJFILE].invoke
256
- assert_equal [:RULE1], @runs
257
- end
258
-
259
- def test_rule_with_proc_dependent_will_trigger
260
- mkdir_p("src/jw")
261
- create_file("src/jw/X.java")
262
- rule %r(classes/.*\.class) => [
263
- proc { |fn| fn.pathmap("%{classes,src}d/%n.java") }
264
- ] do |task|
265
- assert_equal task.name, 'classes/jw/X.class'
266
- assert_equal task.source, 'src/jw/X.java'
267
- @runs << :RULE
268
- end
269
- Task['classes/jw/X.class'].invoke
270
- assert_equal [:RULE], @runs
271
- ensure
272
- rm_r("src", :verbose=>false) rescue nil
273
- end
274
-
275
- def test_proc_returning_lists_are_flattened_into_prereqs
276
- ran = false
277
- mkdir_p("flatten")
278
- create_file("flatten/a.txt")
279
- task 'flatten/b.data' do |t|
280
- ran = true
281
- touch t.name, :verbose => false
282
- end
283
- rule '.html' =>
284
- proc { |fn|
285
- [
286
- fn.ext("txt"),
287
- "flatten/b.data"
288
- ]
289
- } do |task|
290
- end
291
- Task['flatten/a.html'].invoke
292
- assert ran, "Should have triggered flattened dependency"
293
- ensure
294
- rm_r("flatten", :verbose=>false) rescue nil
295
- end
296
-
297
- def test_recursive_rules_will_work_as_long_as_they_terminate
298
- actions = []
299
- create_file("abc.xml")
300
- rule '.y' => '.xml' do actions << 'y' end
301
- rule '.c' => '.y' do actions << 'c'end
302
- rule '.o' => '.c' do actions << 'o'end
303
- rule '.exe' => '.o' do actions << 'exe'end
304
- Task["abc.exe"].invoke
305
- assert_equal ['y', 'c', 'o', 'exe'], actions
306
- end
307
-
308
- def test_recursive_rules_that_dont_terminate_will_overflow
309
- create_file("a.a")
310
- prev = 'a'
311
- ('b'..'z').each do |letter|
312
- rule ".#{letter}" => ".#{prev}" do |t| puts "#{t.name}" end
313
- prev = letter
314
- end
315
- ex = assert_raises(Rake::RuleRecursionOverflowError) {
316
- Task["a.z"].invoke
317
- }
318
- assert_match(/a\.z => a.y/, ex.message)
319
- end
320
-
321
- def test_rules_with_bad_dependents_will_fail
322
- rule "a" => [1] do |t| puts t.name end
323
- assert_raises(RuntimeError) do Task['a'].invoke end
324
- end
325
-
326
- def test_string_rule_with_args
327
- delete_file(OBJFILE)
328
- create_file(SRCFILE)
329
- rule '.o', [:a] => SRCFILE do |t, args|
330
- assert_equal 'arg', args.a
331
- end
332
- Task[OBJFILE].invoke('arg')
333
- end
334
-
335
- def test_regex_rule_with_args
336
- delete_file(OBJFILE)
337
- create_file(SRCFILE)
338
- rule(/.o$/, [:a] => SRCFILE) do |t, args|
339
- assert_equal 'arg', args.a
340
- end
341
- Task[OBJFILE].invoke('arg')
342
- end
343
-
344
- def test_string_rule_with_args_and_lambda_prereq
345
- delete_file(OBJFILE)
346
- create_file(SRCFILE)
347
- rule '.o', [:a] => [lambda{SRCFILE}]do |t, args|
348
- assert_equal 'arg', args.a
349
- end
350
- Task[OBJFILE].invoke('arg')
351
- end
352
-
353
- def test_regex_rule_with_args_and_lambda_prereq
354
- delete_file(OBJFILE)
355
- create_file(SRCFILE)
356
- rule(/.o$/, [:a] => [lambda{SRCFILE}]) do |t, args|
357
- assert_equal 'arg', args.a
358
- end
359
- Task[OBJFILE].invoke('arg')
360
- end
361
-
362
- def test_rule_with_method_prereq
363
- create_file(".foo")
364
- obj = Object.new
365
- def obj.find_prereq
366
- ".foo"
367
- end
368
- rule '.o' => obj.method(:find_prereq) do |t|
369
- @runs << "#{t.name} - #{t.source}"
370
- end
371
- Task[OBJFILE].invoke
372
- assert_equal ["#{OBJFILE} - .foo"], @runs
373
- end
374
-
375
- def test_rule_with_one_arg_method_prereq
376
- create_file(SRCFILE)
377
- obj = Object.new
378
- def obj.find_prereq(task_name)
379
- task_name.ext(".c")
380
- end
381
- rule '.o' => obj.method(:find_prereq) do |t|
382
- @runs << "#{t.name} - #{t.source}"
383
- end
384
- Task[OBJFILE].invoke
385
- assert_equal ["#{OBJFILE} - abc.c"], @runs
386
- end
387
-
388
- end
@@ -1,44 +0,0 @@
1
- require File.expand_path('../helper', __FILE__)
2
-
3
- class TestRakeScope < Rake::TestCase
4
- include Rake
5
-
6
- def test_path_against_empty_scope
7
- scope = Scope.make
8
- assert_equal scope, Scope::EMPTY
9
- assert_equal scope.path, ""
10
- end
11
-
12
- def test_path_against_one_element
13
- scope = Scope.make(:one)
14
- assert_equal "one", scope.path
15
- end
16
-
17
- def test_path_against_two_elements
18
- scope = Scope.make(:inner, :outer)
19
- assert_equal "outer:inner", scope.path
20
- end
21
-
22
- def test_path_with_task_name
23
- scope = Scope.make(:inner, :outer)
24
- assert_equal "outer:inner:task", scope.path_with_task_name("task")
25
- end
26
-
27
- def test_path_with_task_name_against_empty_scope
28
- scope = Scope.make
29
- assert_equal "task", scope.path_with_task_name("task")
30
- end
31
-
32
- def test_conj_against_two_elements
33
- scope = Scope.make.conj("B").conj("A")
34
- assert_equal Scope.make("A", "B"), scope
35
- end
36
-
37
- def test_trim
38
- scope = Scope.make("A", "B")
39
- assert_equal scope, scope.trim(0)
40
- assert_equal scope.tail, scope.trim(1)
41
- assert_equal scope.tail.tail, scope.trim(2)
42
- assert_equal scope.tail.tail, scope.trim(3)
43
- end
44
- end