kintama 0.1.9 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +2 -2
- data/lib/kintama.rb +26 -12
- data/lib/kintama/assertions.rb +40 -1
- data/lib/kintama/context.rb +65 -50
- data/lib/kintama/mocha.rb +32 -10
- data/lib/kintama/no_conflict.rb +2 -0
- data/lib/kintama/reporter.rb +11 -10
- data/lib/kintama/runnable.rb +2 -2
- data/lib/kintama/runner.rb +5 -5
- data/lib/kintama/test.rb +2 -2
- data/test/integration/automatic_running_test.rb +22 -0
- data/test/integration/line_based_running_test.rb +129 -0
- data/test/reporters/base_reporter_test.rb +31 -101
- data/test/reporters/inline_reporter_test.rb +23 -35
- data/test/reporters/verbose_reporter_test.rb +78 -76
- data/test/test_helper.rb +159 -2
- data/test/{assertions_test.rb → unit/assertions_test.rb} +54 -5
- data/test/unit/context_test.rb +15 -0
- data/test/unit/runner_test.rb +87 -0
- data/test/{test_and_subcontext_access_test.rb → unit/test_and_subcontext_access_test.rb} +6 -33
- data/test/usage/01_basic_usage_test.rb +131 -0
- data/test/usage/02_setup_test.rb +98 -0
- data/test/usage/03_teardown_test.rb +121 -0
- data/test/usage/04_pending_tests_test.rb +16 -0
- data/test/usage/05_aliases_test.rb +73 -0
- data/test/usage/06_defining_methods_in_tests_test.rb +202 -0
- data/test/usage/07_exceptions_test.rb +42 -0
- data/test/usage/08_start_and_finish_test.rb +261 -0
- data/test/usage/09_expectations_and_mocking_test.rb +85 -0
- data/test/usage/10_let_and_subject_test.rb +134 -0
- data/test/usage/11_matcher_test.rb +148 -0
- data/test/usage/12_action_test.rb +118 -0
- metadata +55 -48
- data/test/aliases_test.rb +0 -26
- data/test/automatic_running_test.rb +0 -45
- data/test/exceptions_test.rb +0 -40
- data/test/kintama_test.rb +0 -114
- data/test/line_based_running_test.rb +0 -143
- data/test/matcher_test.rb +0 -80
- data/test/method_behaviour_test.rb +0 -176
- data/test/pending_test_and_context.rb +0 -20
- data/test/setup_test.rb +0 -107
- data/test/start_and_finish_test.rb +0 -94
- data/test/teardown_test.rb +0 -106
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ContextTest < Minitest::Test
|
4
|
+
def test_should_clear_previous_failure_when_running_test_again
|
5
|
+
$thing = 456
|
6
|
+
x = context "Given something" do
|
7
|
+
should "work" do
|
8
|
+
assert_equal 123, $thing
|
9
|
+
end
|
10
|
+
end
|
11
|
+
assert_equal false, x.run
|
12
|
+
$thing = 123
|
13
|
+
assert_equal true, x.run
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class RunnerTest < Minitest::Test
|
4
|
+
def setup
|
5
|
+
@reporter = Kintama::Reporter::Verbose.new(colour=false)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_return_true_if_all_tests_pass
|
9
|
+
c = context "given something" do
|
10
|
+
should("pass") { assert true }
|
11
|
+
should("also pass") { assert true }
|
12
|
+
end
|
13
|
+
assert_equal true, silence_stdout { runner(c).run(@reporter) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_return_false_if_any_tests_fails
|
17
|
+
c = context "given something" do
|
18
|
+
should("pass") { assert true }
|
19
|
+
should("fail") { flunk }
|
20
|
+
end
|
21
|
+
assert_equal false, silence_stdout { runner(c).run(@reporter) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_be_able_to_run_tests_from_several_contexts
|
25
|
+
reporter = stub_reporter
|
26
|
+
|
27
|
+
reporter.expects(:test_started).twice
|
28
|
+
|
29
|
+
c1 = context "given something" do
|
30
|
+
should "pass" do
|
31
|
+
assert true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
c2 = context "given another thing" do
|
35
|
+
should "also pass" do
|
36
|
+
assert true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
r = runner(c1, c2)
|
40
|
+
silence_stdout { r.run(reporter) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_should_only_run_each_context_once
|
44
|
+
c = context "Given something" do
|
45
|
+
context "and a thing" do
|
46
|
+
should "only run this once" do
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
reporter = stub_reporter
|
52
|
+
reporter.expects(:context_started).with(responds_with(:name, "and a thing")).once
|
53
|
+
|
54
|
+
silence_stdout { runner(c).run(reporter) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_should_nest_verbose_output_properly_when_running_tests_from_several_contexts
|
58
|
+
c1 = context "given something" do
|
59
|
+
should "pass" do
|
60
|
+
assert true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
c2 = context "given another thing" do
|
64
|
+
should "also pass" do
|
65
|
+
assert true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
assert_output(/^given something\n should pass: \.\n\ngiven another thing\n should also pass: \./) do
|
69
|
+
runner(c1, c2).run(@reporter)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def stub_reporter
|
76
|
+
reporter = stub('reporter')
|
77
|
+
[:started, :finished, :context_started, :context_finished,
|
78
|
+
:test_started, :test_finished, :show_results].each do |method|
|
79
|
+
reporter.stubs(method)
|
80
|
+
end
|
81
|
+
reporter
|
82
|
+
end
|
83
|
+
|
84
|
+
def runner(*args)
|
85
|
+
Kintama::Runner::Default.new.with(*args)
|
86
|
+
end
|
87
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class TestAndSubcontextAccessTest < Test
|
3
|
+
class TestAndSubcontextAccessTest < Minitest::Test
|
4
4
|
|
5
5
|
def test_should_stash_all_defined_contexts_so_they_can_be_accessed_later
|
6
6
|
c1 = context "Given some context" do
|
@@ -14,33 +14,6 @@ class TestAndSubcontextAccessTest < Test::Unit::TestCase
|
|
14
14
|
assert_equal [c1, c2], Kintama.default_context.subcontexts
|
15
15
|
end
|
16
16
|
|
17
|
-
def test_should_allow_running_of_specific_subcontexts
|
18
|
-
x = context "Given something" do
|
19
|
-
should "not be run" do
|
20
|
-
flunk
|
21
|
-
end
|
22
|
-
context "and another thing" do
|
23
|
-
should "pass" do
|
24
|
-
assert true
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
inner_context = x.and_another_thing
|
29
|
-
inner_context.run
|
30
|
-
assert inner_context.passed?
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_should_allow_running_of_specific_tests
|
34
|
-
x = context "Given something" do
|
35
|
-
should "fail when run" do
|
36
|
-
flunk
|
37
|
-
end
|
38
|
-
end
|
39
|
-
t = x.should_fail_when_run.new
|
40
|
-
t.run
|
41
|
-
assert !t.passed?
|
42
|
-
end
|
43
|
-
|
44
17
|
def test_should_allow_running_of_specific_subcontexts_using_hashlike_syntax
|
45
18
|
x = context "Given something" do
|
46
19
|
should "not be run" do
|
@@ -76,7 +49,7 @@ class TestAndSubcontextAccessTest < Test::Unit::TestCase
|
|
76
49
|
end
|
77
50
|
end
|
78
51
|
end
|
79
|
-
assert_equal true, x.
|
52
|
+
assert_equal true, x['and another thing'].run
|
80
53
|
end
|
81
54
|
|
82
55
|
def test_should_return_true_if_running_a_test_passes
|
@@ -85,7 +58,7 @@ class TestAndSubcontextAccessTest < Test::Unit::TestCase
|
|
85
58
|
assert true
|
86
59
|
end
|
87
60
|
end
|
88
|
-
assert_equal true, x.
|
61
|
+
assert_equal true, x['should pass when run'].run
|
89
62
|
end
|
90
63
|
|
91
64
|
def test_should_return_false_if_running_a_subcontext_fails
|
@@ -96,7 +69,7 @@ class TestAndSubcontextAccessTest < Test::Unit::TestCase
|
|
96
69
|
end
|
97
70
|
end
|
98
71
|
end
|
99
|
-
assert_equal false, x.
|
72
|
+
assert_equal false, x['and another thing'].run
|
100
73
|
end
|
101
74
|
|
102
75
|
def test_should_return_false_if_running_a_test_fails
|
@@ -105,6 +78,6 @@ class TestAndSubcontextAccessTest < Test::Unit::TestCase
|
|
105
78
|
flunk
|
106
79
|
end
|
107
80
|
end
|
108
|
-
assert_equal false, x.
|
81
|
+
assert_equal false, x['should fail when run'].run
|
109
82
|
end
|
110
|
-
end
|
83
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BasicUsageTest < KintamaIntegrationTest
|
4
|
+
|
5
|
+
def test_should_pass_when_all_tests_pass
|
6
|
+
context "Given a test that passes" do
|
7
|
+
should "pass this test" do
|
8
|
+
assert true
|
9
|
+
end
|
10
|
+
|
11
|
+
should "pass this test too" do
|
12
|
+
assert true
|
13
|
+
end
|
14
|
+
end.
|
15
|
+
should_output(%{
|
16
|
+
Given a test that passes
|
17
|
+
should pass this test: .
|
18
|
+
should pass this test too: .
|
19
|
+
}).
|
20
|
+
and_pass
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_fail_when_all_tests_fail
|
24
|
+
context "Given a test that fails" do
|
25
|
+
should "fail the test" do
|
26
|
+
flunk
|
27
|
+
end
|
28
|
+
end.
|
29
|
+
should_output(%{
|
30
|
+
Given a test that fails
|
31
|
+
should fail the test: F
|
32
|
+
}).
|
33
|
+
and_fail
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_fail_when_any_tests_fail
|
37
|
+
context "Given two tests" do
|
38
|
+
should "pass the passing test" do
|
39
|
+
assert true
|
40
|
+
end
|
41
|
+
|
42
|
+
should "ultimately fail because there is one failing test" do
|
43
|
+
flunk
|
44
|
+
end
|
45
|
+
end.
|
46
|
+
should_run_tests(2).
|
47
|
+
and_fail.
|
48
|
+
with_failure("should ultimately fail because there is one failing test")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_should_fail_when_any_assertion_within_a_test_fails
|
52
|
+
context "Given a test with two assertions" do
|
53
|
+
should "fail because one of the assertions doesn't pass" do
|
54
|
+
assert 1 == 2
|
55
|
+
assert true
|
56
|
+
end
|
57
|
+
end.
|
58
|
+
should_run_tests(1).
|
59
|
+
and_fail
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_not_run_any_code_beyond_a_failing_assertion
|
63
|
+
context "Given a test with a failure before the end of the test" do
|
64
|
+
should "not execute any test after the test failures" do
|
65
|
+
flunk "fail here"
|
66
|
+
raise "should not get here!"
|
67
|
+
end
|
68
|
+
end.
|
69
|
+
should_fail.with_failure("fail here")
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_should_allow_nesting_of_contexts
|
73
|
+
context "Given a context" do
|
74
|
+
context "and a subcontext" do
|
75
|
+
should "nest this test within the inner context" do
|
76
|
+
assert true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end.
|
80
|
+
should_output(%{
|
81
|
+
Given a context
|
82
|
+
and a subcontext
|
83
|
+
should nest this test within the inner context: .
|
84
|
+
}).
|
85
|
+
and_pass
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_should_allow_multiple_subcontexts
|
89
|
+
context "Given some contexts" do
|
90
|
+
context "one containing failing tests" do
|
91
|
+
should "ultimately fail because of the failing test" do
|
92
|
+
flunk
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "one containing passing tests" do
|
97
|
+
should "still run the passing test" do
|
98
|
+
assert true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end.
|
102
|
+
should_run_tests(2).
|
103
|
+
and_output(%{
|
104
|
+
Given some contexts
|
105
|
+
one containing failing tests
|
106
|
+
should ultimately fail because of the failing test: F
|
107
|
+
one containing passing tests
|
108
|
+
should still run the passing test: .
|
109
|
+
}).
|
110
|
+
and_fail
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_should_allow_deep_nesting_of_subcontexts
|
114
|
+
context "Given something" do
|
115
|
+
context "and another thing" do
|
116
|
+
context "and one more thing" do
|
117
|
+
should "work" do
|
118
|
+
assert true
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end.
|
123
|
+
should_output(%{
|
124
|
+
Given something
|
125
|
+
and another thing
|
126
|
+
and one more thing
|
127
|
+
should work: .
|
128
|
+
}).
|
129
|
+
and_pass
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SetupTest < KintamaIntegrationTest
|
4
|
+
|
5
|
+
def test_should_allow_setup_to_provide_instance_variables
|
6
|
+
context "When setup sets an instance variable" do
|
7
|
+
setup do
|
8
|
+
@name = "james"
|
9
|
+
end
|
10
|
+
|
11
|
+
should "provide access to that instance variable in the test" do
|
12
|
+
assert_equal "james", @name
|
13
|
+
end
|
14
|
+
end.
|
15
|
+
should_run_tests(1).
|
16
|
+
and_pass
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_call_all_setup_methods_when_running_tests_in_a_nested_context
|
20
|
+
context "Given a setup block in the outer context" do
|
21
|
+
setup do
|
22
|
+
@name = "james"
|
23
|
+
end
|
24
|
+
|
25
|
+
context "and another setup block in the inner context" do
|
26
|
+
setup do
|
27
|
+
@name += " is amazing"
|
28
|
+
end
|
29
|
+
|
30
|
+
should "run both setup blocks before the test" do
|
31
|
+
assert_equal "james is amazing", @name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end.
|
35
|
+
should_run_tests(1).
|
36
|
+
and_pass
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_should_only_run_necessary_setups_where_tests_at_different_nestings_exist
|
40
|
+
context "Given a setup in the outer context" do
|
41
|
+
setup do
|
42
|
+
@name = "james"
|
43
|
+
end
|
44
|
+
|
45
|
+
context "and another setup in the inner context" do
|
46
|
+
setup do
|
47
|
+
@name += " is amazing"
|
48
|
+
end
|
49
|
+
|
50
|
+
should "run both setups for tests in the inner context" do
|
51
|
+
assert_equal "james is amazing", @name
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
should "only run the outer setup for tests in the outer context" do
|
56
|
+
assert_equal "james", @name
|
57
|
+
end
|
58
|
+
end.
|
59
|
+
should_run_tests(2).
|
60
|
+
and_pass
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_run_setup_defined_on_kintama_itself_before_other_setups
|
64
|
+
Kintama.setup do
|
65
|
+
@thing = 'abc'
|
66
|
+
end
|
67
|
+
|
68
|
+
context "Given a context with a setup block" do
|
69
|
+
setup do
|
70
|
+
@thing += ' easy as 123'
|
71
|
+
end
|
72
|
+
|
73
|
+
should "have run the setup defined in the default behaviour before the context setup" do
|
74
|
+
assert_equal 'abc easy as 123', @thing
|
75
|
+
end
|
76
|
+
end.
|
77
|
+
should_run_tests(1).
|
78
|
+
and_pass
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_should_allow_multiple_setups_to_be_registered
|
82
|
+
context "Given a context with multiple setup blocks" do
|
83
|
+
setup do
|
84
|
+
@name ||= "James"
|
85
|
+
end
|
86
|
+
|
87
|
+
setup do
|
88
|
+
@name += " Bond"
|
89
|
+
end
|
90
|
+
|
91
|
+
should "run them all in order" do
|
92
|
+
assert_equal "James Bond", @name
|
93
|
+
end
|
94
|
+
end.
|
95
|
+
should_run_tests(1).
|
96
|
+
and_pass
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TeardownTest < KintamaIntegrationTest
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
@order = sequence('teardown order')
|
8
|
+
end
|
9
|
+
attr_reader :order
|
10
|
+
|
11
|
+
def test_should_run_teardown_after_the_test_finishes
|
12
|
+
spy = teardown_spy
|
13
|
+
spy.expects(:in_test).once.in_sequence(order)
|
14
|
+
spy.expects(:tore_down).once.in_sequence(order)
|
15
|
+
|
16
|
+
context "Given a context with a teardown block" do
|
17
|
+
teardown do
|
18
|
+
spy.tore_down
|
19
|
+
end
|
20
|
+
|
21
|
+
should "run teardown after the test runs" do
|
22
|
+
spy.in_test
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_run_all_teardowns_in_proximity_of_nesting_order_after_a_nested_test_finishes
|
28
|
+
spy = teardown_spy
|
29
|
+
spy.expects(:tore_down).with(:inner).in_sequence(order)
|
30
|
+
spy.expects(:tore_down).with(:outer).in_sequence(order)
|
31
|
+
|
32
|
+
context "Given a context with a teardown block" do
|
33
|
+
teardown do
|
34
|
+
spy.tore_down(:outer)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "with a subcontext with another teardown block" do
|
38
|
+
teardown do
|
39
|
+
spy.tore_down(:inner)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "run the inner and then outer teardowns after this test" do
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_run_teardown_defined_on_kintama_itself_after_other_teardowns
|
49
|
+
spy = teardown_spy
|
50
|
+
spy.expects(:tore_down).with(:context_teardown).in_sequence(order)
|
51
|
+
spy.expects(:tore_down).with(:kintama_global_teardown).in_sequence(order)
|
52
|
+
|
53
|
+
Kintama.teardown do
|
54
|
+
spy.tore_down(:kintama_global_teardown)
|
55
|
+
end
|
56
|
+
|
57
|
+
context "Given a context with a teardown block" do
|
58
|
+
should "run the context teardown, and then the kintama global teardown" do
|
59
|
+
end
|
60
|
+
|
61
|
+
teardown do
|
62
|
+
spy.tore_down(:context_teardown)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_should_allow_multiple_teardowns_to_be_registered
|
68
|
+
spy = teardown_spy
|
69
|
+
spy.expects(:tore_down).with(:first_teardown).in_sequence(order)
|
70
|
+
spy.expects(:tore_down).with(:second_teardown).in_sequence(order)
|
71
|
+
|
72
|
+
context "Given a context with multiple teardown blocks" do
|
73
|
+
should "run them all in the order they appear" do
|
74
|
+
assert true
|
75
|
+
end
|
76
|
+
|
77
|
+
teardown do
|
78
|
+
spy.tore_down(:first_teardown)
|
79
|
+
end
|
80
|
+
|
81
|
+
teardown do
|
82
|
+
spy.tore_down(:second_teardown)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_should_run_teardowns_even_after_exceptions_in_tests
|
88
|
+
spy = teardown_spy
|
89
|
+
spy.expects(:tore_down)
|
90
|
+
|
91
|
+
context "Given a test that fails" do
|
92
|
+
should "still run teardown" do
|
93
|
+
raise "BOOM"
|
94
|
+
end
|
95
|
+
|
96
|
+
teardown do
|
97
|
+
spy.tore_down
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_should_not_mask_exceptions_in_tests_with_ones_in_teardown
|
103
|
+
context "Given a test and teardown that fails" do
|
104
|
+
should "report the error in the test" do
|
105
|
+
raise "exception from test"
|
106
|
+
end
|
107
|
+
|
108
|
+
teardown do
|
109
|
+
raise "exception from teardown"
|
110
|
+
end
|
111
|
+
end.
|
112
|
+
should_fail.
|
113
|
+
with_failure("exception from test")
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
def teardown_spy
|
119
|
+
stub('teardown spy', tore_down: nil)
|
120
|
+
end
|
121
|
+
end
|