TaskChainedTest.pm.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. # Unit test for Task::Chained
  2. package TaskChainedTest;
  3. use strict;
  4. use Test::More;
  5. use Task::Chained;
  6. use Task::Testing;
  7. sub start {
  8. print "### Starting TaskChainedTestn";
  9. testBasicUsage();
  10. testMutexChanges();
  11. }
  12. sub testBasicUsage {
  13. print "Testing basic usage...n";
  14. my $taskA = new Task::Testing(name => 'A', mutexes => ['1', '2']);
  15. my $taskB = new Task::Testing(name => 'B', mutexes => []);
  16. my $taskC = new Task::Testing(name => 'C', mutexes => ['2', '3']);
  17. my $chain = new Task::Chained(tasks => [$taskA, $taskB, $taskC]);
  18. $chain->activate();
  19. ok($chain->getSubtask() == $taskA, "Current subtask is A.");
  20. is_deeply($chain->getMutexes(), ['1', '2'], "Chain has same mutexes as task A.");
  21. ok($chain->getStatus == Task::RUNNING, "Chain is running.");
  22. $chain->iterate();
  23. ok($chain->getSubtask() == $taskA, "Current subtask is still A.");
  24. is_deeply($chain->getMutexes(), ['1', '2'], "Chain still has same mutexes as task A.");
  25. ok($chain->getStatus == Task::RUNNING, "Chain is running.");
  26. $taskA->markDone();
  27. $chain->iterate();
  28. ok($chain->getSubtask() == $taskB, "Current subtask is B.");
  29. is_deeply($chain->getMutexes(), [], "Chain has same mutexes as task B.");
  30. ok($chain->getStatus == Task::RUNNING, "Chain is running.");
  31. $taskB->markDone();
  32. $chain->iterate();
  33. ok($chain->getSubtask() == $taskC, "Current subtask is C.");
  34. is_deeply($chain->getMutexes(), ['2', '3'], "Chain has same mutexes as task C.");
  35. ok($chain->getStatus == Task::RUNNING, "Chain is running.");
  36. $chain->iterate();
  37. ok($chain->getSubtask() == $taskC, "Current subtask is still C.");
  38. is_deeply($chain->getMutexes(), ['2', '3'], "Chain still has same mutexes as task C.");
  39. ok($chain->getStatus == Task::RUNNING, "Chain is running.");
  40. $taskC->markDone();
  41. $chain->iterate();
  42. ok(!defined($chain->getSubtask()), "No subtask active.");
  43. ok($chain->getStatus() == Task::DONE, "Chain is done.");
  44. }
  45. sub testMutexChanges {
  46. print "Testing dynamic mutex changes...n";
  47. my $taskA = new Task::Testing(name => 'A', mutexes => ['1', '2']);
  48. my $taskB = new Task::Testing(name => 'B', mutexes => []);
  49. my $taskC = new Task::Testing(name => 'C', mutexes => ['2', '3']);
  50. my $chain = new Task::Chained(tasks => [$taskA, $taskB, $taskC]);
  51. $chain->activate();
  52. $taskA->setMutexes('Foo', 'Bar');
  53. is_deeply($chain->getMutexes(), ['Foo', 'Bar']);
  54. $taskA->setMutexes();
  55. is_deeply($chain->getMutexes(), []);
  56. $taskA->setMutexes('Test');
  57. is_deeply($chain->getMutexes(), ['Test']);
  58. $taskB->setMutexes('hello');
  59. $taskA->markDone();
  60. $chain->iterate();
  61. ok($chain->getSubtask() == $taskB, "Current subtask is B.");
  62. is_deeply($chain->getMutexes(), ['hello']);
  63. $taskB->markDone();
  64. $chain->iterate();
  65. ok($chain->getSubtask() == $taskC, "Current subtask is C.");
  66. is_deeply($chain->getMutexes(), ['2', '3']);
  67. $taskC->setMutexes('2', '3', '4');
  68. is_deeply($chain->getMutexes(), ['2', '3', '4']);
  69. $taskC->markDone();
  70. $chain->iterate();
  71. ok(!defined($chain->getSubtask()), "No subtask active.");
  72. }
  73. 1;