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.
- data/CHANGELOG +47 -0
- data/README.rdoc +228 -0
- data/Rakefile +247 -0
- data/bin/deep_test +15 -0
- data/lib/deep_test.rb +91 -0
- data/lib/deep_test/database/mysql_setup_listener.rb +112 -0
- data/lib/deep_test/database/postgresql_setup_listener.rb +116 -0
- data/lib/deep_test/database/setup_listener.rb +125 -0
- data/lib/deep_test/deadlock_detector.rb +7 -0
- data/lib/deep_test/distributed/dispatch_controller.rb +53 -0
- data/lib/deep_test/distributed/drb_client_connection_info.rb +15 -0
- data/lib/deep_test/distributed/filename_resolver.rb +40 -0
- data/lib/deep_test/distributed/master_test_server.rb +52 -0
- data/lib/deep_test/distributed/multi_test_server_proxy.rb +44 -0
- data/lib/deep_test/distributed/null_work_unit.rb +12 -0
- data/lib/deep_test/distributed/remote_worker_client.rb +54 -0
- data/lib/deep_test/distributed/remote_worker_server.rb +82 -0
- data/lib/deep_test/distributed/rsync.rb +37 -0
- data/lib/deep_test/distributed/show_status.rhtml +41 -0
- data/lib/deep_test/distributed/test_server.rb +78 -0
- data/lib/deep_test/distributed/test_server_status.rb +9 -0
- data/lib/deep_test/distributed/test_server_workers.rb +24 -0
- data/lib/deep_test/distributed/throughput_runner.rb +42 -0
- data/lib/deep_test/distributed/throughput_statistics.rb +26 -0
- data/lib/deep_test/distributed/throughput_worker_client.rb +19 -0
- data/lib/deep_test/extensions/drb_extension.rb +34 -0
- data/lib/deep_test/extensions/object_extension.rb +40 -0
- data/lib/deep_test/listener_list.rb +17 -0
- data/lib/deep_test/local_workers.rb +55 -0
- data/lib/deep_test/logger.rb +17 -0
- data/lib/deep_test/marshallable_exception_wrapper.rb +44 -0
- data/lib/deep_test/metrics/gatherer.rb +67 -0
- data/lib/deep_test/metrics/queue_lock_wait_time_measurement.rb +133 -0
- data/lib/deep_test/null_worker_listener.rb +62 -0
- data/lib/deep_test/option.rb +60 -0
- data/lib/deep_test/options.rb +110 -0
- data/lib/deep_test/process_orchestrator.rb +49 -0
- data/lib/deep_test/rake_tasks.rb +11 -0
- data/lib/deep_test/result_reader.rb +36 -0
- data/lib/deep_test/rspec_detector.rb +21 -0
- data/lib/deep_test/server.rb +75 -0
- data/lib/deep_test/spec.rb +13 -0
- data/lib/deep_test/spec/extensions/example_group_methods.rb +64 -0
- data/lib/deep_test/spec/extensions/example_methods.rb +46 -0
- data/lib/deep_test/spec/extensions/options.rb +43 -0
- data/lib/deep_test/spec/extensions/reporter.rb +29 -0
- data/lib/deep_test/spec/extensions/spec_task.rb +20 -0
- data/lib/deep_test/spec/runner.rb +57 -0
- data/lib/deep_test/spec/work_result.rb +33 -0
- data/lib/deep_test/spec/work_unit.rb +59 -0
- data/lib/deep_test/test.rb +10 -0
- data/lib/deep_test/test/extensions/error.rb +14 -0
- data/lib/deep_test/test/runner.rb +24 -0
- data/lib/deep_test/test/supervised_test_suite.rb +49 -0
- data/lib/deep_test/test/work_result.rb +34 -0
- data/lib/deep_test/test/work_unit.rb +40 -0
- data/lib/deep_test/test_task.rb +47 -0
- data/lib/deep_test/ui/console.rb +76 -0
- data/lib/deep_test/ui/null.rb +17 -0
- data/lib/deep_test/warlock.rb +134 -0
- data/lib/deep_test/worker.rb +57 -0
- data/script/internal/run_test_suite.rb +7 -0
- data/script/public/master_test_server.rb +24 -0
- data/script/public/test_server.rb +18 -0
- data/script/public/test_throughput.rb +29 -0
- data/spec/deep_test/option_spec.rb +33 -0
- data/spec/deep_test/options_spec.rb +183 -0
- data/spec/deep_test/spec/extensions/example_group_methods_spec.rb +48 -0
- data/spec/deep_test/spec/extensions/example_methods_spec.rb +61 -0
- data/spec/deep_test/spec/extensions/options_spec.rb +23 -0
- data/spec/deep_test/spec/extensions/reporter_spec.rb +28 -0
- data/spec/deep_test/spec/extensions/spec_task_spec.rb +36 -0
- data/spec/deep_test/spec/runner_spec.rb +106 -0
- data/spec/deep_test/spec/work_result_spec.rb +14 -0
- data/spec/deep_test/spec/work_unit_spec.rb +78 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/thread_worker.rb +25 -0
- data/test/deep_test/database/mysql_setup_listener_test.rb +14 -0
- data/test/deep_test/distributed/dispatch_controller_test.rb +209 -0
- data/test/deep_test/distributed/drb_client_connection_info_test.rb +42 -0
- data/test/deep_test/distributed/filename_resolver_test.rb +52 -0
- data/test/deep_test/distributed/master_test_server_test.rb +32 -0
- data/test/deep_test/distributed/multi_test_server_proxy_test.rb +96 -0
- data/test/deep_test/distributed/remote_worker_client_test.rb +180 -0
- data/test/deep_test/distributed/remote_worker_server_test.rb +99 -0
- data/test/deep_test/distributed/rsync_test.rb +67 -0
- data/test/deep_test/distributed/test_server_test.rb +94 -0
- data/test/deep_test/distributed/test_server_workers_test.rb +26 -0
- data/test/deep_test/distributed/throughput_runner_test.rb +68 -0
- data/test/deep_test/distributed/throughput_worker_client_test.rb +28 -0
- data/test/deep_test/extensions/object_extension_test.rb +37 -0
- data/test/deep_test/listener_list_test.rb +20 -0
- data/test/deep_test/local_workers_test.rb +22 -0
- data/test/deep_test/logger_test.rb +11 -0
- data/test/deep_test/marshallable_exception_wrapper_test.rb +44 -0
- data/test/deep_test/metrics/gatherer_test.rb +66 -0
- data/test/deep_test/process_orchestrator_test.rb +11 -0
- data/test/deep_test/result_reader_test.rb +128 -0
- data/test/deep_test/server_test.rb +58 -0
- data/test/deep_test/test/extensions/error_test.rb +40 -0
- data/test/deep_test/test/runner_test.rb +7 -0
- data/test/deep_test/test/supervised_test_suite_test.rb +79 -0
- data/test/deep_test/test/work_result_test.rb +81 -0
- data/test/deep_test/test/work_unit_test.rb +61 -0
- data/test/deep_test/test_task_test.rb +43 -0
- data/test/deep_test/ui/console_test.rb +9 -0
- data/test/deep_test/warlock_test.rb +38 -0
- data/test/deep_test/worker_test.rb +94 -0
- data/test/failing.rake +11 -0
- data/test/failing.rb +7 -0
- data/test/fake_deadlock_error.rb +12 -0
- data/test/simple_test_blackboard.rb +45 -0
- data/test/simple_test_blackboard_test.rb +33 -0
- data/test/test_factory.rb +74 -0
- data/test/test_helper.rb +15 -0
- data/test/test_task_test.rb +72 -0
- metadata +214 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "should support setting timeout_in_seconds" do
|
|
5
|
+
t = DeepTest::TestTask.new :deep_test do |t|
|
|
6
|
+
t.stubs(:desc)
|
|
7
|
+
t.stubs(:task)
|
|
8
|
+
t.timeout_in_seconds = 20
|
|
9
|
+
end
|
|
10
|
+
assert_equal 20, t.instance_variable_get(:@options).timeout_in_seconds
|
|
11
|
+
assert_equal 20, t.timeout_in_seconds
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test "should support setting distributed_server" do
|
|
15
|
+
t = DeepTest::TestTask.new :deep_test do |t|
|
|
16
|
+
t.stubs(:desc)
|
|
17
|
+
t.stubs(:task)
|
|
18
|
+
t.distributed_server = "uri"
|
|
19
|
+
end
|
|
20
|
+
assert_equal "uri", t.instance_variable_get(:@options).distributed_server
|
|
21
|
+
assert_equal "uri", t.distributed_server
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "should support worker_listener" do
|
|
25
|
+
t = DeepTest::TestTask.new :deep_test do |t|
|
|
26
|
+
t.stubs(:desc)
|
|
27
|
+
t.stubs(:task)
|
|
28
|
+
t.worker_listener = "A"
|
|
29
|
+
end
|
|
30
|
+
assert_equal "A", t.instance_variable_get(:@options).worker_listener
|
|
31
|
+
assert_equal "A", t.worker_listener
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "should support server_port" do
|
|
35
|
+
t = DeepTest::TestTask.new :deep_test do |t|
|
|
36
|
+
t.stubs(:desc)
|
|
37
|
+
t.stubs(:task)
|
|
38
|
+
t.server_port = 10
|
|
39
|
+
end
|
|
40
|
+
assert_equal 10, t.instance_variable_get(:@options).server_port
|
|
41
|
+
assert_equal 10, t.server_port
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "running? is true if sending kill(0, pid) does not fail" do
|
|
5
|
+
warlock = DeepTest::Warlock.new
|
|
6
|
+
Process.expects(:kill).with(0, :pid)
|
|
7
|
+
assert_equal true, warlock.running?(:pid)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test "running? is false if Process.kill(0, pid) raises Errno::ESRCH" do
|
|
11
|
+
warlock = DeepTest::Warlock.new
|
|
12
|
+
Process.stubs(:kill).raises(Errno::ESRCH)
|
|
13
|
+
assert_equal false, warlock.running?(:pid)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "running? is true if Process.kill raises Exception" do
|
|
17
|
+
warlock = DeepTest::Warlock.new
|
|
18
|
+
Process.stubs(:kill).raises(Exception)
|
|
19
|
+
assert_equal true, warlock.running?(:pid)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test "demon_count is 0 initially" do
|
|
23
|
+
assert_equal 0, DeepTest::Warlock.new.demon_count
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "add_demon increases demon_count by 1" do
|
|
27
|
+
warlock = DeepTest::Warlock.new
|
|
28
|
+
warlock.send(:add_demon, "name", 1)
|
|
29
|
+
assert_equal 1, warlock.demon_count
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test "remove_demon increases demon_count by 1" do
|
|
33
|
+
warlock = DeepTest::Warlock.new
|
|
34
|
+
warlock.send(:add_demon, "name", 1)
|
|
35
|
+
warlock.send(:remove_demon, "name", 1)
|
|
36
|
+
assert_equal 0, warlock.demon_count
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "puts result on blackboard" do
|
|
5
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
6
|
+
blackboard.write_work DeepTest::Test::WorkUnit.new(TestFactory.passing_test)
|
|
7
|
+
|
|
8
|
+
DeepTest::Worker.new(0, blackboard,stub_everything).run
|
|
9
|
+
|
|
10
|
+
assert_kind_of Test::Unit::TestResult, blackboard.take_result
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test "puts passing and failing tests on blackboard for each test" do
|
|
14
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
15
|
+
blackboard.write_work DeepTest::Test::WorkUnit.new(TestFactory.passing_test)
|
|
16
|
+
blackboard.write_work DeepTest::Test::WorkUnit.new(TestFactory.failing_test)
|
|
17
|
+
|
|
18
|
+
DeepTest::Worker.new(0, blackboard, stub_everything).run
|
|
19
|
+
|
|
20
|
+
result_1 = blackboard.take_result
|
|
21
|
+
result_2 = blackboard.take_result
|
|
22
|
+
|
|
23
|
+
assert_equal true, (result_1.passed? || result_2.passed?)
|
|
24
|
+
assert_equal false, (result_1.passed? && result_2.passed?)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "notifies listener that it is starting" do
|
|
28
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
29
|
+
listener = stub_everything
|
|
30
|
+
worker = DeepTest::Worker.new(0, blackboard, listener)
|
|
31
|
+
listener.expects(:starting).with(worker)
|
|
32
|
+
worker.run
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "notifies listener that it is about to do work" do
|
|
36
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
37
|
+
work_unit = DeepTest::Test::WorkUnit.new(TestFactory.passing_test)
|
|
38
|
+
blackboard.write_work work_unit
|
|
39
|
+
listener = stub_everything
|
|
40
|
+
worker = DeepTest::Worker.new(0, blackboard, listener)
|
|
41
|
+
listener.expects(:starting_work).with(worker, work_unit)
|
|
42
|
+
worker.run
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
test "notifies listener that it has done work" do
|
|
46
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
47
|
+
work_unit = mock(:run => :result)
|
|
48
|
+
blackboard.write_work work_unit
|
|
49
|
+
listener = stub_everything
|
|
50
|
+
worker = DeepTest::Worker.new(0, blackboard, listener)
|
|
51
|
+
listener.expects(:finished_work).with(worker, work_unit, :result)
|
|
52
|
+
worker.run
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test "exception raised by work unit gives in Worker::Error" do
|
|
56
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
57
|
+
work_unit = mock
|
|
58
|
+
work_unit.expects(:run).raises(exception = RuntimeError.new)
|
|
59
|
+
blackboard.write_work work_unit
|
|
60
|
+
|
|
61
|
+
DeepTest::Worker.new(0, blackboard, stub_everything).run
|
|
62
|
+
|
|
63
|
+
assert_equal DeepTest::Worker::Error.new(work_unit, exception),
|
|
64
|
+
blackboard.take_result
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
test "requests work until it finds some" do
|
|
68
|
+
blackboard = mock
|
|
69
|
+
blackboard.expects(:take_work).times(3).
|
|
70
|
+
raises(DeepTest::Server::NoWorkUnitsAvailableError).
|
|
71
|
+
returns(work_unit = mock(:run => nil)).
|
|
72
|
+
returns(nil)
|
|
73
|
+
|
|
74
|
+
blackboard.expects(:write_result)
|
|
75
|
+
|
|
76
|
+
DeepTest::Worker.new(0, blackboard, stub_everything).run
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
test "finishes running when no more work units are remaining" do
|
|
80
|
+
blackboard = mock
|
|
81
|
+
blackboard.expects(:take_work).
|
|
82
|
+
raises(DeepTest::Server::NoWorkUnitsRemainingError)
|
|
83
|
+
|
|
84
|
+
DeepTest::Worker.new(0, blackboard, stub_everything).run
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test "number is available to indentify worker" do
|
|
88
|
+
assert_equal 1, DeepTest::Worker.new(1, nil, nil).number
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
test "does not fork from rake" do
|
|
92
|
+
assert !defined?($rakefile)
|
|
93
|
+
end
|
|
94
|
+
end
|
data/test/failing.rake
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
|
3
|
+
require "deep_test"
|
|
4
|
+
require "deep_test/rake_tasks"
|
|
5
|
+
|
|
6
|
+
task :default => %w[deep_test_failing]
|
|
7
|
+
|
|
8
|
+
DeepTest::TestTask.new :deep_test_failing do |t|
|
|
9
|
+
t.number_of_workers = 1
|
|
10
|
+
t.pattern = "test/failing.rb"
|
|
11
|
+
end
|
data/test/failing.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
unless defined?(ActiveRecord::StatementInvalid)
|
|
2
|
+
module ActiveRecord
|
|
3
|
+
class StatementInvalid < StandardError
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class FakeDeadlockError
|
|
9
|
+
def self.new
|
|
10
|
+
ActiveRecord::StatementInvalid.new("Deadlock found when trying to get lock")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module DeepTest
|
|
2
|
+
class SimpleTestBlackboard
|
|
3
|
+
attr_accessor :debug, :simulate_result_overdue_error
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@work_units = []
|
|
7
|
+
@test_results = []
|
|
8
|
+
@semaphore = Mutex.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def take_result
|
|
12
|
+
raise DeepTest::Server::ResultOverdueError if @simulate_result_overdue_error
|
|
13
|
+
@semaphore.synchronize do
|
|
14
|
+
log_and_return "take_result", @test_results.shift
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def take_work
|
|
19
|
+
@semaphore.synchronize do
|
|
20
|
+
log_and_return "take_work", @work_units.shift
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def write_result(result)
|
|
25
|
+
@semaphore.synchronize do
|
|
26
|
+
log_and_return "write_result", result
|
|
27
|
+
@test_results.push result
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def write_work(work_unit)
|
|
32
|
+
@semaphore.synchronize do
|
|
33
|
+
log_and_return "write_work", work_unit
|
|
34
|
+
@work_units.push work_unit
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def log_and_return(message, object)
|
|
39
|
+
if debug && object
|
|
40
|
+
puts "* #{message} #{object.inspect}"
|
|
41
|
+
end
|
|
42
|
+
object
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "a test that is put on can be taken off later" do
|
|
5
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
6
|
+
test_case = TestFactory.passing_test
|
|
7
|
+
blackboard.write_work test_case
|
|
8
|
+
assert_equal test_case, blackboard.take_work
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "taking a test when all have been taken returns nil" do
|
|
12
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
13
|
+
test_case = TestFactory.passing_test
|
|
14
|
+
blackboard.write_work test_case
|
|
15
|
+
blackboard.take_work
|
|
16
|
+
assert_nil blackboard.take_work
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "a result that is put on can be taken off later" do
|
|
20
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
21
|
+
result = TestFactory.passed_result
|
|
22
|
+
blackboard.write_result result
|
|
23
|
+
assert_equal result, blackboard.take_result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "taking a result when all have been taken returns nil" do
|
|
27
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
28
|
+
result = TestFactory.passed_result
|
|
29
|
+
blackboard.write_result result
|
|
30
|
+
blackboard.take_result
|
|
31
|
+
assert_nil blackboard.take_result
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module TestFactory
|
|
2
|
+
def self.failing_test
|
|
3
|
+
test_class do
|
|
4
|
+
def test_failing
|
|
5
|
+
assert_equal 1, 0
|
|
6
|
+
end
|
|
7
|
+
end.new(:test_failing)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.passed_result
|
|
11
|
+
result = Test::Unit::TestResult.new
|
|
12
|
+
result.add_run
|
|
13
|
+
result.add_assertion
|
|
14
|
+
result
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.passing_test
|
|
18
|
+
test_class do
|
|
19
|
+
def test_passing
|
|
20
|
+
assert_equal 0, 0
|
|
21
|
+
end
|
|
22
|
+
end.new(:test_passing)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.passing_test_with_stdout
|
|
26
|
+
test_class do
|
|
27
|
+
def test_passing_with_stdout
|
|
28
|
+
print "message printed to stdout"
|
|
29
|
+
assert true
|
|
30
|
+
end
|
|
31
|
+
end.new :test_passing_with_stdout
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.deadlock_once_test
|
|
35
|
+
test_class do
|
|
36
|
+
def test_deadlock_once
|
|
37
|
+
if @deadlocked
|
|
38
|
+
assert true
|
|
39
|
+
else
|
|
40
|
+
@deadlocked = true
|
|
41
|
+
raise FakeDeadlockError.new
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end.new :test_deadlock_once
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.deadlock_always_test
|
|
48
|
+
test_class do
|
|
49
|
+
def test_deadlock_always
|
|
50
|
+
raise FakeDeadlockError.new
|
|
51
|
+
end
|
|
52
|
+
end.new :test_deadlock_always
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.suite
|
|
56
|
+
Test::Unit::TestSuite.new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.test_class(&block)
|
|
60
|
+
test_class = Class.new(Test::Unit::TestCase)
|
|
61
|
+
|
|
62
|
+
class_name = external_caller.upcase.gsub(/[^A-Z0-9]/,"_").sub(/^_*/,'')
|
|
63
|
+
const_set(class_name, test_class)
|
|
64
|
+
|
|
65
|
+
test_class.class_eval &block
|
|
66
|
+
test_class
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.external_caller
|
|
70
|
+
caller.each do |trace_line|
|
|
71
|
+
return trace_line unless trace_line =~ /test_factory.rb/
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
require 'dust'
|
|
4
|
+
require 'mocha'
|
|
5
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
|
|
6
|
+
require "deep_test"
|
|
7
|
+
require 'set'
|
|
8
|
+
|
|
9
|
+
require File.dirname(__FILE__) + "/fake_deadlock_error"
|
|
10
|
+
require File.dirname(__FILE__) + "/simple_test_blackboard"
|
|
11
|
+
require File.dirname(__FILE__) + "/test_factory"
|
|
12
|
+
require File.dirname(__FILE__) + "/../spec/thread_worker"
|
|
13
|
+
|
|
14
|
+
class SomeCustomException < RuntimeError
|
|
15
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "defines a rake task with the name passed to the constructor" do
|
|
5
|
+
DeepTest::TestTask.any_instance.stubs(:desc)
|
|
6
|
+
DeepTest::TestTask.any_instance.expects(:task).with(:my_task_name)
|
|
7
|
+
DeepTest::TestTask.new :my_task_name do
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "setting pattern" do
|
|
12
|
+
pattern = "test/**/x*_test.rb"
|
|
13
|
+
task = DeepTest::TestTask.new do |t|
|
|
14
|
+
t.stubs(:define)
|
|
15
|
+
t.pattern = pattern
|
|
16
|
+
end
|
|
17
|
+
assert_equal pattern, task.pattern[-pattern.size..-1]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "default pattern is test/**/*_test.rb" do
|
|
21
|
+
task = DeepTest::TestTask.new do |t|
|
|
22
|
+
t.stubs(:define)
|
|
23
|
+
end
|
|
24
|
+
assert_equal "test/**/*_test.rb", task.pattern[-"test/**/*_test.rb".size..-1]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "default libs is ['lib']" do
|
|
28
|
+
task = DeepTest::TestTask.new do |t|
|
|
29
|
+
t.stubs(:define)
|
|
30
|
+
end
|
|
31
|
+
assert_equal ["lib"], task.libs
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "can add to libs" do
|
|
35
|
+
task = DeepTest::TestTask.new do |t|
|
|
36
|
+
t.libs << "test"
|
|
37
|
+
t.stubs(:define)
|
|
38
|
+
end
|
|
39
|
+
assert_equal ["lib", "test"], task.libs
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "define passes the -I option to the call to ruby" do
|
|
43
|
+
task = DeepTest::TestTask.new do |t|
|
|
44
|
+
t.libs << "test"
|
|
45
|
+
end
|
|
46
|
+
task.expects(:ruby).with(includes("-Ilib:test"))
|
|
47
|
+
Rake::Task["deep_test"].instance_variable_get("@actions").last.call
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "define does not pass the -I option to the call to ruby if there are no directories to add to the load path" do
|
|
51
|
+
task = DeepTest::TestTask.new do |t|
|
|
52
|
+
t.libs = []
|
|
53
|
+
end
|
|
54
|
+
task.expects(:ruby).with(Not(includes("-I")))
|
|
55
|
+
Rake::Task["deep_test"].instance_variable_get("@actions").last.call
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
test "number_of_workers defaults to 2" do
|
|
59
|
+
task = DeepTest::TestTask.new do |t|
|
|
60
|
+
t.stubs(:define)
|
|
61
|
+
end
|
|
62
|
+
assert_equal 2, task.number_of_workers
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
test "number_of_workers can be set" do
|
|
66
|
+
task = DeepTest::TestTask.new do |t|
|
|
67
|
+
t.number_of_workers = 42
|
|
68
|
+
t.stubs(:define)
|
|
69
|
+
end
|
|
70
|
+
assert_equal 42, task.number_of_workers
|
|
71
|
+
end
|
|
72
|
+
end
|