craigmarksmith-rake 0.8.3.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +427 -0
- data/MIT-LICENSE +21 -0
- data/README +196 -0
- data/Rakefile +416 -0
- data/TODO +20 -0
- data/bin/rake +31 -0
- data/doc/command_line_usage.rdoc +102 -0
- data/doc/example/Rakefile1 +38 -0
- data/doc/example/Rakefile2 +35 -0
- data/doc/example/a.c +6 -0
- data/doc/example/b.c +6 -0
- data/doc/example/main.c +11 -0
- data/doc/glossary.rdoc +51 -0
- data/doc/jamis.rb +591 -0
- data/doc/proto_rake.rdoc +127 -0
- data/doc/rake.1.gz +0 -0
- data/doc/rakefile.rdoc +534 -0
- data/doc/rational.rdoc +151 -0
- data/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/install.rb +88 -0
- data/lib/rake/classic_namespace.rb +8 -0
- data/lib/rake/clean.rb +33 -0
- data/lib/rake/contrib/compositepublisher.rb +24 -0
- data/lib/rake/contrib/ftptools.rb +153 -0
- data/lib/rake/contrib/publisher.rb +75 -0
- data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/lib/rake/contrib/sshpublisher.rb +47 -0
- data/lib/rake/contrib/sys.rb +209 -0
- data/lib/rake/gempackagetask.rb +97 -0
- data/lib/rake/loaders/makefile.rb +42 -0
- data/lib/rake/packagetask.rb +184 -0
- data/lib/rake/rake_test_loader.rb +5 -0
- data/lib/rake/rdoctask.rb +209 -0
- data/lib/rake/ruby182_test_unit_fix.rb +23 -0
- data/lib/rake/runtest.rb +23 -0
- data/lib/rake/tasklib.rb +23 -0
- data/lib/rake/testtask.rb +161 -0
- data/lib/rake/win32.rb +55 -0
- data/lib/rake.rb +2519 -0
- data/test/capture_stdout.rb +26 -0
- data/test/check_expansion.rb +5 -0
- data/test/contrib/test_sys.rb +47 -0
- data/test/data/chains/Rakefile +15 -0
- data/test/data/default/Rakefile +19 -0
- data/test/data/dryrun/Rakefile +22 -0
- data/test/data/file_creation_task/Rakefile +33 -0
- data/test/data/imports/Rakefile +19 -0
- data/test/data/imports/deps.mf +1 -0
- data/test/data/multidesc/Rakefile +17 -0
- data/test/data/namespace/Rakefile +57 -0
- data/test/data/rakelib/test1.rb +3 -0
- data/test/data/rbext/rakefile.rb +3 -0
- data/test/data/sample.mf +14 -0
- data/test/data/statusreturn/Rakefile +8 -0
- data/test/data/unittest/Rakefile +1 -0
- data/test/filecreation.rb +32 -0
- data/test/functional.rb +15 -0
- data/test/in_environment.rb +30 -0
- data/test/rake_test_setup.rb +24 -0
- data/test/reqfile.rb +3 -0
- data/test/reqfile2.rb +3 -0
- data/test/session_functional.rb +339 -0
- data/test/shellcommand.rb +3 -0
- data/test/test_application.rb +690 -0
- data/test/test_clean.rb +14 -0
- data/test/test_definitions.rb +85 -0
- data/test/test_earlytime.rb +35 -0
- data/test/test_extension.rb +63 -0
- data/test/test_file_creation_task.rb +62 -0
- data/test/test_file_task.rb +143 -0
- data/test/test_filelist.rb +623 -0
- data/test/test_fileutils.rb +251 -0
- data/test/test_ftp.rb +59 -0
- data/test/test_invocation_chain.rb +81 -0
- data/test/test_makefile_loader.rb +26 -0
- data/test/test_multitask.rb +45 -0
- data/test/test_namespace.rb +55 -0
- data/test/test_package_task.rb +118 -0
- data/test/test_pathmap.rb +210 -0
- data/test/test_rake.rb +41 -0
- data/test/test_rdoc_task.rb +88 -0
- data/test/test_require.rb +35 -0
- data/test/test_rules.rb +349 -0
- data/test/test_task_arguments.rb +89 -0
- data/test/test_task_manager.rb +173 -0
- data/test/test_tasklib.rb +12 -0
- data/test/test_tasks.rb +374 -0
- data/test/test_test_task.rb +77 -0
- data/test/test_top_level_functions.rb +86 -0
- data/test/test_win32.rb +72 -0
- metadata +186 -0
data/test/test_clean.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake/clean'
|
5
|
+
|
6
|
+
class TestClean < Test::Unit::TestCase
|
7
|
+
include Rake
|
8
|
+
def test_clean
|
9
|
+
assert Task['clean'], "Should define clean"
|
10
|
+
assert Task['clobber'], "Should define clobber"
|
11
|
+
assert Task['clobber'].prerequisites.include?("clean"),
|
12
|
+
"Clobber should require clean"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rake'
|
6
|
+
require 'test/filecreation'
|
7
|
+
require 'test/rake_test_setup'
|
8
|
+
|
9
|
+
######################################################################
|
10
|
+
class TestDefinitions < Test::Unit::TestCase
|
11
|
+
include Rake
|
12
|
+
include TestMethods
|
13
|
+
|
14
|
+
EXISTINGFILE = "testdata/existing"
|
15
|
+
|
16
|
+
def setup
|
17
|
+
Task.clear
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_task
|
21
|
+
done = false
|
22
|
+
task :one => [:two] do done = true end
|
23
|
+
task :two
|
24
|
+
task :three => [:one, :two]
|
25
|
+
check_tasks(:one, :two, :three)
|
26
|
+
assert done, "Should be done"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_file_task
|
30
|
+
done = false
|
31
|
+
file "testdata/one" => "testdata/two" do done = true end
|
32
|
+
file "testdata/two"
|
33
|
+
file "testdata/three" => ["testdata/one", "testdata/two"]
|
34
|
+
check_tasks("testdata/one", "testdata/two", "testdata/three")
|
35
|
+
assert done, "Should be done"
|
36
|
+
end
|
37
|
+
|
38
|
+
def check_tasks(n1, n2, n3)
|
39
|
+
t = Task[n1]
|
40
|
+
assert Task === t, "Should be a Task"
|
41
|
+
assert_equal n1.to_s, t.name
|
42
|
+
assert_equal [n2.to_s], t.prerequisites.collect{|n| n.to_s}
|
43
|
+
t.invoke
|
44
|
+
t2 = Task[n2]
|
45
|
+
assert_equal FileList[], t2.prerequisites
|
46
|
+
t3 = Task[n3]
|
47
|
+
assert_equal [n1.to_s, n2.to_s], t3.prerequisites.collect{|n|n.to_s}
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_incremental_definitions
|
51
|
+
runs = []
|
52
|
+
task :t1 => [:t2] do runs << "A"; 4321 end
|
53
|
+
task :t1 => [:t3] do runs << "B"; 1234 end
|
54
|
+
task :t1 => [:t3]
|
55
|
+
task :t2
|
56
|
+
task :t3
|
57
|
+
Task[:t1].invoke
|
58
|
+
assert_equal ["A", "B"], runs
|
59
|
+
assert_equal ["t2", "t3"], Task[:t1].prerequisites
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_missing_dependencies
|
63
|
+
task :x => ["testdata/missing"]
|
64
|
+
assert_exception(RuntimeError) { Task[:x].invoke }
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_implicit_file_dependencies
|
68
|
+
runs = []
|
69
|
+
create_existing_file
|
70
|
+
task :y => [EXISTINGFILE] do |t| runs << t.name end
|
71
|
+
Task[:y].invoke
|
72
|
+
assert_equal runs, ['y']
|
73
|
+
end
|
74
|
+
|
75
|
+
private # ----------------------------------------------------------
|
76
|
+
|
77
|
+
def create_existing_file
|
78
|
+
Dir.mkdir File.dirname(EXISTINGFILE) unless
|
79
|
+
File.exist?(File.dirname(EXISTINGFILE))
|
80
|
+
open(EXISTINGFILE, "w") do |f| f.puts "HI" end unless
|
81
|
+
File.exist?(EXISTINGFILE)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
class TestEarlyTime < Test::Unit::TestCase
|
7
|
+
def test_create
|
8
|
+
early = Rake::EarlyTime.instance
|
9
|
+
time = Time.mktime(1970, 1, 1, 0, 0, 0)
|
10
|
+
assert early <= Time.now
|
11
|
+
assert early < Time.now
|
12
|
+
assert early != Time.now
|
13
|
+
assert Time.now > early
|
14
|
+
assert Time.now >= early
|
15
|
+
assert Time.now != early
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_equality
|
19
|
+
early = Rake::EarlyTime.instance
|
20
|
+
assert_equal early, early, "two early times should be equal"
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_original_time_compare_is_not_messed_up
|
24
|
+
t1 = Time.mktime(1970, 1, 1, 0, 0, 0)
|
25
|
+
t2 = Time.now
|
26
|
+
assert t1 < t2
|
27
|
+
assert t2 > t1
|
28
|
+
assert t1 == t1
|
29
|
+
assert t2 == t2
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_to_s
|
33
|
+
assert_equal "<EARLY TIME>", Rake::EARLY.to_s
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
######################################################################
|
8
|
+
class TestExtension < Test::Unit::TestCase
|
9
|
+
|
10
|
+
module Redirect
|
11
|
+
def error_redirect
|
12
|
+
old_err = $stderr
|
13
|
+
result = StringIO.new
|
14
|
+
$stderr = result
|
15
|
+
yield
|
16
|
+
result
|
17
|
+
ensure
|
18
|
+
$stderr = old_err
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Sample
|
23
|
+
extend Redirect
|
24
|
+
|
25
|
+
def duplicate_method
|
26
|
+
:original
|
27
|
+
end
|
28
|
+
|
29
|
+
OK_ERRS = error_redirect do
|
30
|
+
rake_extension("a") do
|
31
|
+
def ok_method
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
DUP_ERRS = error_redirect do
|
38
|
+
rake_extension("duplicate_method") do
|
39
|
+
def duplicate_method
|
40
|
+
:override
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_methods_actually_exist
|
47
|
+
sample = Sample.new
|
48
|
+
sample.ok_method
|
49
|
+
sample.duplicate_method
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_no_warning_when_defining_ok_method
|
53
|
+
assert_equal "", Sample::OK_ERRS.string
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_extension_complains_when_a_method_that_is_present
|
57
|
+
assert_match(/warning:/i, Sample::DUP_ERRS.string)
|
58
|
+
assert_match(/already exists/i, Sample::DUP_ERRS.string)
|
59
|
+
assert_match(/duplicate_method/i, Sample::DUP_ERRS.string)
|
60
|
+
assert_equal :original, Sample.new.duplicate_method
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rake'
|
6
|
+
require 'test/filecreation'
|
7
|
+
|
8
|
+
######################################################################
|
9
|
+
class TestFileCreationTask < Test::Unit::TestCase
|
10
|
+
include Rake
|
11
|
+
include FileCreation
|
12
|
+
|
13
|
+
DUMMY_DIR = 'testdata/dummy_dir'
|
14
|
+
|
15
|
+
def setup
|
16
|
+
Task.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
FileUtils.rm_rf DUMMY_DIR
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_file_needed
|
24
|
+
create_dir DUMMY_DIR
|
25
|
+
fc_task = Task[DUMMY_DIR]
|
26
|
+
assert_equal DUMMY_DIR, fc_task.name
|
27
|
+
FileUtils.rm_rf fc_task.name
|
28
|
+
assert fc_task.needed?, "file should be needed"
|
29
|
+
FileUtils.mkdir fc_task.name
|
30
|
+
assert_equal nil, fc_task.prerequisites.collect{|n| Task[n].timestamp}.max
|
31
|
+
assert ! fc_task.needed?, "file should not be needed"
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_directory
|
35
|
+
directory DUMMY_DIR
|
36
|
+
fc_task = Task[DUMMY_DIR]
|
37
|
+
assert_equal DUMMY_DIR, fc_task.name
|
38
|
+
assert FileCreationTask === fc_task
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_no_retriggers_on_filecreate_task
|
42
|
+
create_timed_files(OLDFILE, NEWFILE)
|
43
|
+
t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
|
44
|
+
t2 = Rake.application.intern(FileCreationTask, NEWFILE)
|
45
|
+
assert ! t2.needed?, "Should not need to build new file"
|
46
|
+
assert ! t1.needed?, "Should not need to rebuild old file because of new"
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_no_retriggers_on_file_task
|
50
|
+
create_timed_files(OLDFILE, NEWFILE)
|
51
|
+
t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
|
52
|
+
t2 = Rake.application.intern(FileCreationTask, NEWFILE)
|
53
|
+
assert ! t2.needed?, "Should not need to build new file"
|
54
|
+
assert ! t1.needed?, "Should not need to rebuild old file because of new"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_very_early_timestamp
|
58
|
+
t1 = Rake.application.intern(FileCreationTask, OLDFILE)
|
59
|
+
assert t1.timestamp < Time.now
|
60
|
+
assert t1.timestamp < Time.now - 1000000
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'rake'
|
6
|
+
require 'test/filecreation'
|
7
|
+
require 'test/rake_test_setup'
|
8
|
+
|
9
|
+
######################################################################
|
10
|
+
class TestFileTask < Test::Unit::TestCase
|
11
|
+
include Rake
|
12
|
+
include FileCreation
|
13
|
+
include TestMethods
|
14
|
+
|
15
|
+
def setup
|
16
|
+
Task.clear
|
17
|
+
@runs = Array.new
|
18
|
+
FileUtils.rm_f NEWFILE
|
19
|
+
FileUtils.rm_f OLDFILE
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_file_need
|
23
|
+
name = "testdata/dummy"
|
24
|
+
file name
|
25
|
+
ftask = Task[name]
|
26
|
+
assert_equal name.to_s, ftask.name
|
27
|
+
File.delete(ftask.name) rescue nil
|
28
|
+
assert ftask.needed?, "file should be needed"
|
29
|
+
open(ftask.name, "w") { |f| f.puts "HI" }
|
30
|
+
assert_equal nil, ftask.prerequisites.collect{|n| Task[n].timestamp}.max
|
31
|
+
assert ! ftask.needed?, "file should not be needed"
|
32
|
+
File.delete(ftask.name) rescue nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_file_times_new_depends_on_old
|
36
|
+
create_timed_files(OLDFILE, NEWFILE)
|
37
|
+
|
38
|
+
t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
|
39
|
+
t2 = Rake.application.intern(FileTask, OLDFILE)
|
40
|
+
assert ! t2.needed?, "Should not need to build old file"
|
41
|
+
assert ! t1.needed?, "Should not need to rebuild new file because of old"
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_file_times_old_depends_on_new
|
45
|
+
create_timed_files(OLDFILE, NEWFILE)
|
46
|
+
|
47
|
+
t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
|
48
|
+
t2 = Rake.application.intern(FileTask, NEWFILE)
|
49
|
+
assert ! t2.needed?, "Should not need to build new file"
|
50
|
+
preq_stamp = t1.prerequisites.collect{|t| Task[t].timestamp}.max
|
51
|
+
assert_equal t2.timestamp, preq_stamp
|
52
|
+
assert t1.timestamp < preq_stamp, "T1 should be older"
|
53
|
+
assert t1.needed?, "Should need to rebuild old file because of new"
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_file_depends_on_task_depend_on_file
|
57
|
+
create_timed_files(OLDFILE, NEWFILE)
|
58
|
+
|
59
|
+
file NEWFILE => [:obj] do |t| @runs << t.name end
|
60
|
+
task :obj => [OLDFILE] do |t| @runs << t.name end
|
61
|
+
file OLDFILE do |t| @runs << t.name end
|
62
|
+
|
63
|
+
Task[:obj].invoke
|
64
|
+
Task[NEWFILE].invoke
|
65
|
+
assert ! @runs.include?(NEWFILE)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_existing_file_depends_on_non_existing_file
|
69
|
+
create_file(OLDFILE)
|
70
|
+
delete_file(NEWFILE)
|
71
|
+
file NEWFILE
|
72
|
+
file OLDFILE => NEWFILE
|
73
|
+
assert_nothing_raised do Task[OLDFILE].invoke end
|
74
|
+
end
|
75
|
+
|
76
|
+
# I have currently disabled this test. I'm not convinced that
|
77
|
+
# deleting the file target on failure is always the proper thing to
|
78
|
+
# do. I'm willing to hear input on this topic.
|
79
|
+
def ztest_file_deletes_on_failure
|
80
|
+
task :obj
|
81
|
+
file NEWFILE => [:obj] do |t|
|
82
|
+
FileUtils.touch NEWFILE
|
83
|
+
fail "Ooops"
|
84
|
+
end
|
85
|
+
assert Task[NEWFILE]
|
86
|
+
begin
|
87
|
+
Task[NEWFILE].invoke
|
88
|
+
rescue Exception
|
89
|
+
end
|
90
|
+
assert( ! File.exist?(NEWFILE), "NEWFILE should be deleted")
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
######################################################################
|
96
|
+
class TestDirectoryTask < Test::Unit::TestCase
|
97
|
+
include Rake
|
98
|
+
|
99
|
+
def setup
|
100
|
+
rm_rf "testdata", :verbose=>false
|
101
|
+
end
|
102
|
+
|
103
|
+
def teardown
|
104
|
+
rm_rf "testdata", :verbose=>false
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_directory
|
108
|
+
desc "DESC"
|
109
|
+
directory "testdata/a/b/c"
|
110
|
+
assert_equal FileCreationTask, Task["testdata"].class
|
111
|
+
assert_equal FileCreationTask, Task["testdata/a"].class
|
112
|
+
assert_equal FileCreationTask, Task["testdata/a/b/c"].class
|
113
|
+
assert_nil Task["testdata"].comment
|
114
|
+
assert_equal "DESC", Task["testdata/a/b/c"].comment
|
115
|
+
assert_nil Task["testdata/a/b"].comment
|
116
|
+
verbose(false) {
|
117
|
+
Task['testdata/a/b'].invoke
|
118
|
+
}
|
119
|
+
assert File.exist?("testdata/a/b")
|
120
|
+
assert ! File.exist?("testdata/a/b/c")
|
121
|
+
end
|
122
|
+
|
123
|
+
if Rake::Win32.windows?
|
124
|
+
def test_directory_win32
|
125
|
+
desc "WIN32 DESC"
|
126
|
+
FileUtils.mkdir_p("testdata")
|
127
|
+
Dir.chdir("testdata") do
|
128
|
+
directory 'c:/testdata/a/b/c'
|
129
|
+
assert_equal FileCreationTask, Task['c:/testdata'].class
|
130
|
+
assert_equal FileCreationTask, Task['c:/testdata/a'].class
|
131
|
+
assert_equal FileCreationTask, Task['c:/testdata/a/b/c'].class
|
132
|
+
assert_nil Task['c:/testdata'].comment
|
133
|
+
assert_equal "WIN32 DESC", Task['c:/testdata/a/b/c'].comment
|
134
|
+
assert_nil Task['c:/testdata/a/b'].comment
|
135
|
+
verbose(false) {
|
136
|
+
Task['c:/testdata/a/b'].invoke
|
137
|
+
}
|
138
|
+
assert File.exist?('c:/testdata/a/b')
|
139
|
+
assert ! File.exist?('c:/testdata/a/b/c')
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,623 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
require 'test/capture_stdout'
|
7
|
+
require 'test/rake_test_setup'
|
8
|
+
|
9
|
+
class TestFileList < Test::Unit::TestCase
|
10
|
+
FileList = Rake::FileList
|
11
|
+
include CaptureStdout
|
12
|
+
include TestMethods
|
13
|
+
|
14
|
+
def setup
|
15
|
+
create_test_data
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
# FileList.select_default_ignore_patterns
|
20
|
+
FileUtils.rm_rf("testdata")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_delgating_methods_do_not_include_to_a_or_to_ary
|
24
|
+
assert ! FileList::DELEGATING_METHODS.include?("to_a"), "should not include to_a"
|
25
|
+
assert ! FileList::DELEGATING_METHODS.include?(:to_a), "should not include to_a"
|
26
|
+
assert ! FileList::DELEGATING_METHODS.include?("to_ary"), "should not include to_ary"
|
27
|
+
assert ! FileList::DELEGATING_METHODS.include?(:to_ary), "should not include to_ary"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_create
|
31
|
+
fl = FileList.new
|
32
|
+
assert_equal 0, fl.size
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_create_with_args
|
36
|
+
fl = FileList.new("testdata/*.c", "x")
|
37
|
+
assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
|
38
|
+
fl.sort
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_create_with_block
|
42
|
+
fl = FileList.new { |f| f.include("x") }
|
43
|
+
assert_equal ["x"], fl.resolve
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_create_with_brackets
|
47
|
+
fl = FileList["testdata/*.c", "x"]
|
48
|
+
assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
|
49
|
+
fl.sort
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_create_with_brackets_and_filelist
|
53
|
+
fl = FileList[FileList["testdata/*.c", "x"]]
|
54
|
+
assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
|
55
|
+
fl.sort
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_include_with_another_array
|
59
|
+
fl = FileList.new.include(["x", "y", "z"])
|
60
|
+
assert_equal ["x", "y", "z"].sort, fl.sort
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_include_with_another_filelist
|
64
|
+
fl = FileList.new.include(FileList["testdata/*.c", "x"])
|
65
|
+
assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
|
66
|
+
fl.sort
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_append
|
70
|
+
fl = FileList.new
|
71
|
+
fl << "a.rb" << "b.rb"
|
72
|
+
assert_equal ['a.rb', 'b.rb'], fl
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_add_many
|
76
|
+
fl = FileList.new
|
77
|
+
fl.include %w(a d c)
|
78
|
+
fl.include('x', 'y')
|
79
|
+
assert_equal ['a', 'd', 'c', 'x', 'y'], fl
|
80
|
+
assert_equal ['a', 'd', 'c', 'x', 'y'], fl.resolve
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_add_return
|
84
|
+
f = FileList.new
|
85
|
+
g = f << "x"
|
86
|
+
assert_equal f.object_id, g.object_id
|
87
|
+
h = f.include("y")
|
88
|
+
assert_equal f.object_id, h.object_id
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_match
|
92
|
+
fl = FileList.new
|
93
|
+
fl.include('test/test*.rb')
|
94
|
+
assert fl.include?("test/test_filelist.rb")
|
95
|
+
assert fl.size > 3
|
96
|
+
fl.each { |fn| assert_match(/\.rb$/, fn) }
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_add_matching
|
100
|
+
fl = FileList.new
|
101
|
+
fl << "a.java"
|
102
|
+
fl.include("test/*.rb")
|
103
|
+
assert_equal "a.java", fl[0]
|
104
|
+
assert fl.size > 2
|
105
|
+
assert fl.include?("test/test_filelist.rb")
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_multiple_patterns
|
109
|
+
create_test_data
|
110
|
+
fl = FileList.new
|
111
|
+
fl.include('*.c', '*xist*')
|
112
|
+
assert_equal [], fl
|
113
|
+
fl.include('testdata/*.c', 'testdata/*xist*')
|
114
|
+
assert_equal [
|
115
|
+
'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c', 'testdata/existing'
|
116
|
+
].sort, fl.sort
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_square_bracket_pattern
|
120
|
+
fl = FileList.new
|
121
|
+
fl.include("testdata/abc.[ch]")
|
122
|
+
assert fl.size == 2
|
123
|
+
assert fl.include?("testdata/abc.c")
|
124
|
+
assert fl.include?("testdata/abc.h")
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_curly_bracket_pattern
|
128
|
+
fl = FileList.new
|
129
|
+
fl.include("testdata/abc.{c,h}")
|
130
|
+
assert fl.size == 2
|
131
|
+
assert fl.include?("testdata/abc.c")
|
132
|
+
assert fl.include?("testdata/abc.h")
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_reject
|
136
|
+
fl = FileList.new
|
137
|
+
fl.include %w(testdata/x.c testdata/abc.c testdata/xyz.c testdata/existing)
|
138
|
+
fl.reject! { |fn| fn =~ %r{/x} }
|
139
|
+
assert_equal [
|
140
|
+
'testdata/abc.c', 'testdata/existing'
|
141
|
+
], fl
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_exclude
|
145
|
+
fl = FileList['testdata/x.c', 'testdata/abc.c', 'testdata/xyz.c', 'testdata/existing']
|
146
|
+
fl.each { |fn| touch fn, :verbose => false }
|
147
|
+
x = fl.exclude(%r{/x.+\.})
|
148
|
+
assert_equal FileList, x.class
|
149
|
+
assert_equal %w(testdata/x.c testdata/abc.c testdata/existing), fl
|
150
|
+
assert_equal fl.object_id, x.object_id
|
151
|
+
fl.exclude('testdata/*.c')
|
152
|
+
assert_equal ['testdata/existing'], fl
|
153
|
+
fl.exclude('testdata/existing')
|
154
|
+
assert_equal [], fl
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_excluding_via_block
|
158
|
+
fl = FileList['testdata/a.c', 'testdata/b.c', 'testdata/xyz.c']
|
159
|
+
fl.exclude { |fn| fn.pathmap('%n') == 'xyz' }
|
160
|
+
assert fl.exclude?("xyz.c"), "Should exclude xyz.c"
|
161
|
+
assert_equal ['testdata/a.c', 'testdata/b.c'], fl
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_exclude_return_on_create
|
165
|
+
fl = FileList['testdata/*'].exclude(/.*\.[hcx]$/)
|
166
|
+
assert_equal ['testdata/existing', 'testdata/cfiles'].sort, fl.sort
|
167
|
+
assert_equal FileList, fl.class
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_exclude_with_string_return_on_create
|
171
|
+
fl = FileList['testdata/*'].exclude('testdata/abc.c')
|
172
|
+
assert_equal %w(testdata/existing testdata/cfiles testdata/x.c testdata/abc.h testdata/abc.x testdata/xyz.c).sort, fl.sort
|
173
|
+
assert_equal FileList, fl.class
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_default_exclude
|
177
|
+
fl = FileList.new
|
178
|
+
fl.clear_exclude
|
179
|
+
fl.include("**/*~", "**/*.bak", "**/core")
|
180
|
+
assert fl.member?("testdata/core"), "Should include core"
|
181
|
+
assert fl.member?("testdata/x.bak"), "Should include .bak files"
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_unique
|
185
|
+
fl = FileList.new
|
186
|
+
fl << "x.c" << "a.c" << "b.rb" << "a.c"
|
187
|
+
assert_equal ['x.c', 'a.c', 'b.rb', 'a.c'], fl
|
188
|
+
fl.uniq!
|
189
|
+
assert_equal ['x.c', 'a.c', 'b.rb'], fl
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_to_string
|
193
|
+
fl = FileList.new
|
194
|
+
fl << "a.java" << "b.java"
|
195
|
+
assert_equal "a.java b.java", fl.to_s
|
196
|
+
assert_equal "a.java b.java", "#{fl}"
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_to_array
|
200
|
+
fl = FileList['a.java', 'b.java']
|
201
|
+
assert_equal ['a.java', 'b.java'], fl.to_a
|
202
|
+
assert_equal Array, fl.to_a.class
|
203
|
+
assert_equal ['a.java', 'b.java'], fl.to_ary
|
204
|
+
assert_equal Array, fl.to_ary.class
|
205
|
+
end
|
206
|
+
|
207
|
+
def test_to_s_pending
|
208
|
+
fl = FileList['testdata/abc.*']
|
209
|
+
result = fl.to_s
|
210
|
+
assert_match(%r{testdata/abc\.c}, result)
|
211
|
+
assert_match(%r{testdata/abc\.h}, result)
|
212
|
+
assert_match(%r{testdata/abc\.x}, result)
|
213
|
+
assert_match(%r{(testdata/abc\..\b ?){2}}, result)
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_inspect_pending
|
217
|
+
fl = FileList['testdata/abc.*']
|
218
|
+
result = fl.inspect
|
219
|
+
assert_match(%r{"testdata/abc\.c"}, result)
|
220
|
+
assert_match(%r{"testdata/abc\.h"}, result)
|
221
|
+
assert_match(%r{"testdata/abc\.x"}, result)
|
222
|
+
assert_match(%r|^\[("testdata/abc\..", ){2}"testdata/abc\.."\]$|, result)
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_sub
|
226
|
+
fl = FileList["testdata/*.c"]
|
227
|
+
f2 = fl.sub(/\.c$/, ".o")
|
228
|
+
assert_equal FileList, f2.class
|
229
|
+
assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
|
230
|
+
f2.sort
|
231
|
+
f3 = fl.gsub(/\.c$/, ".o")
|
232
|
+
assert_equal FileList, f3.class
|
233
|
+
assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
|
234
|
+
f3.sort
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_claim_to_be_a_kind_of_array
|
238
|
+
fl = FileList['testdata/*.c']
|
239
|
+
assert fl.is_a?(Array)
|
240
|
+
assert fl.kind_of?(Array)
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_claim_to_be_a_kind_of_filelist
|
244
|
+
fl = FileList['testdata/*.c']
|
245
|
+
assert fl.is_a?(FileList)
|
246
|
+
assert fl.kind_of?(FileList)
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_claim_to_be_a_filelist_instance
|
250
|
+
fl = FileList['testdata/*.c']
|
251
|
+
assert fl.instance_of?(FileList)
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_dont_claim_to_be_an_array_instance
|
255
|
+
fl = FileList['testdata/*.c']
|
256
|
+
assert ! fl.instance_of?(Array)
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_sub!
|
260
|
+
f = "x/a.c"
|
261
|
+
fl = FileList[f, "x/b.c"]
|
262
|
+
res = fl.sub!(/\.c$/, ".o")
|
263
|
+
assert_equal ["x/a.o", "x/b.o"].sort, fl.sort
|
264
|
+
assert_equal "x/a.c", f
|
265
|
+
assert_equal fl.object_id, res.object_id
|
266
|
+
end
|
267
|
+
|
268
|
+
def test_sub_with_block
|
269
|
+
fl = FileList["src/org/onestepback/a.java", "src/org/onestepback/b.java"]
|
270
|
+
# The block version doesn't work the way I want it to ...
|
271
|
+
# f2 = fl.sub(%r{^src/(.*)\.java$}) { |x| "classes/" + $1 + ".class" }
|
272
|
+
f2 = fl.sub(%r{^src/(.*)\.java$}, "classes/\\1.class")
|
273
|
+
assert_equal [
|
274
|
+
"classes/org/onestepback/a.class",
|
275
|
+
"classes/org/onestepback/b.class"
|
276
|
+
].sort,
|
277
|
+
f2.sort
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_string_ext
|
281
|
+
assert_equal "one.net", "one.two".ext("net")
|
282
|
+
assert_equal "one.net", "one.two".ext(".net")
|
283
|
+
assert_equal "one.net", "one".ext("net")
|
284
|
+
assert_equal "one.net", "one".ext(".net")
|
285
|
+
assert_equal "one.two.net", "one.two.c".ext(".net")
|
286
|
+
assert_equal "one/two.net", "one/two.c".ext(".net")
|
287
|
+
assert_equal "one.x/two.net", "one.x/two.c".ext(".net")
|
288
|
+
assert_equal "one.x/two.net", "one.x/two".ext(".net")
|
289
|
+
assert_equal ".onerc.net", ".onerc.dot".ext("net")
|
290
|
+
assert_equal ".onerc.net", ".onerc".ext("net")
|
291
|
+
assert_equal ".a/.onerc.net", ".a/.onerc".ext("net")
|
292
|
+
assert_equal "one", "one.two".ext('')
|
293
|
+
assert_equal "one", "one.two".ext
|
294
|
+
assert_equal ".one", ".one.two".ext
|
295
|
+
assert_equal ".one", ".one".ext
|
296
|
+
assert_equal ".", ".".ext("c")
|
297
|
+
assert_equal "..", "..".ext("c")
|
298
|
+
# These only need to work in windows
|
299
|
+
if Rake::Win32.windows?
|
300
|
+
assert_equal "one.x\\two.net", "one.x\\two.c".ext(".net")
|
301
|
+
assert_equal "one.x\\two.net", "one.x\\two".ext(".net")
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_filelist_ext
|
306
|
+
assert_equal FileList['one.c', '.one.c'],
|
307
|
+
FileList['one.net', '.one'].ext('c')
|
308
|
+
end
|
309
|
+
|
310
|
+
def test_gsub
|
311
|
+
create_test_data
|
312
|
+
fl = FileList["testdata/*.c"]
|
313
|
+
f2 = fl.gsub(/a/, "A")
|
314
|
+
assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
|
315
|
+
f2.sort
|
316
|
+
end
|
317
|
+
|
318
|
+
def test_gsub!
|
319
|
+
create_test_data
|
320
|
+
f = FileList["testdata/*.c"]
|
321
|
+
f.gsub!(/a/, "A")
|
322
|
+
assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
|
323
|
+
f.sort
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_egrep_with_output
|
327
|
+
files = FileList['test/test*.rb']
|
328
|
+
the_line_number = __LINE__ + 1
|
329
|
+
out = capture_stdout do files.egrep(/PUGH/) end
|
330
|
+
assert_match(/:#{the_line_number}:/, out)
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_egrep_with_block
|
334
|
+
files = FileList['test/test*.rb']
|
335
|
+
found = false
|
336
|
+
the_line_number = __LINE__ + 1
|
337
|
+
files.egrep(/XYZZY/) do |fn, ln, line |
|
338
|
+
assert_equal 'test/test_filelist.rb', fn
|
339
|
+
assert_equal the_line_number, ln
|
340
|
+
assert_match(/files\.egrep/, line)
|
341
|
+
found = true
|
342
|
+
end
|
343
|
+
assert found, "should have found a matching line"
|
344
|
+
end
|
345
|
+
|
346
|
+
def test_existing
|
347
|
+
fl = FileList['testdata/abc.c', 'testdata/notthere.c']
|
348
|
+
assert_equal ["testdata/abc.c"], fl.existing
|
349
|
+
assert fl.existing.is_a?(FileList)
|
350
|
+
end
|
351
|
+
|
352
|
+
def test_existing!
|
353
|
+
fl = FileList['testdata/abc.c', 'testdata/notthere.c']
|
354
|
+
result = fl.existing!
|
355
|
+
assert_equal ["testdata/abc.c"], fl
|
356
|
+
assert_equal fl.object_id, result.object_id
|
357
|
+
end
|
358
|
+
|
359
|
+
def test_ignore_special
|
360
|
+
f = FileList['testdata/*']
|
361
|
+
assert ! f.include?("testdata/CVS"), "Should not contain CVS"
|
362
|
+
assert ! f.include?("testdata/.svn"), "Should not contain .svn"
|
363
|
+
assert ! f.include?("testdata/.dummy"), "Should not contain dot files"
|
364
|
+
assert ! f.include?("testdata/x.bak"), "Should not contain .bak files"
|
365
|
+
assert ! f.include?("testdata/x~"), "Should not contain ~ files"
|
366
|
+
assert ! f.include?("testdata/core"), "Should not contain core files"
|
367
|
+
end
|
368
|
+
|
369
|
+
def test_clear_ignore_patterns
|
370
|
+
f = FileList['testdata/*', 'testdata/.svn']
|
371
|
+
f.clear_exclude
|
372
|
+
assert f.include?("testdata/abc.c")
|
373
|
+
assert f.include?("testdata/xyz.c")
|
374
|
+
assert f.include?("testdata/CVS")
|
375
|
+
assert f.include?("testdata/.svn")
|
376
|
+
assert f.include?("testdata/x.bak")
|
377
|
+
assert f.include?("testdata/x~")
|
378
|
+
end
|
379
|
+
|
380
|
+
def test_exclude_with_alternate_file_seps
|
381
|
+
fl = FileList.new
|
382
|
+
assert fl.exclude?("x/CVS/y")
|
383
|
+
assert fl.exclude?("x\\CVS\\y")
|
384
|
+
assert fl.exclude?("x/.svn/y")
|
385
|
+
assert fl.exclude?("x\\.svn\\y")
|
386
|
+
assert fl.exclude?("x/core")
|
387
|
+
assert fl.exclude?("x\\core")
|
388
|
+
end
|
389
|
+
|
390
|
+
def test_add_default_exclude_list
|
391
|
+
fl = FileList.new
|
392
|
+
fl.exclude(/~\d+$/)
|
393
|
+
assert fl.exclude?("x/CVS/y")
|
394
|
+
assert fl.exclude?("x\\CVS\\y")
|
395
|
+
assert fl.exclude?("x/.svn/y")
|
396
|
+
assert fl.exclude?("x\\.svn\\y")
|
397
|
+
assert fl.exclude?("x/core")
|
398
|
+
assert fl.exclude?("x\\core")
|
399
|
+
assert fl.exclude?("x/abc~1")
|
400
|
+
end
|
401
|
+
|
402
|
+
def test_basic_array_functions
|
403
|
+
f = FileList['b', 'c', 'a']
|
404
|
+
assert_equal 'b', f.first
|
405
|
+
assert_equal 'b', f[0]
|
406
|
+
assert_equal 'a', f.last
|
407
|
+
assert_equal 'a', f[2]
|
408
|
+
assert_equal 'a', f[-1]
|
409
|
+
assert_equal ['a', 'b', 'c'], f.sort
|
410
|
+
f.sort!
|
411
|
+
assert_equal ['a', 'b', 'c'], f
|
412
|
+
end
|
413
|
+
|
414
|
+
def test_flatten
|
415
|
+
assert_equal ['a', 'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c'].sort,
|
416
|
+
['a', FileList['testdata/*.c']].flatten.sort
|
417
|
+
end
|
418
|
+
|
419
|
+
def test_clone_and_dup
|
420
|
+
a = FileList['a', 'b', 'c']
|
421
|
+
c = a.clone
|
422
|
+
d = a.dup
|
423
|
+
a << 'd'
|
424
|
+
assert_equal ['a', 'b', 'c', 'd'], a
|
425
|
+
assert_equal ['a', 'b', 'c'], c
|
426
|
+
assert_equal ['a', 'b', 'c'], d
|
427
|
+
end
|
428
|
+
|
429
|
+
def test_dup_and_clone_replicate_taint
|
430
|
+
a = FileList['a', 'b', 'c']
|
431
|
+
a.taint
|
432
|
+
c = a.clone
|
433
|
+
d = a.dup
|
434
|
+
assert c.tainted?, "Clone should be tainted"
|
435
|
+
assert d.tainted?, "Dup should be tainted"
|
436
|
+
end
|
437
|
+
|
438
|
+
def test_duped_items_will_thaw
|
439
|
+
a = FileList['a', 'b', 'c']
|
440
|
+
a.freeze
|
441
|
+
d = a.dup
|
442
|
+
d << 'more'
|
443
|
+
assert_equal ['a', 'b', 'c', 'more'], d
|
444
|
+
end
|
445
|
+
|
446
|
+
def test_cloned_items_stay_frozen
|
447
|
+
a = FileList['a', 'b', 'c']
|
448
|
+
a.freeze
|
449
|
+
c = a.clone
|
450
|
+
assert_exception(TypeError, RuntimeError) do
|
451
|
+
c << 'more'
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
455
|
+
def test_array_comparisons
|
456
|
+
fl = FileList['b', 'b']
|
457
|
+
a = ['b', 'a']
|
458
|
+
b = ['b', 'b']
|
459
|
+
c = ['b', 'c']
|
460
|
+
assert_equal( 1, fl <=> a )
|
461
|
+
assert_equal( 0, fl <=> b )
|
462
|
+
assert_equal( -1, fl <=> c )
|
463
|
+
assert_equal( -1, a <=> fl )
|
464
|
+
assert_equal( 0, b <=> fl )
|
465
|
+
assert_equal( 1, c <=> fl )
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_array_equality
|
469
|
+
a = FileList['a', 'b']
|
470
|
+
b = ['a', 'b']
|
471
|
+
assert a == b
|
472
|
+
assert b == a
|
473
|
+
# assert a.eql?(b)
|
474
|
+
# assert b.eql?(a)
|
475
|
+
assert ! a.equal?(b)
|
476
|
+
assert ! b.equal?(a)
|
477
|
+
end
|
478
|
+
|
479
|
+
def test_enumeration_methods
|
480
|
+
a = FileList['a', 'b']
|
481
|
+
b = a.collect { |it| it.upcase }
|
482
|
+
assert_equal ['A', 'B'], b
|
483
|
+
assert_equal FileList, b.class
|
484
|
+
|
485
|
+
b = a.map { |it| it.upcase }
|
486
|
+
assert_equal ['A', 'B'], b
|
487
|
+
assert_equal FileList, b.class
|
488
|
+
|
489
|
+
b = a.sort
|
490
|
+
assert_equal ['a', 'b'], b
|
491
|
+
assert_equal FileList, b.class
|
492
|
+
|
493
|
+
b = a.sort_by { |it| it }
|
494
|
+
assert_equal ['a', 'b'], b
|
495
|
+
assert_equal FileList, b.class
|
496
|
+
|
497
|
+
b = a.find_all { |it| it == 'b'}
|
498
|
+
assert_equal ['b'], b
|
499
|
+
assert_equal FileList, b.class
|
500
|
+
|
501
|
+
b = a.select { |it| it.size == 1 }
|
502
|
+
assert_equal ['a', 'b'], b
|
503
|
+
assert_equal FileList, b.class
|
504
|
+
|
505
|
+
b = a.reject { |it| it == 'b' }
|
506
|
+
assert_equal ['a'], b
|
507
|
+
assert_equal FileList, b.class
|
508
|
+
|
509
|
+
b = a.grep(/./)
|
510
|
+
assert_equal ['a', 'b'], b
|
511
|
+
assert_equal FileList, b.class
|
512
|
+
|
513
|
+
b = a.partition { |it| it == 'b' }
|
514
|
+
assert_equal [['b'], ['a']], b
|
515
|
+
assert_equal Array, b.class
|
516
|
+
assert_equal FileList, b[0].class
|
517
|
+
assert_equal FileList, b[1].class
|
518
|
+
|
519
|
+
b = a.zip(['x', 'y']).to_a
|
520
|
+
assert_equal [['a', 'x'], ['b', 'y']], b
|
521
|
+
assert_equal Array, b.class
|
522
|
+
assert_equal Array, b[0].class
|
523
|
+
assert_equal Array, b[1].class
|
524
|
+
end
|
525
|
+
|
526
|
+
def test_array_operators
|
527
|
+
a = ['a', 'b']
|
528
|
+
b = ['c', 'd']
|
529
|
+
f = FileList['x', 'y']
|
530
|
+
g = FileList['w', 'z']
|
531
|
+
|
532
|
+
r = f + g
|
533
|
+
assert_equal ['x', 'y', 'w', 'z'], r
|
534
|
+
assert_equal FileList, r.class
|
535
|
+
|
536
|
+
r = a + g
|
537
|
+
assert_equal ['a', 'b', 'w', 'z'], r
|
538
|
+
assert_equal Array, r.class
|
539
|
+
|
540
|
+
r = f + b
|
541
|
+
assert_equal ['x', 'y', 'c', 'd'], r
|
542
|
+
assert_equal FileList, r.class
|
543
|
+
|
544
|
+
r = FileList['w', 'x', 'y', 'z'] - f
|
545
|
+
assert_equal ['w', 'z'], r
|
546
|
+
assert_equal FileList, r.class
|
547
|
+
|
548
|
+
r = FileList['w', 'x', 'y', 'z'] & f
|
549
|
+
assert_equal ['x', 'y'], r
|
550
|
+
assert_equal FileList, r.class
|
551
|
+
|
552
|
+
r = f * 2
|
553
|
+
assert_equal ['x', 'y', 'x', 'y'], r
|
554
|
+
assert_equal FileList, r.class
|
555
|
+
|
556
|
+
r = f * ','
|
557
|
+
assert_equal 'x,y', r
|
558
|
+
assert_equal String, r.class
|
559
|
+
|
560
|
+
r = f | ['a', 'x']
|
561
|
+
assert_equal ['a', 'x', 'y'].sort, r.sort
|
562
|
+
assert_equal FileList, r.class
|
563
|
+
end
|
564
|
+
|
565
|
+
def test_other_array_returning_methods
|
566
|
+
f = FileList['a', nil, 'b']
|
567
|
+
r = f.compact
|
568
|
+
assert_equal ['a', 'b'], r
|
569
|
+
assert_equal FileList, r.class
|
570
|
+
|
571
|
+
f = FileList['a', 'b']
|
572
|
+
r = f.concat(['x', 'y'])
|
573
|
+
assert_equal ['a', 'b', 'x', 'y'], r
|
574
|
+
assert_equal FileList, r.class
|
575
|
+
|
576
|
+
f = FileList['a', ['b', 'c'], FileList['d', 'e']]
|
577
|
+
r = f.flatten
|
578
|
+
assert_equal ['a', 'b', 'c', 'd', 'e'], r
|
579
|
+
assert_equal FileList, r.class
|
580
|
+
|
581
|
+
f = FileList['a', 'b', 'a']
|
582
|
+
r = f.uniq
|
583
|
+
assert_equal ['a', 'b'], r
|
584
|
+
assert_equal FileList, r.class
|
585
|
+
|
586
|
+
f = FileList['a', 'b', 'c', 'd']
|
587
|
+
r = f.values_at(1,3)
|
588
|
+
assert_equal ['b', 'd'], r
|
589
|
+
assert_equal FileList, r.class
|
590
|
+
end
|
591
|
+
|
592
|
+
def test_file_utils_can_use_filelists
|
593
|
+
cfiles = FileList['testdata/*.c']
|
594
|
+
|
595
|
+
cp cfiles, @cdir, :verbose => false
|
596
|
+
|
597
|
+
assert File.exist?(File.join(@cdir, 'abc.c'))
|
598
|
+
assert File.exist?(File.join(@cdir, 'xyz.c'))
|
599
|
+
assert File.exist?(File.join(@cdir, 'x.c'))
|
600
|
+
end
|
601
|
+
|
602
|
+
def create_test_data
|
603
|
+
verbose(false) do
|
604
|
+
|
605
|
+
mkdir "testdata" unless File.exist? "testdata"
|
606
|
+
mkdir "testdata/CVS" rescue nil
|
607
|
+
mkdir "testdata/.svn" rescue nil
|
608
|
+
@cdir = "testdata/cfiles"
|
609
|
+
mkdir @cdir rescue nil
|
610
|
+
touch "testdata/.dummy"
|
611
|
+
touch "testdata/x.bak"
|
612
|
+
touch "testdata/x~"
|
613
|
+
touch "testdata/core"
|
614
|
+
touch "testdata/x.c"
|
615
|
+
touch "testdata/xyz.c"
|
616
|
+
touch "testdata/abc.c"
|
617
|
+
touch "testdata/abc.h"
|
618
|
+
touch "testdata/abc.x"
|
619
|
+
touch "testdata/existing"
|
620
|
+
end
|
621
|
+
end
|
622
|
+
|
623
|
+
end
|