The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package MyTest;

use strict;
use warnings;

$::QUIET = 1;

use Rex;
use Rex::Config;
use Rex::Group;
use Rex::Task;
use Rex::TaskList;
use Rex::Commands;
use Rex::Commands::Run;
use Rex::Commands::Upload;

desc("MyTest - Test1");
task(
  "test1",
  sub {
    open( my $fh, ">", "test1.txt" );
    close($fh);
  }
);

desc("MyTest - Test2");
task(
  "test2",
  sub {
    open( my $fh, ">", "test2.txt" );
    close($fh);
  }
);

1;

package main;

use Test::More tests => 11;

use_ok 'Rex';
use_ok 'Rex::Config';
use_ok 'Rex::Group';
use_ok 'Rex::Task';
use_ok 'Rex::TaskList';
use_ok 'Rex::Commands';
use_ok 'Rex::Commands::Run';
use_ok 'Rex::Commands::Upload';

Rex::Commands->import();

desc("Test");
task(
  "test",
  sub {

    needs MyTest;

    if ( -f "test1.txt" && -f "test2.txt" ) {
      unlink("test1.txt");
      unlink("test2.txt");

      return 1;
    }

    ok( 1 == -1 );
  }
);

desc("Test 2");
task(
  "test2",
  sub {

    needs MyTest "test2";

    if ( -f "test2.txt" ) {
      return 1;
    }

    ok( 1 == -1 );

  }
);

desc("Test 3");
task(
  "test3",
  sub {

    needs("test4");

    if ( -f "test4.txt" ) {
      unlink("test4.txt");
      return 1;
    }

    ok( 1 == -1 );
  }
);

desc("Test 4");
task(
  "test4",
  sub {
    open( my $fh, ">", "test4.txt" );
    close($fh);
  }
);

ok( Rex::TaskList->create()->run("test"),  "testing needs" );
ok( Rex::TaskList->create()->run("test2"), "testing needs" );
ok( Rex::TaskList->create()->run("test3"), "testing needs - local namespace" );

1;