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
data/lib/kintama/runnable.rb
CHANGED
@@ -22,7 +22,7 @@ module Kintama
|
|
22
22
|
|
23
23
|
# Returns the full name of this context, taking any parent contexts into account
|
24
24
|
def full_name
|
25
|
-
if @name
|
25
|
+
if instance_variable_defined?(:@name) && @name
|
26
26
|
[parent ? parent.full_name : nil, @name].compact.join(" ")
|
27
27
|
else
|
28
28
|
nil
|
@@ -34,4 +34,4 @@ module Kintama
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
end
|
37
|
+
end
|
data/lib/kintama/runner.rb
CHANGED
@@ -58,15 +58,15 @@ module Kintama
|
|
58
58
|
runnable = @runnables.map { |r| r.runnable_on_line(@line) }.compact.first
|
59
59
|
if runnable
|
60
60
|
if runnable.is_a_test?
|
61
|
-
|
61
|
+
hierarchy = []
|
62
62
|
parent = runnable.parent.parent
|
63
63
|
until parent == Kintama.default_context do
|
64
|
-
|
64
|
+
hierarchy.unshift parent
|
65
65
|
parent = parent.parent
|
66
66
|
end
|
67
|
-
|
67
|
+
hierarchy.each { |context| reporter.context_started(context) }
|
68
68
|
runnable.parent.run_tests([runnable], false, reporter)
|
69
|
-
|
69
|
+
hierarchy.reverse.each { |context| reporter.context_finished(context) }
|
70
70
|
[runnable.parent]
|
71
71
|
else
|
72
72
|
runnable.run(reporter)
|
@@ -74,7 +74,7 @@ module Kintama
|
|
74
74
|
end
|
75
75
|
else
|
76
76
|
puts "Nothing runnable found on line #{@line}"
|
77
|
-
exit
|
77
|
+
exit(-1)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
data/lib/kintama/test.rb
CHANGED
@@ -9,7 +9,7 @@ module Kintama
|
|
9
9
|
attr_accessor :block
|
10
10
|
|
11
11
|
def pending?
|
12
|
-
@block.nil?
|
12
|
+
!instance_variable_defined?(:@block) || @block.nil?
|
13
13
|
end
|
14
14
|
|
15
15
|
def run
|
@@ -65,4 +65,4 @@ module Kintama
|
|
65
65
|
@failure.backtrace.select { |line| File.expand_path(line).index(base_dir).nil? }.map { |l| " "*4 + File.expand_path(l) }.join("\n")
|
66
66
|
end
|
67
67
|
end
|
68
|
-
end
|
68
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class AutomaticRunningTest < KintamaIntegrationTest
|
4
|
+
|
5
|
+
def test_should_be_able_to_run_kintama_tests_automatically_when_file_is_loaded
|
6
|
+
test_with_content(%{
|
7
|
+
context "given a thing" do
|
8
|
+
should "work" do
|
9
|
+
assert true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
}).run.should_have_passing_exit_status
|
13
|
+
|
14
|
+
test_with_content(%{
|
15
|
+
context "given a thing" do
|
16
|
+
should "not work" do
|
17
|
+
flunk
|
18
|
+
end
|
19
|
+
end
|
20
|
+
}).run.should_have_failing_exit_status
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class LineBasedRunningTest < KintamaIntegrationTest
|
4
|
+
def test_should_be_able_to_run_the_test_by_giving_the_line_number_the_test_is_defined_on
|
5
|
+
test = test_with_content(%{
|
6
|
+
context "given a thing" do
|
7
|
+
should "run this test" do
|
8
|
+
assert true
|
9
|
+
end
|
10
|
+
should "not run this test" do
|
11
|
+
flunk
|
12
|
+
end
|
13
|
+
end
|
14
|
+
})
|
15
|
+
test.run('--line 3') do
|
16
|
+
assert_output(/^#{passing("should run this test")}\n\n1 tests/)
|
17
|
+
assert_output(/^1 tests, 0 failures/)
|
18
|
+
end
|
19
|
+
test.run('--line 6') do
|
20
|
+
assert_output(/^#{failing("should not run this test")}\n\n1 tests/)
|
21
|
+
assert_output(/^1 tests, 1 failures/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_be_able_to_run_the_test_by_giving_the_line_number_within_the_test_definition
|
26
|
+
test = test_with_content(%{
|
27
|
+
context "given a thing" do
|
28
|
+
should "run this test" do
|
29
|
+
assert true
|
30
|
+
end
|
31
|
+
should "not run this test" do
|
32
|
+
flunk
|
33
|
+
end
|
34
|
+
end
|
35
|
+
})
|
36
|
+
test.run('--line 4') do
|
37
|
+
assert_output(/^#{passing("should run this test")}\n\n1 tests/)
|
38
|
+
end
|
39
|
+
test.run('--line 7') do
|
40
|
+
assert_output(/^#{failing("should not run this test")}\n\n1 tests/)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_be_able_to_run_all_tests_within_a_context_when_line_falls_on_a_context
|
45
|
+
test_with_content(%{
|
46
|
+
context "given a thing" do
|
47
|
+
should "not run this test" do
|
48
|
+
flunk
|
49
|
+
end
|
50
|
+
context "and another thing" do
|
51
|
+
should "run this test" do
|
52
|
+
end
|
53
|
+
should "run this test too" do
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
}).run('--line 6') do
|
58
|
+
assert_output(/#{passing("should run this test")}\n#{passing("should run this test too")}\n\n2 tests/)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_be_able_to_run_a_test_defined_in_a_second_top_level_context
|
63
|
+
test_with_content(%{
|
64
|
+
context "given a thing" do
|
65
|
+
should "not run this test" do
|
66
|
+
flunk
|
67
|
+
end
|
68
|
+
end
|
69
|
+
context "and another thing" do
|
70
|
+
should "run this test" do
|
71
|
+
end
|
72
|
+
end
|
73
|
+
}).run('--line 8') do
|
74
|
+
assert_output(/#{passing("should run this test")}\n\n1 tests/)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_print_out_the_full_nested_test_name
|
79
|
+
test_with_content(%{
|
80
|
+
context "given a test" do
|
81
|
+
context "that is nested deeply" do
|
82
|
+
should "print the full nesting name" do
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
}).run('--line 5') do
|
87
|
+
assert_output(/given a test\n that is nested deeply\n/)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_not_show_pending_tests_in_the_same_context_as_pending_when_not_targeted
|
92
|
+
test_with_content(%{
|
93
|
+
context "given a context with a pending test" do
|
94
|
+
should "only show the run test" do
|
95
|
+
end
|
96
|
+
should "ignore the pending test"
|
97
|
+
end
|
98
|
+
}).run('--line 3') do
|
99
|
+
refute_output(/1 pending/)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_should_be_able_to_target_a_top_level_context
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_should_run_all_tests_when_context_is_on_target_line
|
107
|
+
test_with_content(%{
|
108
|
+
context "given a context with a pending test" do
|
109
|
+
should "run this" do
|
110
|
+
end
|
111
|
+
should "run this too" do
|
112
|
+
end
|
113
|
+
end
|
114
|
+
}).run('--line 2') do
|
115
|
+
assert_output(/2 tests/)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_should_report_if_nothing_runnable_can_be_found_for_that_line
|
120
|
+
test_with_content(%{
|
121
|
+
context "given a short context" do
|
122
|
+
should "not run this" do
|
123
|
+
end
|
124
|
+
end
|
125
|
+
}).run('--line 1') do
|
126
|
+
assert_output(/Nothing runnable found on line 1/)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class BaseReporterTest <
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@reporter = Kintama::Reporter::Base.new
|
7
|
-
end
|
3
|
+
class BaseReporterTest < KintamaIntegrationTest
|
4
|
+
report_with Kintama::Reporter::Base
|
8
5
|
|
9
6
|
def test_assert_output_works
|
10
7
|
assert_output("yes\n") do
|
@@ -13,145 +10,78 @@ class BaseReporterTest < Test::Unit::TestCase
|
|
13
10
|
end
|
14
11
|
|
15
12
|
def test_should_print_summary_when_a_test_passes
|
16
|
-
|
13
|
+
context "given something" do
|
17
14
|
should "pass" do
|
18
15
|
assert true
|
19
16
|
end
|
20
|
-
end
|
21
|
-
|
22
|
-
capture_stdout { r.run(@reporter) }
|
23
|
-
assert_match /^1 tests, 0 failures/, @reporter.test_summary
|
17
|
+
end.
|
18
|
+
should_output("1 tests, 0 failures")
|
24
19
|
end
|
25
20
|
|
26
21
|
def test_should_print_out_summary_when_multiple_tests_pass
|
27
|
-
|
22
|
+
context "given something" do
|
28
23
|
should "pass" do
|
29
24
|
assert true
|
30
25
|
end
|
31
26
|
should "also pass" do
|
32
27
|
assert true
|
33
28
|
end
|
34
|
-
end
|
35
|
-
|
36
|
-
capture_stdout { r.run(@reporter) }
|
37
|
-
assert_match /^2 tests, 0 failures/, @reporter.test_summary
|
29
|
+
end.
|
30
|
+
should_output("2 tests, 0 failures")
|
38
31
|
end
|
39
32
|
|
40
33
|
def test_should_print_out_summary_when_a_pending_test_exists
|
41
|
-
|
34
|
+
context "given something" do
|
42
35
|
should "pass" do
|
43
36
|
assert true
|
44
37
|
end
|
45
38
|
should "not be implemented yet"
|
46
|
-
end
|
47
|
-
|
48
|
-
capture_stdout { r.run(@reporter) }
|
49
|
-
assert_match /^2 tests, 0 failures, 1 pending/, @reporter.test_summary
|
39
|
+
end.
|
40
|
+
should_output("2 tests, 0 failures, 1 pending")
|
50
41
|
end
|
51
42
|
|
52
43
|
def test_should_print_out_failure_details_if_tests_fail
|
53
|
-
|
44
|
+
context "given something" do
|
54
45
|
should "fail" do
|
55
46
|
flunk
|
56
47
|
end
|
57
48
|
should "pass" do
|
58
49
|
assert true
|
59
50
|
end
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
|
51
|
+
end.
|
52
|
+
should_output(%{
|
53
|
+
1) given something should fail:
|
54
|
+
flunked
|
55
|
+
})
|
64
56
|
end
|
65
57
|
|
66
58
|
def test_should_print_out_the_test_duration
|
67
|
-
|
68
|
-
should "pass" do
|
69
|
-
assert true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
r = runner(c)
|
73
|
-
capture_stdout { r.run(@reporter) }
|
74
|
-
assert_match /^1 tests, 0 failures \(0\.\d+ seconds\)/, @reporter.test_summary
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_should_be_able_to_run_tests_from_several_contexts
|
78
|
-
c1 = context "given something" do
|
59
|
+
context "given something" do
|
79
60
|
should "pass" do
|
80
61
|
assert true
|
81
62
|
end
|
82
|
-
end
|
83
|
-
|
84
|
-
should "also pass" do
|
85
|
-
assert true
|
86
|
-
end
|
87
|
-
end
|
88
|
-
r = runner(c1, c2)
|
89
|
-
capture_stdout { r.run(@reporter) }
|
90
|
-
assert_match /^2 tests, 0 failures/, @reporter.test_summary
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_should_return_true_if_all_tests_pass
|
94
|
-
c = context "given something" do
|
95
|
-
should("pass") { assert true }
|
96
|
-
should("also pass") { assert true }
|
97
|
-
end
|
98
|
-
capture_stdout do
|
99
|
-
assert_equal true, runner(c).run(@reporter)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_should_return_false_if_any_tests_fails
|
104
|
-
c = context "given something" do
|
105
|
-
should("pass") { assert true }
|
106
|
-
should("fail") { flunk }
|
107
|
-
end
|
108
|
-
capture_stdout do
|
109
|
-
assert_equal false, runner(c).run(@reporter)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_should_only_run_each_context_once
|
114
|
-
Kintama.reset
|
115
|
-
$already_run = false
|
116
|
-
c = context "Given something" do
|
117
|
-
context "and a thing" do
|
118
|
-
should "only run this once" do
|
119
|
-
flunk if $already_run
|
120
|
-
$already_run = true
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
capture_stdout do
|
125
|
-
assert runner(c).run(@reporter), "should not have run the context twice"
|
126
|
-
end
|
63
|
+
end.
|
64
|
+
should_output(/^1 tests, 0 failures \(0\.\d+ seconds\)/)
|
127
65
|
end
|
128
66
|
|
129
67
|
def test_should_print_out_the_names_of_tests_that_fail
|
130
|
-
|
68
|
+
context "given something" do
|
131
69
|
should "fail" do
|
132
70
|
flunk
|
133
71
|
end
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
|
72
|
+
end.
|
73
|
+
should_output(%{
|
74
|
+
1) given something should fail:
|
75
|
+
flunked
|
76
|
+
})
|
138
77
|
end
|
139
78
|
|
140
79
|
def test_should_include_line_in_test_of_error_in_failure_message
|
141
|
-
|
142
|
-
should "
|
80
|
+
context "given a test that fails" do
|
81
|
+
should "report line of failing test" do
|
143
82
|
$line = __LINE__; flunk
|
144
83
|
end
|
145
|
-
end
|
146
|
-
|
147
|
-
capture_stdout { r.run(@reporter) }
|
148
|
-
assert_match /#{Regexp.escape(File.expand_path(__FILE__))}:#{$line}/, @reporter.failure_messages.first
|
84
|
+
end.
|
85
|
+
should_output(/#{Regexp.escape(File.expand_path(__FILE__))}:#{$line}/)
|
149
86
|
end
|
150
|
-
|
151
|
-
private
|
152
|
-
|
153
|
-
def runner(*args)
|
154
|
-
Kintama::Runner::Default.new.with(*args)
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
87
|
+
end
|
@@ -1,68 +1,56 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class InlineReporterTest <
|
4
|
-
|
5
|
-
@reporter = Kintama::Reporter::Inline.new
|
6
|
-
end
|
3
|
+
class InlineReporterTest < KintamaIntegrationTest
|
4
|
+
report_with Kintama::Reporter::Inline
|
7
5
|
|
8
6
|
def test_should_print_out_dots_when_a_test_passes
|
9
|
-
|
7
|
+
context "given something" do
|
10
8
|
should "pass" do
|
11
9
|
assert true
|
12
10
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
11
|
+
end.
|
12
|
+
should_output(%{
|
13
|
+
.
|
14
|
+
})
|
18
15
|
end
|
19
16
|
|
20
17
|
def test_should_print_out_many_dots_as_tests_run
|
21
|
-
|
18
|
+
context "given something" do
|
22
19
|
should "pass" do
|
23
20
|
assert true
|
24
21
|
end
|
25
22
|
should "also pass" do
|
26
23
|
assert true
|
27
24
|
end
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
25
|
+
end.
|
26
|
+
should_output(%{
|
27
|
+
..
|
28
|
+
})
|
33
29
|
end
|
34
30
|
|
35
31
|
def test_should_print_out_Fs_as_tests_fail
|
36
|
-
|
32
|
+
context "given something" do
|
37
33
|
should "fail" do
|
38
34
|
flunk
|
39
35
|
end
|
40
36
|
should "pass" do
|
41
37
|
assert true
|
42
38
|
end
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
39
|
+
end.
|
40
|
+
should_output(%{
|
41
|
+
F.
|
42
|
+
})
|
48
43
|
end
|
49
44
|
|
50
45
|
def test_should_print_out_Ps_for_pending_tests
|
51
|
-
|
46
|
+
context "given something" do
|
52
47
|
should "not be implemented yet"
|
53
48
|
should "pass" do
|
54
49
|
assert true
|
55
50
|
end
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def runner(*args)
|
66
|
-
Kintama::Runner::Default.new.with(*args)
|
51
|
+
end.
|
52
|
+
should_output(%{
|
53
|
+
P.
|
54
|
+
})
|
67
55
|
end
|
68
|
-
end
|
56
|
+
end
|