kintama 0.1.9 → 0.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.
- 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
|