jperkins-deep_test 1.2.2

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.
Files changed (117) hide show
  1. data/CHANGELOG +47 -0
  2. data/README.rdoc +228 -0
  3. data/Rakefile +247 -0
  4. data/bin/deep_test +15 -0
  5. data/lib/deep_test.rb +91 -0
  6. data/lib/deep_test/database/mysql_setup_listener.rb +112 -0
  7. data/lib/deep_test/database/postgresql_setup_listener.rb +116 -0
  8. data/lib/deep_test/database/setup_listener.rb +125 -0
  9. data/lib/deep_test/deadlock_detector.rb +7 -0
  10. data/lib/deep_test/distributed/dispatch_controller.rb +53 -0
  11. data/lib/deep_test/distributed/drb_client_connection_info.rb +15 -0
  12. data/lib/deep_test/distributed/filename_resolver.rb +40 -0
  13. data/lib/deep_test/distributed/master_test_server.rb +52 -0
  14. data/lib/deep_test/distributed/multi_test_server_proxy.rb +44 -0
  15. data/lib/deep_test/distributed/null_work_unit.rb +12 -0
  16. data/lib/deep_test/distributed/remote_worker_client.rb +54 -0
  17. data/lib/deep_test/distributed/remote_worker_server.rb +82 -0
  18. data/lib/deep_test/distributed/rsync.rb +37 -0
  19. data/lib/deep_test/distributed/show_status.rhtml +41 -0
  20. data/lib/deep_test/distributed/test_server.rb +78 -0
  21. data/lib/deep_test/distributed/test_server_status.rb +9 -0
  22. data/lib/deep_test/distributed/test_server_workers.rb +24 -0
  23. data/lib/deep_test/distributed/throughput_runner.rb +42 -0
  24. data/lib/deep_test/distributed/throughput_statistics.rb +26 -0
  25. data/lib/deep_test/distributed/throughput_worker_client.rb +19 -0
  26. data/lib/deep_test/extensions/drb_extension.rb +34 -0
  27. data/lib/deep_test/extensions/object_extension.rb +40 -0
  28. data/lib/deep_test/listener_list.rb +17 -0
  29. data/lib/deep_test/local_workers.rb +55 -0
  30. data/lib/deep_test/logger.rb +17 -0
  31. data/lib/deep_test/marshallable_exception_wrapper.rb +44 -0
  32. data/lib/deep_test/metrics/gatherer.rb +67 -0
  33. data/lib/deep_test/metrics/queue_lock_wait_time_measurement.rb +133 -0
  34. data/lib/deep_test/null_worker_listener.rb +62 -0
  35. data/lib/deep_test/option.rb +60 -0
  36. data/lib/deep_test/options.rb +110 -0
  37. data/lib/deep_test/process_orchestrator.rb +49 -0
  38. data/lib/deep_test/rake_tasks.rb +11 -0
  39. data/lib/deep_test/result_reader.rb +36 -0
  40. data/lib/deep_test/rspec_detector.rb +21 -0
  41. data/lib/deep_test/server.rb +75 -0
  42. data/lib/deep_test/spec.rb +13 -0
  43. data/lib/deep_test/spec/extensions/example_group_methods.rb +64 -0
  44. data/lib/deep_test/spec/extensions/example_methods.rb +46 -0
  45. data/lib/deep_test/spec/extensions/options.rb +43 -0
  46. data/lib/deep_test/spec/extensions/reporter.rb +29 -0
  47. data/lib/deep_test/spec/extensions/spec_task.rb +20 -0
  48. data/lib/deep_test/spec/runner.rb +57 -0
  49. data/lib/deep_test/spec/work_result.rb +33 -0
  50. data/lib/deep_test/spec/work_unit.rb +59 -0
  51. data/lib/deep_test/test.rb +10 -0
  52. data/lib/deep_test/test/extensions/error.rb +14 -0
  53. data/lib/deep_test/test/runner.rb +24 -0
  54. data/lib/deep_test/test/supervised_test_suite.rb +49 -0
  55. data/lib/deep_test/test/work_result.rb +34 -0
  56. data/lib/deep_test/test/work_unit.rb +40 -0
  57. data/lib/deep_test/test_task.rb +47 -0
  58. data/lib/deep_test/ui/console.rb +76 -0
  59. data/lib/deep_test/ui/null.rb +17 -0
  60. data/lib/deep_test/warlock.rb +134 -0
  61. data/lib/deep_test/worker.rb +57 -0
  62. data/script/internal/run_test_suite.rb +7 -0
  63. data/script/public/master_test_server.rb +24 -0
  64. data/script/public/test_server.rb +18 -0
  65. data/script/public/test_throughput.rb +29 -0
  66. data/spec/deep_test/option_spec.rb +33 -0
  67. data/spec/deep_test/options_spec.rb +183 -0
  68. data/spec/deep_test/spec/extensions/example_group_methods_spec.rb +48 -0
  69. data/spec/deep_test/spec/extensions/example_methods_spec.rb +61 -0
  70. data/spec/deep_test/spec/extensions/options_spec.rb +23 -0
  71. data/spec/deep_test/spec/extensions/reporter_spec.rb +28 -0
  72. data/spec/deep_test/spec/extensions/spec_task_spec.rb +36 -0
  73. data/spec/deep_test/spec/runner_spec.rb +106 -0
  74. data/spec/deep_test/spec/work_result_spec.rb +14 -0
  75. data/spec/deep_test/spec/work_unit_spec.rb +78 -0
  76. data/spec/spec_helper.rb +59 -0
  77. data/spec/thread_worker.rb +25 -0
  78. data/test/deep_test/database/mysql_setup_listener_test.rb +14 -0
  79. data/test/deep_test/distributed/dispatch_controller_test.rb +209 -0
  80. data/test/deep_test/distributed/drb_client_connection_info_test.rb +42 -0
  81. data/test/deep_test/distributed/filename_resolver_test.rb +52 -0
  82. data/test/deep_test/distributed/master_test_server_test.rb +32 -0
  83. data/test/deep_test/distributed/multi_test_server_proxy_test.rb +96 -0
  84. data/test/deep_test/distributed/remote_worker_client_test.rb +180 -0
  85. data/test/deep_test/distributed/remote_worker_server_test.rb +99 -0
  86. data/test/deep_test/distributed/rsync_test.rb +67 -0
  87. data/test/deep_test/distributed/test_server_test.rb +94 -0
  88. data/test/deep_test/distributed/test_server_workers_test.rb +26 -0
  89. data/test/deep_test/distributed/throughput_runner_test.rb +68 -0
  90. data/test/deep_test/distributed/throughput_worker_client_test.rb +28 -0
  91. data/test/deep_test/extensions/object_extension_test.rb +37 -0
  92. data/test/deep_test/listener_list_test.rb +20 -0
  93. data/test/deep_test/local_workers_test.rb +22 -0
  94. data/test/deep_test/logger_test.rb +11 -0
  95. data/test/deep_test/marshallable_exception_wrapper_test.rb +44 -0
  96. data/test/deep_test/metrics/gatherer_test.rb +66 -0
  97. data/test/deep_test/process_orchestrator_test.rb +11 -0
  98. data/test/deep_test/result_reader_test.rb +128 -0
  99. data/test/deep_test/server_test.rb +58 -0
  100. data/test/deep_test/test/extensions/error_test.rb +40 -0
  101. data/test/deep_test/test/runner_test.rb +7 -0
  102. data/test/deep_test/test/supervised_test_suite_test.rb +79 -0
  103. data/test/deep_test/test/work_result_test.rb +81 -0
  104. data/test/deep_test/test/work_unit_test.rb +61 -0
  105. data/test/deep_test/test_task_test.rb +43 -0
  106. data/test/deep_test/ui/console_test.rb +9 -0
  107. data/test/deep_test/warlock_test.rb +38 -0
  108. data/test/deep_test/worker_test.rb +94 -0
  109. data/test/failing.rake +11 -0
  110. data/test/failing.rb +7 -0
  111. data/test/fake_deadlock_error.rb +12 -0
  112. data/test/simple_test_blackboard.rb +45 -0
  113. data/test/simple_test_blackboard_test.rb +33 -0
  114. data/test/test_factory.rb +74 -0
  115. data/test/test_helper.rb +15 -0
  116. data/test/test_task_test.rb +72 -0
  117. metadata +214 -0
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ unit_tests do
4
+ test "shutdown calls done_with_work" do
5
+ orchestrator = DeepTest::ProcessOrchestrator.new(nil, stub_everything, nil)
6
+ server = mock
7
+ server.expects(:done_with_work)
8
+
9
+ orchestrator.shutdown(server)
10
+ end
11
+ end
@@ -0,0 +1,128 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ unit_tests do
4
+
5
+ class FakeResult
6
+ attr_reader :identifier
7
+ def initialize(i) @identifier = i; end
8
+ def ==(other) identifier == other.identifier; end
9
+ end
10
+
11
+ test "reads all as many results as requested" do
12
+ blackboard = DeepTest::SimpleTestBlackboard.new
13
+ 1.upto(4) {|i| blackboard.write_result FakeResult.new(i)}
14
+ work_units = {1 => "One", 2 => "Two", 3 => "Three"}
15
+ DeepTest::ResultReader.new(blackboard).read(work_units) {}
16
+ assert_equal FakeResult.new(4), blackboard.take_result
17
+ end
18
+
19
+ test "returns unread tests on ResultOverdueError" do
20
+ blackboard = DeepTest::SimpleTestBlackboard.new
21
+ blackboard.simulate_result_overdue_error = true
22
+ work_units = {1 => "One"}
23
+ DeepTest.logger.expects(:error)
24
+ DeepTest::ResultReader.new(blackboard).read(work_units) {}
25
+ assert_equal({1 => "One"}, work_units)
26
+ end
27
+
28
+ test "yields each result" do
29
+ blackboard = DeepTest::SimpleTestBlackboard.new
30
+ 1.upto(3) {|i| blackboard.write_result FakeResult.new(i)}
31
+ results = []
32
+ work_units = {1 => "One", 2 => "Two", 3 => "Three"}
33
+ DeepTest::ResultReader.new(blackboard).read(work_units) {|r| results << r}
34
+ assert_equal [["One", FakeResult.new(1)],
35
+ ["Two", FakeResult.new(2)],
36
+ ["Three", FakeResult.new(3)]],
37
+ results
38
+ end
39
+
40
+ test "keeps attempting to read results when none are available" do
41
+ blackboard = DeepTest::SimpleTestBlackboard.new
42
+ work_units = {1 => "One", 2 => "Two", 3 => "Three"}
43
+ t = Thread.new {DeepTest::ResultReader.new(blackboard).read(work_units) {}}
44
+ 1.upto(4) {|i| blackboard.write_result FakeResult.new(i)}
45
+ t.join
46
+ assert_equal FakeResult.new(4), blackboard.take_result
47
+ end
48
+
49
+ test "doesn't yield empty results" do
50
+ blackboard = DeepTest::SimpleTestBlackboard.new
51
+ results = []
52
+ t = Thread.new {DeepTest::ResultReader.new(blackboard).read(1 => "One") {|r| results << r}}
53
+ blackboard.write_result FakeResult.new(1)
54
+ t.join
55
+ assert_equal [["One", FakeResult.new(1)]], results
56
+ end
57
+
58
+ test "prints output if result has output" do
59
+ blackboard = DeepTest::SimpleTestBlackboard.new
60
+ blackboard.write_result mock(:output => "output", :identifier => 1)
61
+
62
+ out = capture_stdout do
63
+ DeepTest::ResultReader.new(blackboard).read(1 => "One") {}
64
+ end
65
+
66
+ assert_equal "output", out
67
+ end
68
+
69
+ test "doesn't print any output if output is nil" do
70
+ blackboard = DeepTest::SimpleTestBlackboard.new
71
+ blackboard.write_result mock(:output => nil, :identifier => 1)
72
+
73
+ out = capture_stdout do
74
+ DeepTest::ResultReader.new(blackboard).read(1 => "One") {}
75
+ end
76
+
77
+ assert_equal "", out
78
+ end
79
+
80
+ test "prints useful error information in case of Worker::Error" do
81
+ error = RuntimeError.new "message"
82
+ error.set_backtrace ['a', 'b']
83
+
84
+ blackboard = DeepTest::SimpleTestBlackboard.new
85
+ blackboard.write_result DeepTest::Worker::Error.new("work_unit", error)
86
+
87
+
88
+ out = capture_stdout do
89
+ DeepTest::ResultReader.new(blackboard).read(1 => "One") {}
90
+ end
91
+
92
+ assert_equal "work_unit: message\na\nb\n", out
93
+ end
94
+
95
+ test "doesn't yield Worker::Error results" do
96
+ blackboard = DeepTest::SimpleTestBlackboard.new
97
+ blackboard.write_result DeepTest::Worker::Error.new("work_unit", RuntimeError.new)
98
+
99
+
100
+ results = []
101
+ capture_stdout do
102
+ DeepTest::ResultReader.new(blackboard).read(1 => "One") {|r| results << r}
103
+ end
104
+
105
+ assert_equal [], results
106
+ end
107
+
108
+ test "doesn't modify original work unit hash" do
109
+ blackboard = DeepTest::SimpleTestBlackboard.new
110
+ blackboard.write_result FakeResult.new(1)
111
+ work_units = {1 => "One"}
112
+ DeepTest::ResultReader.new(blackboard).read(work_units) {}
113
+ assert_equal({1 => "One"}, work_units)
114
+ end
115
+
116
+ test "returns remaining tests that didn't have errors" do
117
+ blackboard = DeepTest::SimpleTestBlackboard.new
118
+ blackboard.write_result FakeResult.new(1)
119
+ blackboard.write_result DeepTest::Worker::Error.new("work_unit", RuntimeError.new)
120
+
121
+ work_units = {1 => "One", 2 => "Two"}
122
+
123
+ capture_stdout do
124
+ missing_work_units = DeepTest::ResultReader.new(blackboard).read(work_units) {}
125
+ assert_equal({2 => "Two"}, missing_work_units)
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,58 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ unit_tests do
4
+ test "take_work returns result of push_work when it is available" do
5
+ server = DeepTest::Server.new(DeepTest::Options.new({}))
6
+ server.write_work :work
7
+ assert_equal :work, server.take_work
8
+ end
9
+
10
+ test "take_work raises error when no work is currently available" do
11
+ assert_raises(DeepTest::Server::NoWorkUnitsAvailableError) do
12
+ DeepTest::Server.new(DeepTest::Options.new({})).take_work
13
+ end
14
+ end
15
+
16
+ test "take_work raises error when there is no work left to" do
17
+ server = DeepTest::Server.new(DeepTest::Options.new({}))
18
+ server.done_with_work
19
+
20
+ assert_raises(DeepTest::Server::NoWorkUnitsRemainingError) do
21
+ server.take_work
22
+ end
23
+ end
24
+
25
+ test "take_result returns result of push_result when it is available" do
26
+ server = DeepTest::Server.new(DeepTest::Options.new({}))
27
+ t = Thread.new {server.take_result}
28
+ server.write_result :result
29
+ assert_equal :result, t.value
30
+ end
31
+
32
+ test "take_result timeouts out after configurable number of seconds" do
33
+ server = DeepTest::Server.new(
34
+ DeepTest::Options.new(:timeout_in_seconds => 0.01)
35
+ )
36
+ Thread.new {sleep 0.1; server.write_result :too_late}
37
+ assert_raises(DeepTest::Server::ResultOverdueError) {server.take_result}
38
+ end
39
+
40
+ test "write_work returns nil" do
41
+ server = DeepTest::Server.new(DeepTest::Options.new({}))
42
+ assert_equal nil, server.write_work(:a)
43
+ end
44
+
45
+ test "write_result returns nil" do
46
+ server = DeepTest::Server.new(DeepTest::Options.new({}))
47
+ assert_equal nil, server.write_result(:a)
48
+ end
49
+
50
+ test "start returns instance of server" do
51
+ DRb.expects(:start_service)
52
+ DRb.expects(:uri)
53
+ DeepTest.logger.expects(:info)
54
+
55
+ server = DeepTest::Server.start(DeepTest::Options.new({}))
56
+ assert_kind_of DeepTest::Server, server
57
+ end
58
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + "/../../../test_helper"
2
+
3
+ unit_tests do
4
+ test "make_exception_marshallable wraps exception in a mashallable exception" do
5
+ error = Test::Unit::Error.new "test_name", Exception.new("message")
6
+ error.make_exception_marshallable
7
+
8
+ assert_kind_of DeepTest::MarshallableExceptionWrapper, error.exception
9
+ end
10
+
11
+ test "calling make_exception_marshallable twice only wraps exception once" do
12
+ error = Test::Unit::Error.new "test_name", Exception.new("message")
13
+ error.make_exception_marshallable
14
+ error.make_exception_marshallable
15
+
16
+ assert_kind_of DeepTest::MarshallableExceptionWrapper, error.exception
17
+ end
18
+
19
+ test "error is accessible as normal when it has not been made marshallable" do
20
+ error = Test::Unit::Error.new "test_name", e = Exception.new("message")
21
+ assert_equal e, error.exception
22
+ end
23
+
24
+ test "resolve_marshallable_exception restores the original exception" do
25
+ error = Test::Unit::Error.new "test_name", Exception.new("message")
26
+ error.make_exception_marshallable
27
+ error.resolve_marshallable_exception
28
+
29
+ assert_kind_of Exception, error.exception
30
+ assert_equal 'message', error.exception.message
31
+ end
32
+
33
+ test "resolve_marshallable_exception does not fail when exception has not been made marshallable" do
34
+ error = Test::Unit::Error.new "test_name", Exception.new("message")
35
+ error.resolve_marshallable_exception
36
+
37
+ assert_kind_of Exception, error.exception
38
+ assert_equal 'message', error.exception.message
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + "/../../test_helper"
2
+
3
+ unit_tests do
4
+ test "no filters constant has empty filters" do
5
+ assert_equal [], DeepTest::Test::Runner::NO_FILTERS.filters
6
+ end
7
+ end
@@ -0,0 +1,79 @@
1
+ require File.dirname(__FILE__) + "/../../test_helper"
2
+
3
+ unit_tests do
4
+ test "run yields name for start and finished of underlying suite" do
5
+ suite = Test::Unit::TestSuite.new("name")
6
+ supervised_suite = DeepTest::Test::SupervisedTestSuite.new(suite, DeepTest::SimpleTestBlackboard.new)
7
+
8
+ yielded = []
9
+ supervised_suite.run(stub_everything) do |channel,name|
10
+ yielded << [channel,name]
11
+ end
12
+
13
+ assert_equal [[Test::Unit::TestSuite::STARTED, "name"],
14
+ [Test::Unit::TestSuite::FINISHED, "name"]], yielded
15
+ end
16
+
17
+ test "run adds tests to blackboard and reads results" do
18
+ test_case_class = Class.new(Test::Unit::TestCase) do
19
+ test("1") {}
20
+ test("2") {assert_equal true, false}
21
+ end
22
+ blackboard = DeepTest::SimpleTestBlackboard.new
23
+ supervised_suite = DeepTest::Test::SupervisedTestSuite.new(test_case_class.suite, blackboard)
24
+ result = Test::Unit::TestResult.new
25
+
26
+ worker = ThreadWorker.new(blackboard, 2)
27
+ Timeout.timeout(5) do
28
+ supervised_suite.run(result) {}
29
+ end
30
+ worker.wait_until_done
31
+
32
+ assert_equal 2, result.run_count
33
+ assert_equal 1, result.failure_count
34
+ end
35
+
36
+ test "worker errors are counted as errors" do
37
+ test_case = Class.new(Test::Unit::TestCase) do
38
+ test("1") {}
39
+ end.new("test_1")
40
+
41
+ blackboard = DeepTest::SimpleTestBlackboard.new
42
+ supervised_suite = DeepTest::Test::SupervisedTestSuite.new(test_case, blackboard)
43
+ result = Test::Unit::TestResult.new
44
+
45
+ blackboard.write_result DeepTest::Worker::Error.new(test_case, RuntimeError.new)
46
+ capture_stdout {supervised_suite.run(result) {}}
47
+
48
+ assert_equal 1, result.error_count
49
+ end
50
+
51
+ test "run yields test case finished events" do
52
+ test_case = Class.new(Test::Unit::TestCase) do
53
+ test("1") {}
54
+ end.new("test_1")
55
+
56
+ blackboard = DeepTest::SimpleTestBlackboard.new
57
+ supervised_suite = DeepTest::Test::SupervisedTestSuite.new(test_case, blackboard)
58
+
59
+ yielded = []
60
+
61
+ worker = ThreadWorker.new(blackboard, 1)
62
+ Timeout.timeout(5) do
63
+ supervised_suite.run(stub_everything) do |channel,name|
64
+ yielded << [channel, name]
65
+ end
66
+ end
67
+ worker.wait_until_done
68
+
69
+ assert_equal true, yielded.include?([::Test::Unit::TestCase::FINISHED, test_case.name])
70
+ end
71
+
72
+ test "has same size as underlying suite" do
73
+ suite = Test::Unit::TestSuite.new("name")
74
+ suite << "test"
75
+ supervised_suite = DeepTest::Test::SupervisedTestSuite.new(suite, DeepTest::SimpleTestBlackboard.new)
76
+
77
+ assert_equal suite.size, supervised_suite.size
78
+ end
79
+ end
@@ -0,0 +1,81 @@
1
+ require File.dirname(__FILE__) + "/../../test_helper"
2
+
3
+ unit_tests do
4
+ test "add_to adds correct run_count" do
5
+ result_1 = DeepTest::Test::WorkResult.new "test_name"
6
+ result_1.add_run
7
+ result_1.add_run
8
+
9
+ result_2 = Test::Unit::TestResult.new
10
+ result_1.add_to result_2
11
+
12
+ assert_equal 2, result_2.run_count
13
+ end
14
+
15
+ test "add_to adds correct assertion_count" do
16
+ result_1 = DeepTest::Test::WorkResult.new "test_name"
17
+ result_1.add_assertion
18
+ result_1.add_assertion
19
+
20
+ result_2 = Test::Unit::TestResult.new
21
+ result_1.add_to result_2
22
+
23
+ assert_equal 2, result_2.assertion_count
24
+ end
25
+
26
+ test "add_to adds correct errors" do
27
+ result_1 = DeepTest::Test::WorkResult.new "test_name"
28
+ result_1.add_error(e = Test::Unit::Error.new("test_name", Exception.new))
29
+
30
+ result_2 = Test::Unit::TestResult.new
31
+ result_1.add_to result_2
32
+
33
+ assert_equal [e], result_2.instance_variable_get(:@errors)
34
+ end
35
+
36
+
37
+ test "add_to adds correct failures" do
38
+ result_1 = DeepTest::Test::WorkResult.new "test_name"
39
+ result_1.add_failure(:failure)
40
+
41
+ result_2 = Test::Unit::TestResult.new
42
+ result_1.add_to result_2
43
+
44
+ assert_equal [:failure], result_2.instance_variable_get(:@failures)
45
+ end
46
+
47
+ test "add_error wraps exceptions" do
48
+ result = DeepTest::Test::WorkResult.new "test_name"
49
+ result.add_error Test::Unit::Error.new(
50
+ "test_wraps_exceptions",
51
+ SomeCustomException.new("the exception message")
52
+ )
53
+
54
+ error = result.instance_variable_get("@errors").last
55
+ assert_kind_of DeepTest::MarshallableExceptionWrapper, error.exception
56
+ end
57
+
58
+ test "add_to unwraps exception" do
59
+ work_result = DeepTest::Test::WorkResult.new "test_name"
60
+ work_result.add_error Test::Unit::Error.new(
61
+ "test_wraps_exceptions",
62
+ SomeCustomException.new("the exception message")
63
+ )
64
+
65
+ test_result = ::Test::Unit::TestResult.new
66
+ work_result.add_to(test_result)
67
+
68
+ error = test_result.instance_variable_get("@errors").last
69
+ assert_kind_of SomeCustomException, error.exception
70
+ end
71
+
72
+ test "failed due to deadlock" do
73
+ result = DeepTest::Test::WorkResult.new "test_name"
74
+ begin
75
+ raise FakeDeadlockError.new
76
+ rescue => ex
77
+ result.add_error Test::Unit::Error.new("test_", ex)
78
+ end
79
+ assert_equal true, result.failed_due_to_deadlock?
80
+ end
81
+ end
@@ -0,0 +1,61 @@
1
+ require File.dirname(__FILE__) + "/../../test_helper"
2
+
3
+ unit_tests do
4
+ test "returns passed result for passing test" do
5
+ work_unit = DeepTest::Test::WorkUnit.new TestFactory.passing_test
6
+ assert_equal true, work_unit.run.passed?
7
+ end
8
+
9
+ test "returns failed result for failing test" do
10
+ work_unit = DeepTest::Test::WorkUnit.new TestFactory.failing_test
11
+ assert_equal false, work_unit.run.passed?
12
+ end
13
+
14
+ test "returns result with identifier of test name" do
15
+ test = TestFactory.passing_test
16
+ work_unit = DeepTest::Test::WorkUnit.new test
17
+ assert_equal test.name, work_unit.run.identifier
18
+ end
19
+
20
+ test "capturing stdout" do
21
+ work_unit = DeepTest::Test::WorkUnit.new TestFactory.passing_test_with_stdout
22
+ assert_equal "message printed to stdout", work_unit.run.output
23
+ end
24
+
25
+ test "retry on deadlock" do
26
+ work_unit = DeepTest::Test::WorkUnit.new TestFactory.deadlock_once_test
27
+ result = work_unit.run
28
+ assert_equal 0, result.error_count
29
+ assert_equal 0, result.failure_count
30
+ assert_equal 1, result.assertion_count
31
+ end
32
+
33
+ test "skip on deadlock twice" do
34
+ work_unit = DeepTest::Test::WorkUnit.new TestFactory.deadlock_always_test
35
+ result = work_unit.run
36
+ assert_equal 0, result.error_count
37
+ assert_equal 0, result.failure_count
38
+ assert_equal 0, result.assertion_count
39
+ end
40
+
41
+ test "set test_name as identifier on deadlock" do
42
+ test = TestFactory.deadlock_always_test
43
+ work_unit = DeepTest::Test::WorkUnit.new test
44
+ assert_equal test.name, work_unit.run.identifier
45
+ end
46
+
47
+ test "equality is based on test_case" do
48
+ test_case_1 = TestFactory.passing_test
49
+ test_case_2 = TestFactory.failing_test
50
+ assert_equal DeepTest::Test::WorkUnit.new(test_case_1),
51
+ DeepTest::Test::WorkUnit.new(test_case_1)
52
+
53
+ assert_not_equal DeepTest::Test::WorkUnit.new(test_case_1),
54
+ DeepTest::Test::WorkUnit.new(test_case_2)
55
+ end
56
+
57
+ test "to_s is delegated to test case" do
58
+ test_case = TestFactory.passing_test
59
+ assert_equal test_case.to_s, DeepTest::Test::WorkUnit.new(test_case).to_s
60
+ end
61
+ end