kintama 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/lib/kintama.rb +19 -5
  3. data/lib/kintama/assertions.rb +4 -0
  4. data/lib/kintama/context.rb +58 -47
  5. data/lib/kintama/mocha.rb +13 -0
  6. data/lib/kintama/no_conflict.rb +2 -0
  7. data/lib/kintama/reporter.rb +3 -3
  8. data/test/{automatic_running_test.rb → integration/automatic_running_test.rb} +5 -5
  9. data/test/{line_based_running_test.rb → integration/line_based_running_test.rb} +13 -13
  10. data/test/reporters/base_reporter_test.rb +31 -101
  11. data/test/reporters/inline_reporter_test.rb +23 -35
  12. data/test/reporters/verbose_reporter_test.rb +77 -76
  13. data/test/test_helper.rb +92 -0
  14. data/test/{assertions_test.rb → unit/assertions_test.rb} +8 -0
  15. data/test/unit/context_test.rb +15 -0
  16. data/test/unit/runner_test.rb +87 -0
  17. data/test/{test_and_subcontext_access_test.rb → unit/test_and_subcontext_access_test.rb} +5 -32
  18. data/test/usage/01_basic_usage_test.rb +131 -0
  19. data/test/usage/02_setup_test.rb +98 -0
  20. data/test/usage/03_teardown_test.rb +120 -0
  21. data/test/usage/04_pending_tests_test.rb +16 -0
  22. data/test/usage/05_aliases_test.rb +73 -0
  23. data/test/usage/06_defining_methods_in_tests_test.rb +202 -0
  24. data/test/usage/07_exceptions_test.rb +42 -0
  25. data/test/usage/08_start_and_finish_test.rb +252 -0
  26. data/test/usage/09_expectations_and_mocking_test.rb +86 -0
  27. data/test/usage/10_let_and_subject_test.rb +125 -0
  28. data/test/usage/11_matcher_test.rb +148 -0
  29. data/test/usage/12_action_test.rb +118 -0
  30. metadata +36 -42
  31. data/test/aliases_test.rb +0 -26
  32. data/test/exceptions_test.rb +0 -40
  33. data/test/kintama_test.rb +0 -114
  34. data/test/matcher_test.rb +0 -80
  35. data/test/method_behaviour_test.rb +0 -176
  36. data/test/pending_test_and_context.rb +0 -20
  37. data/test/setup_test.rb +0 -107
  38. data/test/start_and_finish_test.rb +0 -94
  39. data/test/teardown_test.rb +0 -106
@@ -1,68 +1,56 @@
1
1
  require 'test_helper'
2
2
 
3
- class InlineReporterTest < Test::Unit::TestCase
4
- def setup
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
- c = context "given something" do
7
+ context "given something" do
10
8
  should "pass" do
11
9
  assert true
12
10
  end
13
- end
14
- r = runner(c)
15
- assert_output(/^\.\n/) do
16
- r.run(@reporter)
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
- c = context "given something" do
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
- r = runner(c)
30
- assert_output(/^\.\.\n/) do
31
- r.run(@reporter)
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
- c = context "given something" do
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
- r = runner(c)
45
- assert_output(/^F\./) do
46
- r.run(@reporter)
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
- c = context "given something" do
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
- r = runner(c)
58
- assert_output(/^P\./) do
59
- r.run(@reporter)
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
@@ -1,147 +1,148 @@
1
1
  require 'test_helper'
2
2
 
3
- class VerboseReporterTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @reporter = Kintama::Reporter::Verbose.new(false)
7
- end
3
+ class VerboseReporterTest < KintamaIntegrationTest
4
+ report_with Kintama::Reporter::Verbose
8
5
 
9
6
  def test_should_print_out_test_names
10
- c = context "given something" do
11
- should "also pass" do
7
+ context "given something" do
8
+ should "pass" do
12
9
  assert true
13
10
  end
14
- should "pass" do
11
+ should "pass too" do
15
12
  assert true
16
13
  end
17
- end
18
- assert_output(/^given something\n should also pass: \.\n should pass: \./) do
19
- runner(c).run(@reporter)
20
- end
14
+ end.
15
+ should_output(%{
16
+ given something
17
+ should pass: .
18
+ should pass too: .
19
+ })
21
20
  end
22
21
 
23
22
  def test_should_print_out_Ps_beside_pending_test_names
24
- c = context "given something" do
23
+ context "given something" do
25
24
  should "not be implemented"
26
25
  should "pass" do
27
26
  assert true
28
27
  end
29
- end
30
- assert_output(/^given something\n should not be implemented: P\n should pass: \./) do
31
- runner(c).run(@reporter)
32
- end
28
+ end.
29
+ should_output(%{
30
+ given something
31
+ should not be implemented: P
32
+ should pass: .
33
+ })
33
34
  end
34
35
 
35
36
  def test_should_nest_printed_context_and_test_names
36
- c = context "given something" do
37
+ context "given something" do
37
38
  should "pass" do
38
39
  assert true
39
40
  end
40
- context "and then this" do
41
- should "also pass" do
41
+ context "and something else" do
42
+ should "pass" do
42
43
  assert true
43
44
  end
44
45
  end
45
- context "and something else" do
46
- should "pass" do
46
+ context "and then this" do
47
+ should "also pass" do
47
48
  assert true
48
49
  end
49
50
  end
50
- end
51
- assert_output(/^given something\n should pass: \.\n and something else\n should pass: \.\n and then this\n should also pass: \./) do
52
- runner(c).run(@reporter)
53
- end
51
+ end.
52
+ should_output(%{
53
+ given something
54
+ should pass: .
55
+ and something else
56
+ should pass: .
57
+ and then this
58
+ should also pass: .
59
+ })
54
60
  end
55
61
 
56
62
  def test_should_print_out_a_summary_of_the_failing_tests_if_some_fail
57
- c = context "given something" do
63
+ context "given something" do
58
64
  should "fail" do
59
65
  assert 1 == 2, "1 should equal 2"
60
66
  end
61
- end
62
- assert_output(/given something should fail:\n 1 should equal 2/) { runner(c).run(@reporter) }
67
+ end.
68
+ should_output(%{
69
+ given something should fail:
70
+ 1 should equal 2
71
+ })
63
72
  end
64
73
 
65
74
  def test_should_print_out_a_summary_of_the_failing_tests_if_an_exception_occurs_in_a_test
66
- c = context "given something" do
75
+ context "given something" do
67
76
  should "fail" do
68
77
  raise "unexpected issue!"
69
78
  end
70
- end
71
- assert_output(/given something should fail:\n unexpected issue!/) { runner(c).run(@reporter) }
79
+ end.
80
+ should_output(%{
81
+ given something should fail:
82
+ unexpected issue!
83
+ })
72
84
  end
73
85
 
74
86
  def test_should_print_out_a_summary_of_the_failing_tests_if_a_nested_test_fails
75
- c = context "given something" do
87
+ context "given something" do
76
88
  context "and something else" do
77
89
  should "fail" do
78
90
  assert 1 == 2, "1 should equal 2"
79
91
  end
80
92
  end
81
- end
82
- assert_output(/given something and something else should fail:\n 1 should equal 2/) { runner(c).run(@reporter) }
83
- end
84
-
85
- def test_should_nest_verbose_output_properly_when_running_tests_from_several_contexts
86
- c1 = context "given something" do
87
- should "pass" do
88
- assert true
89
- end
90
- end
91
- c2 = context "given another thing" do
92
- should "also pass" do
93
- assert true
94
- end
95
- end
96
- assert_output(/^given something\n should pass: \.\n\ngiven another thing\n should also pass: \./) do
97
- runner(c1, c2).run(@reporter)
98
- end
93
+ end.
94
+ should_output(%{
95
+ given something and something else should fail:
96
+ 1 should equal 2
97
+ })
99
98
  end
100
99
 
101
100
  def test_should_treat_a_context_as_transparent_if_it_has_no_name
102
- c1 = context "given something" do
101
+ context "given something" do
103
102
  context do
104
103
  should "pass" do
105
104
  assert true
106
105
  end
107
106
  end
108
- end
109
- assert_output(/^given something\n should pass: \./) do
110
- runner(c1).run(@reporter)
111
- end
107
+ end.
108
+ should_output(%{
109
+ given something
110
+ should pass: .
111
+ })
112
112
  end
113
113
 
114
114
  def test_should_print_out_test_names_in_colour_if_colour_is_set
115
- c = context "given something" do
116
- should "be red" do
115
+ use_reporter Kintama::Reporter::Verbose.new(colour=true)
116
+
117
+ context "given tests reported in colour" do
118
+ should "show failures in red" do
117
119
  flunk
118
120
  end
119
- should "be green" do
121
+ should "show passes in green" do
120
122
  assert true
121
123
  end
122
- should "be yellow"
123
- end
124
- assert_output(/^given something\n\e\[32m should be green\e\[0m\n\e\[31m should be red\e\[0m\n\e\[33m should be yellow\e\[0m/) do
125
- runner(c).run(Kintama::Reporter::Verbose.new(true))
126
- end
124
+ should "show pending tests in yellow"
125
+ end.
126
+ should_output(%{
127
+ given tests reported in colour
128
+ \e\[31m should show failures in red\e\[0m
129
+ \e\[32m should show passes in green\e\[0m
130
+ \e\[33m should show pending tests in yellow\e\[0m
131
+ })
127
132
  end
128
133
 
129
134
  def test_should_print_appropriate_test_names_when_given_and_it_aliases_are_used
130
- c = context "In a world without hope" do
135
+ context "In a world without hope" do
131
136
  given "a massive gun" do
132
137
  it "should work out well in the end" do
133
138
  assert true
134
139
  end
135
140
  end
136
- end
137
- assert_output(/^In a world without hope\n given a massive gun\n it should work out well in the end: \./) do
138
- runner(c).run(@reporter)
139
- end
140
- end
141
-
142
- private
143
-
144
- def runner(*args)
145
- Kintama::Runner::Default.new.with(*args)
141
+ end.
142
+ should_output(%{
143
+ In a world without hope
144
+ given a massive gun
145
+ it should work out well in the end: .
146
+ })
146
147
  end
147
- end
148
+ end
@@ -1,10 +1,13 @@
1
+
1
2
  $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
3
  require 'test/unit'
4
+ require 'bundler/setup'
3
5
 
4
6
  ENV["KINTAMA_EXPLICITLY_DONT_RUN"] = "true"
5
7
  require 'kintama'
6
8
 
7
9
  require 'stringio'
10
+ require 'mocha/setup'
8
11
 
9
12
  class Test::Unit::TestCase
10
13
  def setup
@@ -23,6 +26,13 @@ class Test::Unit::TestCase
23
26
  ensure
24
27
  $stdout = STDOUT
25
28
  end
29
+
30
+ def silence_stdout
31
+ $stdout = StringIO.new
32
+ return yield
33
+ ensure
34
+ $stdout = STDOUT
35
+ end
26
36
  end
27
37
 
28
38
  def assert_output(expected, &block)
@@ -34,3 +44,85 @@ class Test::Unit::TestCase
34
44
  end
35
45
  end
36
46
  end
47
+
48
+ class KintamaIntegrationTest < Test::Unit::TestCase
49
+ class << self
50
+ def reporter_class
51
+ @reporter_class || Kintama::Reporter::Verbose
52
+ end
53
+
54
+ def report_with(reporter_class)
55
+ @reporter_class = reporter_class
56
+ end
57
+ end
58
+
59
+ attr_reader :reporter
60
+
61
+ private
62
+
63
+ def use_reporter(reporter)
64
+ @reporter = reporter
65
+ end
66
+
67
+ def context(name, &block)
68
+ ContextTestRunner.new(Kintama.context(name, &block), self)
69
+ end
70
+
71
+ def running_default_context(name, &block)
72
+ Kintama.context(name, &block)
73
+ ContextTestRunner.new(Kintama.default_context, self)
74
+ end
75
+
76
+ class ContextTestRunner
77
+ def initialize(context, test_unit_test)
78
+ @test_unit_test = test_unit_test
79
+ @context = context
80
+ @result = nil
81
+ @reporter = @test_unit_test.reporter || test_unit_test.class.reporter_class.new(colour=false)
82
+ @output = capture_stdout do
83
+ @result = Kintama::Runner.default.with(context).run(@reporter)
84
+ end.read
85
+ end
86
+
87
+ def should_output(expected_output)
88
+ if expected_output.is_a?(Regexp)
89
+ processed_output = expected_output
90
+ else
91
+ processed_output = deindent_string_argument(expected_output)
92
+ end
93
+ @test_unit_test.assert_match processed_output, @output
94
+ self
95
+ end
96
+ alias_method :and_output, :should_output
97
+
98
+ def should_pass(message=nil)
99
+ @test_unit_test.assert(@result == true, message || "Expected a pass, but failed: #{@context.failures.map { |f| f.failure.message }.join(", ")}")
100
+ self
101
+ end
102
+ alias_method :and_pass, :should_pass
103
+
104
+ def should_fail(message=nil)
105
+ @test_unit_test.assert(@result == false, message || "Expected a failure, but passed!")
106
+ self
107
+ end
108
+ alias_method :and_fail, :should_fail
109
+
110
+ def with_failure(failure)
111
+ @test_unit_test.assert_match deindent_string_argument(failure), @output
112
+ self
113
+ end
114
+
115
+ def should_run_tests(number)
116
+ @test_unit_test.assert_equal number, @reporter.test_count, "Expected #{number} tests to run, but #{@reporter.test_count} actually did"
117
+ self
118
+ end
119
+
120
+ private
121
+
122
+ def deindent_string_argument(string)
123
+ initial_indent = string.gsub(/^\n/, '').match(/^(\s+)/)
124
+ initial_indent = initial_indent ? initial_indent[1] : ""
125
+ string.gsub("\n#{initial_indent}", "\n").gsub(/^\n/, '').gsub(/\s+$/, '')
126
+ end
127
+ end
128
+ end
@@ -73,6 +73,14 @@ class AssertionsTest < Test::Unit::TestCase
73
73
  end
74
74
  end
75
75
 
76
+ def test_should_provide_assert_same
77
+ expected, actual = 'foo', 'foo'
78
+ assert_passed { @test.assert_same expected, expected }
79
+ assert_failed("Expected #{expected.inspect} (oid=#{expected.object_id}) to be the same as #{actual.inspect} (oid=#{actual.object_id})") do
80
+ @test.assert_same expected, actual
81
+ end
82
+ end
83
+
76
84
  private
77
85
 
78
86
  def assert_passed
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class ContextTest < Test::Unit::TestCase
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