rake 0.7.3 → 0.8.0
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.
Potentially problematic release.
This version of rake might be problematic. Click here for more details.
- data/CHANGES +15 -1
- data/Rakefile +72 -53
- data/TODO +1 -0
- data/bin/rake +24 -0
- data/lib/rake.rb +424 -214
- data/lib/rake/gempackagetask.rb +2 -0
- data/test/data/multidesc/Rakefile +3 -0
- data/test/data/statusreturn/Rakefile +8 -0
- data/test/functional.rb +2 -0
- data/test/rake_test_setup.rb +5 -0
- data/test/session_functional.rb +46 -1
- data/test/test_application.rb +98 -21
- data/test/test_extension.rb +63 -0
- data/test/test_filelist.rb +12 -4
- data/test/test_invocation_chain.rb +75 -0
- data/test/test_namespace.rb +7 -3
- data/test/test_package_task.rb +0 -14
- data/test/test_pathmap.rb +21 -0
- data/test/test_rules.rb +31 -5
- data/test/test_task_arguments.rb +76 -0
- data/test/test_tasks.rb +214 -4
- data/test/test_test_task.rb +1 -2
- data/test/test_top_level_functions.rb +7 -2
- metadata +20 -8
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test/unit'
         | 
| 4 | 
            +
            require 'rake'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ######################################################################
         | 
| 7 | 
            +
            class TestAnEmptyInvocationChain < Test::Unit::TestCase
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              def setup
         | 
| 10 | 
            +
                @empty = Rake::InvocationChain::EMPTY
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def test_should_be_able_to_add_members
         | 
| 14 | 
            +
                assert_nothing_raised do
         | 
| 15 | 
            +
                  @empty.append("A")
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def test_to_s
         | 
| 20 | 
            +
                assert_equal "TOP", @empty.to_s
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            ######################################################################
         | 
| 25 | 
            +
            class TestAnInvocationChainWithOneMember < Test::Unit::TestCase
         | 
| 26 | 
            +
              def setup
         | 
| 27 | 
            +
                @empty = Rake::InvocationChain::EMPTY
         | 
| 28 | 
            +
                @first_member = "A"
         | 
| 29 | 
            +
                @chain = @empty.append(@first_member)
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              def test_should_report_first_member_as_a_member
         | 
| 33 | 
            +
                assert @chain.member?(@first_member)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def test_should_fail_when_adding_original_member
         | 
| 37 | 
            +
                ex = assert_raise RuntimeError do
         | 
| 38 | 
            +
                  @chain.append(@first_member)
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
                assert_match(/circular +dependency/i, ex.message)
         | 
| 41 | 
            +
                assert_match(/A.*=>.*A/, ex.message)
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def test_to_s
         | 
| 45 | 
            +
                assert_equal "TOP => A", @chain.to_s
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            ######################################################################
         | 
| 51 | 
            +
            class TestAnInvocationChainWithMultipleMember < Test::Unit::TestCase
         | 
| 52 | 
            +
              def setup
         | 
| 53 | 
            +
                @first_member = "A"
         | 
| 54 | 
            +
                @second_member = "B"
         | 
| 55 | 
            +
                ch = Rake::InvocationChain::EMPTY.append(@first_member)
         | 
| 56 | 
            +
                @chain = ch.append(@second_member)
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              def test_should_report_first_member_as_a_member
         | 
| 60 | 
            +
                assert @chain.member?(@first_member)
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              def test_should_report_second_member_as_a_member
         | 
| 64 | 
            +
                assert @chain.member?(@second_member)
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def test_should_fail_when_adding_original_member
         | 
| 68 | 
            +
                ex = assert_raise RuntimeError do
         | 
| 69 | 
            +
                  @chain.append(@first_member)
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
                assert_match(/A.*=>.*B.*=>.*A/, ex.message)
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
             | 
    
        data/test/test_namespace.rb
    CHANGED
    
    | @@ -1,12 +1,16 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            begin
         | 
| 4 | 
            +
              require 'rubygems'
         | 
| 5 | 
            +
            rescue LoadError
         | 
| 6 | 
            +
              # got no gems
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 4 9 | 
             
            require 'test/unit'
         | 
| 5 | 
            -
            require 'flexmock'
         | 
| 10 | 
            +
            require 'flexmock/test_unit'
         | 
| 6 11 | 
             
            require 'rake'
         | 
| 7 12 |  | 
| 8 13 | 
             
            class TestNameSpace < Test::Unit::TestCase
         | 
| 9 | 
            -
              include FlexMock::TestCase
         | 
| 10 14 |  | 
| 11 15 | 
             
              def test_namespace_creation
         | 
| 12 16 | 
             
                mgr = flexmock("TaskManager")
         | 
    
        data/test/test_package_task.rb
    CHANGED
    
    | @@ -85,20 +85,6 @@ else | |
| 85 85 | 
             
                  assert_equal "pkgr-1.2.3.gem", pkg.gem_file
         | 
| 86 86 | 
             
                end
         | 
| 87 87 |  | 
| 88 | 
            -
                def test_gem_package_with_specific_platform
         | 
| 89 | 
            -
                  gem = Gem::Specification.new do |g|
         | 
| 90 | 
            -
                    g.name = "pkgr"
         | 
| 91 | 
            -
                    g.version = "1.2.3"
         | 
| 92 | 
            -
                    g.files = FileList["x"].resolve
         | 
| 93 | 
            -
                    g.platform = Gem::Platform::WIN32
         | 
| 94 | 
            -
                  end
         | 
| 95 | 
            -
                  pkg = Rake::GemPackageTask.new(gem)  do |p|
         | 
| 96 | 
            -
                    p.package_files << "y"
         | 
| 97 | 
            -
                  end
         | 
| 98 | 
            -
                  assert_equal ["x", "y"], pkg.package_files
         | 
| 99 | 
            -
                  assert_equal "pkgr-1.2.3-mswin32.gem", pkg.gem_file
         | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
             | 
| 102 88 | 
             
                def test_gem_package_with_current_platform
         | 
| 103 89 | 
             
                  gem = Gem::Specification.new do |g|
         | 
| 104 90 | 
             
                    g.name = "pkgr"
         | 
    
        data/test/test_pathmap.rb
    CHANGED
    
    | @@ -60,6 +60,11 @@ class TestPathMap < Test::Unit::TestCase | |
| 60 60 | 
             
                assert_equal "abc", "abc".pathmap("%X")
         | 
| 61 61 | 
             
                assert_equal "abc", "abc.rb".pathmap("%X")
         | 
| 62 62 | 
             
                assert_equal "abc.xyz", "abc.xyz.rb".pathmap("%X")
         | 
| 63 | 
            +
                assert_equal "ab.xyz", "ab.xyz.rb".pathmap("%X")
         | 
| 64 | 
            +
                assert_equal "a.xyz", "a.xyz.rb".pathmap("%X")
         | 
| 65 | 
            +
                assert_equal "abc", "abc.rb".pathmap("%X")
         | 
| 66 | 
            +
                assert_equal "ab", "ab.rb".pathmap("%X")
         | 
| 67 | 
            +
                assert_equal "a", "a.rb".pathmap("%X")
         | 
| 63 68 | 
             
                assert_equal ".depends", ".depends".pathmap("%X")
         | 
| 64 69 | 
             
                assert_equal "a/dir/.depends", "a/dir/.depends".pathmap("%X")
         | 
| 65 70 | 
             
                assert_equal "/.depends", "/.depends".pathmap("%X")
         | 
| @@ -181,6 +186,22 @@ class TestPathMapExplode < Test::Unit::TestCase | |
| 181 186 | 
             
              end
         | 
| 182 187 | 
             
            end
         | 
| 183 188 |  | 
| 189 | 
            +
            class TestPathMapPartial < Test::Unit::TestCase
         | 
| 190 | 
            +
              def test_pathmap_partial
         | 
| 191 | 
            +
                @path = "1/2/file"
         | 
| 192 | 
            +
                def @path.call(n)
         | 
| 193 | 
            +
                  pathmap_partial(n)
         | 
| 194 | 
            +
                end
         | 
| 195 | 
            +
                assert_equal("1", @path.call(1))
         | 
| 196 | 
            +
                assert_equal("1/2", @path.call(2))
         | 
| 197 | 
            +
                assert_equal("1/2", @path.call(3))
         | 
| 198 | 
            +
                assert_equal(".", @path.call(0))
         | 
| 199 | 
            +
                assert_equal("2", @path.call(-1))
         | 
| 200 | 
            +
                assert_equal("1/2", @path.call(-2))
         | 
| 201 | 
            +
                assert_equal("1/2", @path.call(-3))
         | 
| 202 | 
            +
              end
         | 
| 203 | 
            +
            end
         | 
| 204 | 
            +
             | 
| 184 205 | 
             
            class TestFileListPathMap < Test::Unit::TestCase
         | 
| 185 206 | 
             
              def test_file_list_supports_pathmap
         | 
| 186 207 | 
             
                assert_equal ['a', 'b'], FileList['dir/a.rb', 'dir/b.rb'].pathmap("%n")
         | 
    
        data/test/test_rules.rb
    CHANGED
    
    | @@ -113,10 +113,23 @@ class TestRules < Test::Unit::TestCase | |
| 113 113 | 
             
                  chdir("testdata") do
         | 
| 114 114 | 
             
                    create_file(".foo")
         | 
| 115 115 | 
             
                    rule '.o' => lambda{".foo"} do |t|
         | 
| 116 | 
            -
                      @runs << t.name
         | 
| 116 | 
            +
                      @runs << "#{t.name} - #{t.source}"
         | 
| 117 117 | 
             
                    end
         | 
| 118 118 | 
             
                    Task[OBJFILE].invoke
         | 
| 119 | 
            -
                    assert_equal [OBJFILE], @runs
         | 
| 119 | 
            +
                    assert_equal ["#{OBJFILE} - .foo"], @runs
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              def test_file_names_containing_percent_can_be_wrapped_in_lambda
         | 
| 125 | 
            +
                verbose(false) do
         | 
| 126 | 
            +
                  chdir("testdata") do
         | 
| 127 | 
            +
                    create_file("foo%x")
         | 
| 128 | 
            +
                    rule '.o' => lambda{"foo%x"} do |t|
         | 
| 129 | 
            +
                      @runs << "#{t.name} - #{t.source}"
         | 
| 130 | 
            +
                    end
         | 
| 131 | 
            +
                    Task[OBJFILE].invoke
         | 
| 132 | 
            +
                    assert_equal ["#{OBJFILE} - foo%x"], @runs
         | 
| 120 133 | 
             
                  end
         | 
| 121 134 | 
             
                end
         | 
| 122 135 | 
             
              end
         | 
| @@ -137,12 +150,25 @@ class TestRules < Test::Unit::TestCase | |
| 137 150 | 
             
              def test_pathmap_automatically_applies_to_name
         | 
| 138 151 | 
             
                verbose(false) do
         | 
| 139 152 | 
             
                  chdir("testdata") do
         | 
| 140 | 
            -
                    create_file(" | 
| 141 | 
            -
                    rule ".o" => '%{x,a}n.c' do |t|
         | 
| 153 | 
            +
                    create_file("zzabc.c")
         | 
| 154 | 
            +
                    rule ".o" => 'zz%{x,a}n.c' do |t|
         | 
| 155 | 
            +
                      @runs << "#{t.name} - #{t.source}"
         | 
| 156 | 
            +
                    end
         | 
| 157 | 
            +
                    Task["xbc.o"].invoke
         | 
| 158 | 
            +
                    assert_equal ["xbc.o - zzabc.c"], @runs
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
                end
         | 
| 161 | 
            +
              end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
              def test_plain_strings_are_just_filenames
         | 
| 164 | 
            +
                verbose(false) do
         | 
| 165 | 
            +
                  chdir("testdata") do
         | 
| 166 | 
            +
                    create_file("plainname")
         | 
| 167 | 
            +
                    rule ".o" => 'plainname' do |t|
         | 
| 142 168 | 
             
                      @runs << "#{t.name} - #{t.source}"
         | 
| 143 169 | 
             
                    end
         | 
| 144 170 | 
             
                    Task["xbc.o"].invoke
         | 
| 145 | 
            -
                    assert_equal ["xbc.o -  | 
| 171 | 
            +
                    assert_equal ["xbc.o - plainname"], @runs
         | 
| 146 172 | 
             
                  end
         | 
| 147 173 | 
             
                end
         | 
| 148 174 | 
             
              end
         | 
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test/unit'
         | 
| 4 | 
            +
            require 'rake'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ######################################################################
         | 
| 7 | 
            +
            class TestTaskArguments < Test::Unit::TestCase
         | 
| 8 | 
            +
              def teardown
         | 
| 9 | 
            +
                ENV.delete('rev')
         | 
| 10 | 
            +
                ENV.delete('VER')
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def test_empty_arg_list_is_empty
         | 
| 14 | 
            +
                ta = Rake::TaskArguments.new([], [])
         | 
| 15 | 
            +
                assert_equal({}, ta.to_hash)
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def test_multiple_values_in_args
         | 
| 19 | 
            +
                ta = Rake::TaskArguments.new([:a, :b, :c], [:one, :two, :three])
         | 
| 20 | 
            +
                assert_equal({:a => :one, :b => :two, :c => :three}, ta.to_hash)
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def test_to_s
         | 
| 24 | 
            +
                ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2, 3])
         | 
| 25 | 
            +
                assert_equal ta.to_hash.inspect, ta.to_s
         | 
| 26 | 
            +
                assert_equal ta.to_hash.inspect, ta.inspect
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def test_enumerable_behavior
         | 
| 30 | 
            +
                ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2 ,3])
         | 
| 31 | 
            +
                assert_equal [10, 20, 30], ta.collect { |k,v| v * 10 }.sort
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def test_named_args
         | 
| 35 | 
            +
                ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
         | 
| 36 | 
            +
                assert_equal 1, ta.aa
         | 
| 37 | 
            +
                assert_equal 1, ta[:aa]
         | 
| 38 | 
            +
                assert_equal 1, ta["aa"]
         | 
| 39 | 
            +
                assert_equal 2, ta.bb
         | 
| 40 | 
            +
                assert_nil ta.cc
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              def test_args_knows_its_names
         | 
| 44 | 
            +
                ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
         | 
| 45 | 
            +
                assert_equal ["aa", "bb"], ta.names
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              def test_extra_names_are_nil
         | 
| 49 | 
            +
                ta = Rake::TaskArguments.new(["aa", "bb", "cc"], [1, 2])
         | 
| 50 | 
            +
                assert_nil ta.cc
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              def test_args_can_reference_env_values
         | 
| 54 | 
            +
                ta = Rake::TaskArguments.new(["aa"], [1])
         | 
| 55 | 
            +
                ENV['rev'] = "1.2"
         | 
| 56 | 
            +
                ENV['VER'] = "2.3"
         | 
| 57 | 
            +
                assert_equal "1.2", ta.rev
         | 
| 58 | 
            +
                assert_equal "2.3", ta.ver
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def test_creating_new_argument_scopes
         | 
| 62 | 
            +
                parent = Rake::TaskArguments.new(['p'], [1])
         | 
| 63 | 
            +
                child = parent.new_scope(['c', 'p'])
         | 
| 64 | 
            +
                assert_equal({:c => nil, :p=>1}, child.to_hash)
         | 
| 65 | 
            +
                assert_equal 1, child.p
         | 
| 66 | 
            +
                assert_equal 1, child["p"]
         | 
| 67 | 
            +
                assert_equal 1, child[:p]
         | 
| 68 | 
            +
                assert_nil child.c
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              def test_child_hides_parent_arg_names
         | 
| 72 | 
            +
                parent = Rake::TaskArguments.new(['aa'], [1])
         | 
| 73 | 
            +
                child = Rake::TaskArguments.new(['aa'], [2], parent)
         | 
| 74 | 
            +
                assert_equal 2, child.aa
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
            end
         | 
    
        data/test/test_tasks.rb
    CHANGED
    
    | @@ -6,10 +6,20 @@ require 'rake' | |
| 6 6 | 
             
            require 'test/filecreation'
         | 
| 7 7 | 
             
            require 'test/capture_stdout'
         | 
| 8 8 |  | 
| 9 | 
            +
             | 
| 10 | 
            +
            module Interning
         | 
| 11 | 
            +
              private
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def intern(name, *args)
         | 
| 14 | 
            +
                Rake.application.define_task(Rake::Task, name, *args)
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 9 18 | 
             
            ######################################################################
         | 
| 10 19 | 
             
            class TestTask < Test::Unit::TestCase
         | 
| 11 20 | 
             
              include CaptureStdout
         | 
| 12 21 | 
             
              include Rake
         | 
| 22 | 
            +
              include Interning
         | 
| 13 23 |  | 
| 14 24 | 
             
              def setup
         | 
| 15 25 | 
             
                Task.clear
         | 
| @@ -22,12 +32,17 @@ class TestTask < Test::Unit::TestCase | |
| 22 32 | 
             
                assert_equal [], t.prerequisites
         | 
| 23 33 | 
             
                assert t.prerequisites.is_a?(FileList)
         | 
| 24 34 | 
             
                assert t.needed?
         | 
| 25 | 
            -
                t.execute
         | 
| 35 | 
            +
                t.execute(0)
         | 
| 26 36 | 
             
                assert_equal t, arg
         | 
| 27 37 | 
             
                assert_nil t.source
         | 
| 28 38 | 
             
                assert_equal [], t.sources
         | 
| 29 39 | 
             
              end
         | 
| 30 40 |  | 
| 41 | 
            +
              def test_inspect
         | 
| 42 | 
            +
                t = intern(:foo).enhance([:bar, :baz])
         | 
| 43 | 
            +
                assert_equal "<Rake::Task foo => [bar, baz]>", t.inspect
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 31 46 | 
             
              def test_invoke
         | 
| 32 47 | 
             
                runlist = []
         | 
| 33 48 | 
             
                t1 = intern(:t1).enhance([:t2, :t3]) { |t| runlist << t.name; 3321 }
         | 
| @@ -38,6 +53,19 @@ class TestTask < Test::Unit::TestCase | |
| 38 53 | 
             
                assert_equal ["t2", "t3", "t1"], runlist
         | 
| 39 54 | 
             
              end
         | 
| 40 55 |  | 
| 56 | 
            +
              def test_invoke_with_circular_dependencies
         | 
| 57 | 
            +
                runlist = []
         | 
| 58 | 
            +
                t1 = intern(:t1).enhance([:t2]) { |t| runlist << t.name; 3321 }
         | 
| 59 | 
            +
                t2 = intern(:t2).enhance([:t1]) { |t| runlist << t.name }
         | 
| 60 | 
            +
                assert_equal [:t2], t1.prerequisites
         | 
| 61 | 
            +
                assert_equal [:t1], t2.prerequisites
         | 
| 62 | 
            +
                ex = assert_raise RuntimeError do
         | 
| 63 | 
            +
                  t1.invoke
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
                assert_match(/circular dependency/i, ex.message)
         | 
| 66 | 
            +
                assert_match(/t1 => t2 => t1/, ex.message)
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 41 69 | 
             
              def test_dry_run_prevents_actions
         | 
| 42 70 | 
             
                Rake.application.options.dryrun = true
         | 
| 43 71 | 
             
                runlist = []
         | 
| @@ -136,11 +164,193 @@ class TestTask < Test::Unit::TestCase | |
| 136 164 | 
             
                assert_match(/pre-requisites:\s*--t2/, out)
         | 
| 137 165 | 
             
              end
         | 
| 138 166 |  | 
| 139 | 
            -
              private
         | 
| 140 167 |  | 
| 141 | 
            -
              def  | 
| 142 | 
            -
                 | 
| 168 | 
            +
              def test_extended_comments
         | 
| 169 | 
            +
                desc %{
         | 
| 170 | 
            +
                  This is a comment.
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  And this is the extended comment.
         | 
| 173 | 
            +
                  name -- Name of task to execute.
         | 
| 174 | 
            +
                  rev  -- Software revision to use.
         | 
| 175 | 
            +
                }
         | 
| 176 | 
            +
                t = intern(:t, :name, :rev)
         | 
| 177 | 
            +
                assert_equal "[name,rev]", t.arg_description
         | 
| 178 | 
            +
                assert_equal "This is a comment.", t.comment
         | 
| 179 | 
            +
                assert_match(/^\s*name -- Name/, t.full_comment)
         | 
| 180 | 
            +
                assert_match(/^\s*rev  -- Software/, t.full_comment)
         | 
| 181 | 
            +
                assert_match(/\A\s*This is a comment\.$/, t.full_comment)
         | 
| 182 | 
            +
              end
         | 
| 183 | 
            +
             | 
| 184 | 
            +
              def test_multiple_comments
         | 
| 185 | 
            +
                desc "line one"
         | 
| 186 | 
            +
                t = intern(:t)
         | 
| 187 | 
            +
                desc "line two"
         | 
| 188 | 
            +
                intern(:t)
         | 
| 189 | 
            +
                assert_equal "line one / line two", t.comment
         | 
| 143 190 | 
             
              end
         | 
| 144 191 |  | 
| 192 | 
            +
              def test_settable_comments
         | 
| 193 | 
            +
                t = intern(:t)
         | 
| 194 | 
            +
                t.comment = "HI"
         | 
| 195 | 
            +
                assert_equal "HI", t.comment
         | 
| 196 | 
            +
              end
         | 
| 145 197 | 
             
            end
         | 
| 146 198 |  | 
| 199 | 
            +
            ######################################################################
         | 
| 200 | 
            +
            class TestTaskWithArguments < Test::Unit::TestCase
         | 
| 201 | 
            +
              include CaptureStdout
         | 
| 202 | 
            +
              include Rake
         | 
| 203 | 
            +
              include Interning
         | 
| 204 | 
            +
             | 
| 205 | 
            +
              def setup
         | 
| 206 | 
            +
                Task.clear
         | 
| 207 | 
            +
              end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
              def test_no_args_given
         | 
| 210 | 
            +
                t = task :t
         | 
| 211 | 
            +
                assert_equal [], t.arg_names
         | 
| 212 | 
            +
              end
         | 
| 213 | 
            +
             | 
| 214 | 
            +
              def test_args_given
         | 
| 215 | 
            +
                t = task :t, :a, :b
         | 
| 216 | 
            +
                assert_equal [:a, :b], t.arg_names
         | 
| 217 | 
            +
              end
         | 
| 218 | 
            +
             | 
| 219 | 
            +
              def test_name_and_needs
         | 
| 220 | 
            +
                t = task(:t => [:pre])
         | 
| 221 | 
            +
                assert_equal "t", t.name
         | 
| 222 | 
            +
                assert_equal [], t.arg_names
         | 
| 223 | 
            +
                assert_equal ["pre"], t.prerequisites
         | 
| 224 | 
            +
              end
         | 
| 225 | 
            +
             | 
| 226 | 
            +
              def test_name_and_explicit_needs
         | 
| 227 | 
            +
                t = task(:t, :needs => [:pre])
         | 
| 228 | 
            +
                assert_equal "t", t.name
         | 
| 229 | 
            +
                assert_equal [], t.arg_names
         | 
| 230 | 
            +
                assert_equal ["pre"], t.prerequisites
         | 
| 231 | 
            +
              end
         | 
| 232 | 
            +
             | 
| 233 | 
            +
              def test_name_args_and_explicit_needs
         | 
| 234 | 
            +
                t = task(:t, :x, :y, :needs => [:pre])
         | 
| 235 | 
            +
                assert_equal "t", t.name
         | 
| 236 | 
            +
                assert_equal [:x, :y], t.arg_names
         | 
| 237 | 
            +
                assert_equal ["pre"], t.prerequisites
         | 
| 238 | 
            +
              end
         | 
| 239 | 
            +
             | 
| 240 | 
            +
              def test_illegal_keys_in_task_name_hash
         | 
| 241 | 
            +
                assert_raise RuntimeError do
         | 
| 242 | 
            +
                  t = task(:t, :x, :y => 1, :needs => [:pre])
         | 
| 243 | 
            +
                end
         | 
| 244 | 
            +
              end
         | 
| 245 | 
            +
             | 
| 246 | 
            +
              def test_arg_list_is_empty_if_no_args_given
         | 
| 247 | 
            +
                t = intern(:t).enhance do |tt, args|
         | 
| 248 | 
            +
                  assert_equal({}, args.to_hash)
         | 
| 249 | 
            +
                end
         | 
| 250 | 
            +
                t.invoke(1, 2, 3)
         | 
| 251 | 
            +
              end
         | 
| 252 | 
            +
             | 
| 253 | 
            +
              def test_tasks_can_access_arguments_as_hash
         | 
| 254 | 
            +
                t = task :t, :a, :b, :c do |tt, args|
         | 
| 255 | 
            +
                  assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
         | 
| 256 | 
            +
                  assert_equal 1, args[:a]
         | 
| 257 | 
            +
                  assert_equal 2, args[:b]
         | 
| 258 | 
            +
                  assert_equal 3, args[:c]
         | 
| 259 | 
            +
                  assert_equal 1, args.a
         | 
| 260 | 
            +
                  assert_equal 2, args.b
         | 
| 261 | 
            +
                  assert_equal 3, args.c
         | 
| 262 | 
            +
                end
         | 
| 263 | 
            +
                t.invoke(1, 2, 3)
         | 
| 264 | 
            +
              end
         | 
| 265 | 
            +
             | 
| 266 | 
            +
              def test_actions_of_various_arity_are_ok_with_args
         | 
| 267 | 
            +
                notes = []
         | 
| 268 | 
            +
                t = intern(:t, :x).enhance do
         | 
| 269 | 
            +
                  notes << :a
         | 
| 270 | 
            +
                end
         | 
| 271 | 
            +
                t.enhance do | |
         | 
| 272 | 
            +
                  notes << :b
         | 
| 273 | 
            +
                end
         | 
| 274 | 
            +
                t.enhance do |task|
         | 
| 275 | 
            +
                  notes << :c
         | 
| 276 | 
            +
                  assert_kind_of Task, task
         | 
| 277 | 
            +
                end
         | 
| 278 | 
            +
                t.enhance do |t2, args|
         | 
| 279 | 
            +
                  notes << :d
         | 
| 280 | 
            +
                  assert_equal t, t2
         | 
| 281 | 
            +
                  assert_equal({:x => 1}, args.to_hash)
         | 
| 282 | 
            +
                end
         | 
| 283 | 
            +
                assert_nothing_raised do t.invoke(1) end
         | 
| 284 | 
            +
                assert_equal [:a, :b, :c, :d], notes
         | 
| 285 | 
            +
              end
         | 
| 286 | 
            +
             | 
| 287 | 
            +
              def test_arguments_are_passed_to_block
         | 
| 288 | 
            +
                t = intern(:t, :a, :b).enhance { |tt, args|
         | 
| 289 | 
            +
                  assert_equal( { :a => 1, :b => 2 }, args.to_hash )
         | 
| 290 | 
            +
                }
         | 
| 291 | 
            +
                t.invoke(1, 2)
         | 
| 292 | 
            +
              end
         | 
| 293 | 
            +
             | 
| 294 | 
            +
              def test_extra_parameters_are_ignored
         | 
| 295 | 
            +
                t = intern(:t, :a).enhance { |tt, args|
         | 
| 296 | 
            +
                  assert_equal 1, args.a
         | 
| 297 | 
            +
                  assert_nil args[2]
         | 
| 298 | 
            +
                }
         | 
| 299 | 
            +
                t.invoke(1, 2)
         | 
| 300 | 
            +
              end
         | 
| 301 | 
            +
             | 
| 302 | 
            +
              def test_arguments_are_passed_to_all_blocks
         | 
| 303 | 
            +
                counter = 0
         | 
| 304 | 
            +
                t = task :t, :a
         | 
| 305 | 
            +
                task :t do |tt, args|
         | 
| 306 | 
            +
                  assert_equal 1, args.a
         | 
| 307 | 
            +
                  counter += 1
         | 
| 308 | 
            +
                end
         | 
| 309 | 
            +
                task :t do |tt, args|
         | 
| 310 | 
            +
                  assert_equal 1, args.a
         | 
| 311 | 
            +
                  counter += 1
         | 
| 312 | 
            +
                end
         | 
| 313 | 
            +
                t.invoke(1)
         | 
| 314 | 
            +
                assert_equal 2, counter
         | 
| 315 | 
            +
              end
         | 
| 316 | 
            +
             | 
| 317 | 
            +
              def test_block_with_no_parameters_is_ok
         | 
| 318 | 
            +
                t = intern(:t).enhance { }
         | 
| 319 | 
            +
                t.invoke(1, 2)
         | 
| 320 | 
            +
              end
         | 
| 321 | 
            +
             | 
| 322 | 
            +
              def test_name_with_args
         | 
| 323 | 
            +
                desc "T"
         | 
| 324 | 
            +
                t = intern(:tt, :a, :b)
         | 
| 325 | 
            +
                assert_equal "tt", t.name
         | 
| 326 | 
            +
                assert_equal "T", t.comment
         | 
| 327 | 
            +
                assert_equal "[a,b]", t.arg_description
         | 
| 328 | 
            +
                assert_equal "tt[a,b]", t.name_with_args
         | 
| 329 | 
            +
                assert_equal [:a, :b],t.arg_names
         | 
| 330 | 
            +
              end
         | 
| 331 | 
            +
             | 
| 332 | 
            +
              def test_named_args_are_passed_to_prereqs
         | 
| 333 | 
            +
                value = nil
         | 
| 334 | 
            +
                pre = intern(:pre, :rev).enhance { |t, args| value = args.rev }
         | 
| 335 | 
            +
                t = intern(:t, :name, :rev).enhance([:pre])
         | 
| 336 | 
            +
                t.invoke("bill", "1.2")
         | 
| 337 | 
            +
                assert_equal "1.2", value
         | 
| 338 | 
            +
              end
         | 
| 339 | 
            +
             | 
| 340 | 
            +
              def test_args_not_passed_if_no_prereq_names
         | 
| 341 | 
            +
                pre = intern(:pre).enhance { |t, args|
         | 
| 342 | 
            +
                  assert_equal({}, args.to_hash)
         | 
| 343 | 
            +
                  assert_equal "bill", args.name
         | 
| 344 | 
            +
                }
         | 
| 345 | 
            +
                t = intern(:t, :name, :rev).enhance([:pre])
         | 
| 346 | 
            +
                t.invoke("bill", "1.2")
         | 
| 347 | 
            +
              end
         | 
| 348 | 
            +
             | 
| 349 | 
            +
              def test_args_not_passed_if_no_arg_names
         | 
| 350 | 
            +
                pre = intern(:pre, :rev).enhance { |t, args|
         | 
| 351 | 
            +
                  assert_equal({ :rev => nil }, args.to_hash)
         | 
| 352 | 
            +
                }
         | 
| 353 | 
            +
                t = intern(:t).enhance([:pre])
         | 
| 354 | 
            +
                t.invoke("bill", "1.2")
         | 
| 355 | 
            +
              end
         | 
| 356 | 
            +
            end
         |