75
77
assert_equal [OBJFILE], @runs
78
def test_rule_and_no_action_task
80
def test_rule_prereqs_can_be_created_by_string
82
rule '.o' => '.c' do |t|
86
assert_equal [OBJFILE], @runs
89
def test_plain_strings_as_dependents_refer_to_files
91
rule '.o' => SRCFILE do |t|
95
assert_equal [OBJFILE], @runs
98
def test_file_names_beginning_with_dot_can_be_tricked_into_refering_to_file
102
rule '.o' => "./.foo" do |t|
106
assert_equal [OBJFILE], @runs
111
def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
115
rule '.o' => lambda{".foo"} do |t|
119
assert_equal [OBJFILE], @runs
124
def test_non_extension_rule_name_refers_to_file
128
rule "abc" => '.c' do |t|
132
assert_equal ["abc"], @runs
137
def test_pathmap_automatically_applies_to_name
141
rule ".o" => '%{x,a}n.c' do |t|
142
@runs << "#{t.name} - #{t.source}"
145
assert_equal ["xbc.o - abc.c"], @runs
150
def test_rule_runs_when_explicit_task_has_no_actions
79
151
create_file(SRCFILE)
80
152
create_file(SRCFILE2)
81
153
delete_file(OBJFILE)
96
168
assert_raises(RuntimeError) { Task['testdata/x.xyo'].invoke }
99
def test_precedence_rule_vs_implicit
171
def test_rule_rebuilds_obj_when_source_is_newer
100
172
create_timed_files(OBJFILE, SRCFILE)
101
173
rule(/\.o$/ => ['.c']) do
105
177
assert_equal [:RULE], @runs
108
def test_rule_with_two_sources
180
def test_rule_with_two_sources_runs_if_both_sources_are_present
109
181
create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
110
182
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
114
186
assert_equal [:RULE], @runs
117
def test_rule_with_two_sources_but_one_missing
189
def test_rule_with_two_sources_but_one_missing_does_not_run
118
190
create_timed_files(OBJFILE, SRCFILE)
119
191
delete_file(SRCFILE2)
120
192
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
137
209
assert_equal [:RULE2], @runs
140
def test_rule_ordering_finding_first_rule
141
create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
142
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
145
rule OBJFILE => [lambda{SRCFILE}] do
149
assert_equal [:RULE1], @runs
152
def test_rule_ordering_not_finding_second_rule
153
create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
154
rule OBJFILE => [lambda{SRCFILE}] do
157
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
161
assert_equal [:RULE1], @runs
164
def test_proc_dependent
212
def test_second_rule_doest_run_if_first_triggers
213
create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
214
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
217
rule OBJFILE => [lambda{SRCFILE}] do
221
assert_equal [:RULE1], @runs
224
def test_second_rule_doest_run_if_first_triggers_with_reversed_rules
225
create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
226
rule OBJFILE => [lambda{SRCFILE}] do
229
rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
233
assert_equal [:RULE1], @runs
236
def test_rule_with_proc_dependent_will_trigger
166
238
File.makedirs("testdata/src/jw")
167
239
create_file("testdata/src/jw/X.java")
168
240
rule %r(classes/.*\.class) => [
169
proc { |fn| fn.sub(/^classes/, 'testdata/src').sub(/\.class$/, '.java') }
241
proc { |fn| fn.pathmap("%{classes,testdata/src}d/%n.java") }
171
243
assert_equal task.name, 'classes/jw/X.class'
172
244
assert_equal task.source, 'testdata/src/jw/X.java'
175
247
Task['classes/jw/X.class'].invoke
176
assert ran, "Should have triggered rule"
248
assert_equal [:RULE], @runs
178
250
rm_r("testdata/src", :verbose=>false) rescue nil
211
283
assert_equal ['y', 'c', 'o', 'exe'], actions
214
def test_recursive_overflow
286
def test_recursive_rules_that_dont_terminate_will_overflow
215
287
create_file("testdata/a.a")
217
289
('b'..'z').each do |letter|