kintama 0.1.6 → 0.1.7
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/lib/kintama/assertions.rb +28 -6
- data/lib/kintama/context.rb +39 -5
- data/lib/kintama/runnable.rb +1 -1
- data/lib/kintama/test.rb +1 -1
- data/test/assertions_test.rb +53 -13
- data/test/line_based_running_test.rb +2 -17
- data/test/{pending_test.rb → pending_test_and_context.rb} +7 -0
- data/test/teardown_test.rb +14 -0
- metadata +5 -5
data/lib/kintama/assertions.rb
CHANGED
@@ -12,7 +12,7 @@ module Kintama
|
|
12
12
|
assert actual == expected, message
|
13
13
|
end
|
14
14
|
|
15
|
-
def assert_not_equal(expected, actual, message)
|
15
|
+
def assert_not_equal(expected, actual, message="Expected #{expected.inspect} to not be equal to #{actual.inspect}")
|
16
16
|
assert actual != expected, message
|
17
17
|
end
|
18
18
|
|
@@ -24,15 +24,37 @@ module Kintama
|
|
24
24
|
assert_not_equal nil, object, message
|
25
25
|
end
|
26
26
|
|
27
|
+
def assert_match(regexp, string, message="expected #{string.inspect} to match #{regexp.inspect}")
|
28
|
+
assert (string =~ regexp), message
|
29
|
+
end
|
30
|
+
|
27
31
|
def assert_kind_of(klass, thing, message="should be a kind of #{klass}")
|
28
|
-
assert thing.is_a?(klass)
|
32
|
+
assert thing.is_a?(klass), message
|
33
|
+
end
|
34
|
+
|
35
|
+
def assert_nothing_raised(message="should not raise anything", &block)
|
36
|
+
yield
|
37
|
+
rescue Exception => e
|
38
|
+
raise Kintama::TestFailure, message + " (#{e} was raised)"
|
29
39
|
end
|
30
40
|
|
31
|
-
def assert_raises(message="should raise an exception", &block)
|
41
|
+
def assert_raises(klass_or_message=Exception, message="should raise an exception", &block)
|
42
|
+
if klass_or_message.respond_to?(:ancestors)
|
43
|
+
klass = klass_or_message
|
44
|
+
else
|
45
|
+
message = klass_or_message
|
46
|
+
klass = Exception
|
47
|
+
end
|
32
48
|
yield
|
33
|
-
|
34
|
-
rescue
|
35
|
-
|
49
|
+
raised = false
|
50
|
+
rescue => e
|
51
|
+
if e.class.ancestors.include?(klass)
|
52
|
+
raised = true
|
53
|
+
else
|
54
|
+
raised = false
|
55
|
+
end
|
56
|
+
ensure
|
57
|
+
raise Kintama::TestFailure, message unless raised
|
36
58
|
end
|
37
59
|
end
|
38
60
|
end
|
data/lib/kintama/context.rb
CHANGED
@@ -12,14 +12,47 @@ module Kintama
|
|
12
12
|
|
13
13
|
module ClassMethods
|
14
14
|
|
15
|
+
def find_definition_1_8
|
16
|
+
line = caller.find { |line| line =~ /^[^:]+:(\d+)$/ }
|
17
|
+
if line
|
18
|
+
parts = line.split(":")
|
19
|
+
parts[1] = parts[1].to_i
|
20
|
+
parts
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_definition_1_9(&block)
|
25
|
+
block.source_location if block
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_definition_rbx(&block)
|
29
|
+
if block
|
30
|
+
m = block.block.code
|
31
|
+
[m.file, m.first_line]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_definition(&block)
|
36
|
+
if defined? RUBY_ENGINE
|
37
|
+
case RUBY_ENGINE
|
38
|
+
when "ruby"
|
39
|
+
RUBY_VERSION == "1.9.2" ? find_definition_1_9(&block) : find_definition_1_8
|
40
|
+
when "rbx"
|
41
|
+
find_definition_rbx(&block)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
find_definition_1_8
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
15
48
|
# Create a new context. If this is called within a context, a new subcontext
|
16
49
|
# will be created. Aliases are 'testcase' and 'describe'
|
17
50
|
def context(name=nil, parent=self, &block)
|
18
51
|
c = Class.new(parent)
|
19
52
|
c.send(:include, Kintama::Context)
|
20
53
|
c.name = name.to_s if name
|
21
|
-
c.definition =
|
22
|
-
c.class_eval(&block)
|
54
|
+
c.definition = find_definition(&block)
|
55
|
+
c.class_eval(&block) if block
|
23
56
|
c
|
24
57
|
end
|
25
58
|
alias_method :testcase, :context
|
@@ -94,7 +127,7 @@ module Kintama
|
|
94
127
|
c = Class.new(self)
|
95
128
|
c.send(:include, Kintama::Test)
|
96
129
|
c.name = name
|
97
|
-
c.definition =
|
130
|
+
c.definition = find_definition(&block)
|
98
131
|
c.block = block if block_given?
|
99
132
|
end
|
100
133
|
|
@@ -207,8 +240,9 @@ module Kintama
|
|
207
240
|
end
|
208
241
|
|
209
242
|
def runnable_on_line(line)
|
210
|
-
|
211
|
-
|
243
|
+
known_runnables = all_runnables.delete_if { |r| r.line_defined.nil? }
|
244
|
+
sorted_runnables = known_runnables.sort_by { |r| r.line_defined }
|
245
|
+
if sorted_runnables.first && line >= sorted_runnables.first.line_defined
|
212
246
|
next_runnable = sorted_runnables.find { |r| r.line_defined > line }
|
213
247
|
index = sorted_runnables.index(next_runnable)
|
214
248
|
if index != nil && index > 0
|
data/lib/kintama/runnable.rb
CHANGED
data/lib/kintama/test.rb
CHANGED
data/test/assertions_test.rb
CHANGED
@@ -10,33 +10,73 @@ class AssertionsTest < Test::Unit::TestCase
|
|
10
10
|
@test = PseudoTest.new
|
11
11
|
end
|
12
12
|
|
13
|
+
def test_should_provide_assert
|
14
|
+
assert_passed { @test.assert true }
|
15
|
+
assert_failed("waaa") { @test.assert false, "waaa" }
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_provide_flunk
|
19
|
+
assert_failed(":(") { @test.flunk ":(" }
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_provide_assert_equal
|
23
|
+
assert_passed { @test.assert_equal 1, 1 }
|
24
|
+
assert_failed("blurgh") { @test.assert_equal 1, 2, "blurgh" }
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_provide_assert_not_equal
|
28
|
+
assert_passed { @test.assert_not_equal 1, 2 }
|
29
|
+
assert_failed("sadface") { @test.assert_not_equal 1, 1, "sadface" }
|
30
|
+
end
|
31
|
+
|
13
32
|
def test_should_provide_assert_nil
|
14
|
-
|
15
|
-
|
33
|
+
assert_failed("bums") { @test.assert_nil Object.new, "bums" }
|
34
|
+
assert_passed { @test.assert_nil nil }
|
16
35
|
end
|
17
36
|
|
18
37
|
def test_should_provide_assert_not_nil
|
19
|
-
|
20
|
-
|
38
|
+
assert_passed { @test.assert_not_nil Object.new }
|
39
|
+
assert_failed("fiddlesticks!") { @test.assert_not_nil nil, "fiddlesticks!" }
|
21
40
|
end
|
22
41
|
|
23
42
|
def test_should_provide_assert_kind_of
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
43
|
+
assert_passed { @test.assert_kind_of Fixnum, 1 }
|
44
|
+
assert_passed { @test.assert_kind_of Object, 1 }
|
45
|
+
assert_passed { @test.assert_kind_of String, "hello" }
|
46
|
+
assert_failed("pa!") { @test.assert_kind_of String, 1, "pa!" }
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_provide_assert_nothing_raised
|
50
|
+
assert_passed { @test.assert_nothing_raised { true } }
|
51
|
+
assert_passed { @test.assert_nothing_raised { false } }
|
52
|
+
assert_failed("ouch (oh no was raised)") { @test.assert_nothing_raised("ouch") { raise "oh no" } }
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_should_provide_assert_raises
|
56
|
+
assert_passed { @test.assert_raises { raise "urgh" } }
|
57
|
+
assert_passed { @test.assert_raises(StandardError) { raise StandardError, "urgh" } }
|
58
|
+
assert_failed("no way") { @test.assert_raises("no way") { false } }
|
59
|
+
assert_failed { @test.assert_raises(RuntimeError) { raise StandardError, "urgh" } }
|
60
|
+
assert_passed { @test.assert_raises("woah") { this_method_doesnt_exist } }
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_provide_assert_match
|
64
|
+
assert_passed { @test.assert_match /jam/, "bluejam" }
|
65
|
+
assert_failed(%|expected "blah" to match /mm/|) { @test.assert_match /mm/, "blah" }
|
28
66
|
end
|
29
67
|
|
30
68
|
private
|
31
69
|
|
32
|
-
def
|
70
|
+
def assert_passed
|
33
71
|
yield
|
34
72
|
end
|
35
73
|
|
36
|
-
def
|
74
|
+
def assert_failed(message=nil)
|
37
75
|
yield
|
38
|
-
raise "assertion did not fail!"
|
39
|
-
rescue Kintama::TestFailure
|
40
|
-
|
76
|
+
raise "assertion did not fail!" if failed
|
77
|
+
rescue Kintama::TestFailure => e
|
78
|
+
if message
|
79
|
+
assert_equal message, e.message, "assertion failure message didn't match"
|
80
|
+
end
|
41
81
|
end
|
42
82
|
end
|
@@ -84,6 +84,8 @@ class LineBasedRunningTest < Test::Unit::TestCase
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def test_should_be_able_to_target_a_top_level_context
|
87
|
+
end
|
88
|
+
|
87
89
|
def test_should_not_show_pending_tests_in_the_same_context_as_pending_when_not_targeted
|
88
90
|
test_file = %{
|
89
91
|
context "given a context with a pending test" do
|
@@ -94,7 +96,6 @@ class LineBasedRunningTest < Test::Unit::TestCase
|
|
94
96
|
end}
|
95
97
|
assert_match /2 tests/, run_test(test_file, "--line 2")
|
96
98
|
end
|
97
|
-
end
|
98
99
|
|
99
100
|
def test_should_report_if_nothing_runnable_can_be_found_for_that_line
|
100
101
|
test_file = %{
|
@@ -105,22 +106,6 @@ class LineBasedRunningTest < Test::Unit::TestCase
|
|
105
106
|
assert_match /Nothing runnable found on line 1/, run_test(test_file, "--line 1")
|
106
107
|
end
|
107
108
|
|
108
|
-
def test_should_run_startup_blocks_from_outer_parents
|
109
|
-
test_file = %{
|
110
|
-
context "outer" do
|
111
|
-
on_start { $started = '123' }
|
112
|
-
context "inner" do
|
113
|
-
context "deeply inner" do
|
114
|
-
should "have run startup" do
|
115
|
-
assert_equal '123', $started
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end}
|
120
|
-
assert_match /#{passing("should have run startup")}/, run_test(test_file, "--line 9")
|
121
|
-
assert_match /^1 tests, 0 failures/, run_test(test_file, "--line 9")
|
122
|
-
end
|
123
|
-
|
124
109
|
private
|
125
110
|
|
126
111
|
def write_test(string, path)
|
data/test/teardown_test.rb
CHANGED
@@ -89,4 +89,18 @@ class TeardownTest < Test::Unit::TestCase
|
|
89
89
|
assert !c.passed?
|
90
90
|
assert ran
|
91
91
|
end
|
92
|
+
|
93
|
+
def test_should_not_mask_exceptions_in_tests_with_ones_in_teardown
|
94
|
+
c = context "Given a test that fails" do
|
95
|
+
should "report this error" do
|
96
|
+
raise "this"
|
97
|
+
end
|
98
|
+
teardown do
|
99
|
+
raise "that"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
c.run
|
103
|
+
assert !c.passed?
|
104
|
+
assert_equal "this", c.failures.first.failure.to_s
|
105
|
+
end
|
92
106
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kintama
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 7
|
10
|
+
version: 0.1.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Adam
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-06-01 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -37,7 +37,7 @@ files:
|
|
37
37
|
- test/line_based_running_test.rb
|
38
38
|
- test/matcher_test.rb
|
39
39
|
- test/method_behaviour_test.rb
|
40
|
-
- test/
|
40
|
+
- test/pending_test_and_context.rb
|
41
41
|
- test/reporters/base_reporter_test.rb
|
42
42
|
- test/reporters/inline_reporter_test.rb
|
43
43
|
- test/reporters/verbose_reporter_test.rb
|