rspec 0.5.12 → 0.5.13
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/CHANGES +9 -1
- data/README +2 -2
- data/Rakefile +13 -5
- data/examples/custom_formatter.rb +2 -2
- data/examples/file_accessor.rb +18 -0
- data/examples/file_accessor_spec.rb +38 -0
- data/examples/io_processor.rb +8 -0
- data/examples/io_processor_spec.rb +21 -0
- data/lib/spec/api/exceptions.rb +3 -0
- data/lib/spec/api/mocks/message_expectation.rb +45 -29
- data/lib/spec/api/mocks/mock.rb +1 -1
- data/lib/spec/api/mocks/order_group.rb +1 -1
- data/lib/spec/runner.rb +1 -5
- data/lib/spec/runner/formatter.rb +5 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +79 -0
- data/lib/spec/runner/formatter/html_formatter.rb +156 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
- data/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +22 -0
- data/lib/spec/runner/option_parser.rb +17 -17
- data/lib/spec/runner/reporter.rb +1 -1
- data/lib/spec/version.rb +1 -1
- data/test/spec/api/helper/arbitrary_predicate_test.rb +38 -38
- data/test/spec/api/helper/diff_test.rb +1 -1
- data/test/spec/api/helper/identity_test.rb +17 -10
- data/test/spec/api/helper/{equality_test.rb → object_equality_test.rb} +15 -29
- data/test/spec/api/helper/regex_matching_test.rb +7 -9
- data/test/spec/api/helper/throwing_test.rb +11 -12
- data/test/spec/api/helper/true_false_special_case_test.rb +15 -17
- data/test/spec/api/helper/typing_test.rb +27 -26
- data/test/spec/api/mocks/mock_arg_constraints_test.rb +1 -1
- data/test/spec/api/mocks/mock_test.rb +45 -11
- data/test/spec/api/mocks/null_object_test.rb +3 -3
- data/test/spec/runner/context_matching_test.rb +2 -2
- data/test/spec/runner/formatter/failure_dump_test.rb +94 -0
- data/test/spec/runner/formatter/html_formatter_test.rb +48 -0
- data/test/spec/runner/formatter/progress_bar_formatter_test.rb +56 -0
- data/test/spec/runner/formatter/rdoc_formatter_test.rb +51 -0
- data/test/spec/runner/formatter/specdoc_formatter_test.rb +57 -0
- data/test/spec/runner/kernel_ext_test.rb +1 -1
- data/test/spec/runner/option_parser_test.rb +22 -12
- data/test/spec/runner/reporter_test.rb +1 -1
- data/test/test_classes.rb +7 -7
- metadata +19 -14
- data/lib/spec/runner/base_text_formatter.rb +0 -77
- data/lib/spec/runner/html_formatter.rb +0 -153
- data/lib/spec/runner/progress_bar_formatter.rb +0 -25
- data/lib/spec/runner/rdoc_formatter.rb +0 -20
- data/lib/spec/runner/specdoc_formatter.rb +0 -20
- data/test/spec/runner/failure_dump_test.rb +0 -92
- data/test/spec/runner/html_formatter_test.rb +0 -47
- data/test/spec/runner/progress_bar_formatter_test.rb +0 -54
- data/test/spec/runner/rdoc_formatter_test.rb +0 -50
- data/test/spec/runner/specdoc_formatter_test.rb +0 -55
@@ -16,14 +16,14 @@ module Spec
|
|
16
16
|
assert !@context.matches?("context with spec", @matcher)
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def test_should_only_run_specified_specs_when_specified
|
20
20
|
@context.specify("spec1") {}
|
21
21
|
@context.specify("spec2") {}
|
22
22
|
@context.run_single_spec "context spec1"
|
23
23
|
assert_equal 1, @context.number_of_specs
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def test_run_all_specs_when_spec_is_not_specified
|
27
27
|
@context.specify("spec1") {}
|
28
28
|
@context.specify("spec2") {}
|
29
29
|
@context.run_single_spec "context"
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../test_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
module Formatter
|
6
|
+
class ProgressBarFormatterFailureDumpTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@io = StringIO.new
|
10
|
+
@reporter = Reporter.new(ProgressBarFormatter.new(@io), QuietBacktraceTweaker.new)
|
11
|
+
@reporter.add_context "context"
|
12
|
+
end
|
13
|
+
|
14
|
+
def set_backtrace error
|
15
|
+
error.set_backtrace ["/a/b/c/d/e.rb:34:in `__instance_exec'"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_add_spacing_between_sections
|
19
|
+
error = Spec::Api::ExpectationNotMetError.new "message"
|
20
|
+
set_backtrace error
|
21
|
+
@reporter.spec_finished "spec", error, "spec"
|
22
|
+
@reporter.dump
|
23
|
+
assert_match(/\nF\n\n1\)\nSpec::Api::ExpectationNotMetError in 'context spec'\nmessage\n\/a\/b\/c\/d\/e.rb:34:in `spec'\n\nFinished in /, @io.string)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_end_with_line_break
|
27
|
+
error = Spec::Api::ExpectationNotMetError.new "message"
|
28
|
+
set_backtrace error
|
29
|
+
@reporter.spec_finished "spec", error, "spec"
|
30
|
+
@reporter.dump
|
31
|
+
assert_match(/\n\z/, @io.string)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_include_informational_header
|
35
|
+
error = Spec::Api::ExpectationNotMetError.new "message"
|
36
|
+
set_backtrace error
|
37
|
+
@reporter.spec_finished "spec", error, "spec"
|
38
|
+
@reporter.dump
|
39
|
+
assert_match(/^Spec::Api::ExpectationNotMetError in 'context spec'/, @io.string)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_include_context_and_spec_name_in_backtrace_if_error_in_spec
|
43
|
+
error = RuntimeError.new "message"
|
44
|
+
set_backtrace error
|
45
|
+
@reporter.spec_finished "spec", error, "spec"
|
46
|
+
@reporter.dump
|
47
|
+
assert_match(/RuntimeError in 'context spec'/, @io.string)
|
48
|
+
assert_match(/:in `spec'/, @io.string)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_should_include_context_and_setup_in_backtrace_if_error_in_setup
|
52
|
+
error = RuntimeError.new
|
53
|
+
set_backtrace error
|
54
|
+
@reporter.spec_finished "spec", error, "setup"
|
55
|
+
@reporter.dump
|
56
|
+
assert_match(/RuntimeError in 'context spec'/, @io.string)
|
57
|
+
assert_match(/in `setup'/, @io.string)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_include_context_and_teardown_in_backtrace_if_error_in_teardown
|
61
|
+
error = RuntimeError.new
|
62
|
+
set_backtrace error
|
63
|
+
@reporter.spec_finished "spec", error, "teardown"
|
64
|
+
@reporter.dump
|
65
|
+
assert_match(/RuntimeError in 'context spec'/, @io.string)
|
66
|
+
assert_match(/in `teardown'/, @io.string)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class SpecdocFormatterFailureDumpTest < Test::Unit::TestCase
|
72
|
+
|
73
|
+
def setup
|
74
|
+
@io = StringIO.new
|
75
|
+
@reporter = Reporter.new(SpecdocFormatter.new(@io), QuietBacktraceTweaker.new)
|
76
|
+
@reporter.add_context "context"
|
77
|
+
end
|
78
|
+
|
79
|
+
def set_backtrace error
|
80
|
+
error.set_backtrace ["/a/b/c/d/e.rb:34:in `__instance_exec'"]
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_spacing_between_sections
|
84
|
+
error = Spec::Api::ExpectationNotMetError.new "message"
|
85
|
+
set_backtrace error
|
86
|
+
@reporter.spec_finished "spec", error, "spec"
|
87
|
+
@reporter.dump
|
88
|
+
assert_match(/\ncontext\n- spec \(FAILED - 1\)\n\n1\)\nSpec::Api::ExpectationNotMetError in 'context spec'\nmessage\n\/a\/b\/c\/d\/e.rb:34:in `spec'\n\nFinished in /, @io.string)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../test_helper'
|
2
|
+
module Spec
|
3
|
+
module Runner
|
4
|
+
module Formatter
|
5
|
+
class HtmlFormatterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@io = StringIO.new
|
9
|
+
@formatter = HtmlFormatter.new(@io)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_push_header_on_start
|
13
|
+
@formatter.start(5)
|
14
|
+
assert_equal(HtmlFormatter::HEADER, @io.string)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_push_context_name
|
18
|
+
@formatter.add_context("fruit", true)
|
19
|
+
assert_equal("<div class=\"context\">\n <div>fruit</div>\n <ul>\n", @io.string)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_push_div_with_spec_passed_class
|
23
|
+
@formatter.spec_started("spec")
|
24
|
+
@formatter.spec_passed("spec")
|
25
|
+
assert_equal("<li class=\"spec passed\">spec</li>\n", @io.string)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_push_div_with_spec_failed_class
|
29
|
+
exception = StandardError.new("boo")
|
30
|
+
failure = Reporter::Failure.new("context_name", "spec_name", exception)
|
31
|
+
@formatter.spec_started("spec_name")
|
32
|
+
@formatter.spec_failed("spec_name", 98, failure)
|
33
|
+
assert_match(/<li class="spec failed"/, @io.string)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_close_html_on_dump_summary
|
37
|
+
@formatter.dump_summary(3,2,1)
|
38
|
+
assert_equal("</body></html>", @io.string)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_push_div_on_start_dump
|
42
|
+
@formatter.start_dump
|
43
|
+
assert_equal("</div>", @io.string.split.last)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../test_helper'
|
2
|
+
module Spec
|
3
|
+
module Runner
|
4
|
+
module Formatter
|
5
|
+
class ProgressBarFormatterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@io = StringIO.new
|
9
|
+
@formatter = ProgressBarFormatter.new(@io)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_push_nothing_on_start
|
13
|
+
@formatter.start(4)
|
14
|
+
assert_equal("", @io.string)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_push_line_break_for_context
|
18
|
+
@formatter.add_context("context", :ignored)
|
19
|
+
assert_equal("\n", @io.string)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_push_dot_for_passing_spec
|
23
|
+
@formatter.spec_passed("spec")
|
24
|
+
assert_equal(".", @io.string)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_push_F_for_failing_spec
|
28
|
+
@formatter.spec_failed("spec", 98, nil)
|
29
|
+
assert_equal("F", @io.string)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_produce_standard_summary
|
33
|
+
@formatter.dump_summary(3,2,1)
|
34
|
+
assert_equal("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n", @io.string)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_produce_line_break_on_start_dump
|
38
|
+
@formatter.start_dump
|
39
|
+
assert_equal("\n", @io.string)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class ProgressBarFormatterDryRunTest < Test::Unit::TestCase
|
44
|
+
def setup
|
45
|
+
@io = StringIO.new
|
46
|
+
@formatter = ProgressBarFormatter.new(@io, true)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_not_produce_summary_on_dry_run
|
50
|
+
@formatter.dump_summary(3,2,1)
|
51
|
+
assert_equal("", @io.string)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../test_helper'
|
2
|
+
module Spec
|
3
|
+
module Runner
|
4
|
+
module Formatter
|
5
|
+
class RdocFormatterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@io = StringIO.new
|
9
|
+
@formatter = RdocFormatter.new(@io, true)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_push_out_context
|
13
|
+
@formatter.add_context("context", :ignored)
|
14
|
+
assert_equal("# context\n", @io.string)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_push_out_spec
|
18
|
+
@formatter.spec_passed("spec")
|
19
|
+
assert_equal("# * spec\n", @io.string)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_push_out_failed_spec
|
23
|
+
@formatter.spec_failed("spec", 98, nil)
|
24
|
+
assert_equal("# * spec [98 - FAILED]\n", @io.string)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_produce_no_summary
|
28
|
+
@formatter.dump_summary(nil,nil,nil)
|
29
|
+
assert(@io.string.empty?)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_produce_nothing_on_start_dump
|
33
|
+
@formatter.start_dump
|
34
|
+
assert(@io.string.empty?)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
class RdocFormatterDryRunTest < Test::Unit::TestCase
|
39
|
+
def setup
|
40
|
+
@io = StringIO.new
|
41
|
+
@formatter = RdocFormatter.new(@io, true)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_not_produce_summary_on_dry_run
|
45
|
+
@formatter.dump_summary(3,2,1)
|
46
|
+
assert_equal("", @io.string)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../test_helper'
|
2
|
+
module Spec
|
3
|
+
module Runner
|
4
|
+
module Formatter
|
5
|
+
class SpecdocFormatterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@io = StringIO.new
|
9
|
+
@formatter = SpecdocFormatter.new(@io)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_push_context_name
|
13
|
+
@formatter.add_context("context", :ignored)
|
14
|
+
assert_equal("\ncontext\n", @io.string)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_push_passing_spec_name
|
18
|
+
@formatter.spec_passed("spec")
|
19
|
+
assert_equal("- spec\n", @io.string)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_push_failing_spec_name_and_failure_number
|
23
|
+
@formatter.spec_failed("spec", 98, nil)
|
24
|
+
assert_equal("- spec (FAILED - 98)\n", @io.string)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_produce_standard_summary
|
28
|
+
@formatter.dump_summary(3,2,1)
|
29
|
+
assert_equal("\nFinished in 3 seconds\n\n2 specifications, 1 failure\n", @io.string)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_push_nothing_on_start
|
33
|
+
@formatter.start(5)
|
34
|
+
assert_equal("", @io.string)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_push_nothing_on_start_dump
|
38
|
+
@formatter.start_dump
|
39
|
+
assert_equal("", @io.string)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
class SpecdocFormatterDryRunTest < Test::Unit::TestCase
|
45
|
+
def setup
|
46
|
+
@io = StringIO.new
|
47
|
+
@formatter = SpecdocFormatter.new(@io, true)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_not_produce_summary_on_dry_run
|
51
|
+
@formatter.dump_summary(3,2,1)
|
52
|
+
assert_equal("", @io.string)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -21,39 +21,49 @@ module Spec
|
|
21
21
|
assert_match(/Usage: spec \[options\] \(FILE\|DIRECTORY\|GLOB\)\+/n, @out.read)
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def test_should_not_be_verbose_by_default
|
25
25
|
options = OptionParser.parse([], false, @err, @out)
|
26
26
|
assert(!options.verbose)
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def test_should_accept_dry_run_option
|
30
30
|
options = OptionParser.parse(["--dry-run"], false, @err, @out)
|
31
31
|
assert(options.dry_run)
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_should_use_progress_bar_formatter_by_default
|
35
35
|
options = OptionParser.parse([], false, @err, @out)
|
36
|
-
assert_equal(ProgressBarFormatter, options.formatter_type)
|
36
|
+
assert_equal(Formatter::ProgressBarFormatter, options.formatter_type)
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_should_use_specdoc_formatter_when_format_is_specdoc
|
40
40
|
options = OptionParser.parse(["--format","specdoc"], false, @err, @out)
|
41
|
-
assert_equal(SpecdocFormatter, options.formatter_type)
|
41
|
+
assert_equal(Formatter::SpecdocFormatter, options.formatter_type)
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_should_use_specdoc_formatter_when_format_is_s
|
45
45
|
options = OptionParser.parse(["--format","s"], false, @err, @out)
|
46
|
-
assert_equal(SpecdocFormatter, options.formatter_type)
|
46
|
+
assert_equal(Formatter::SpecdocFormatter, options.formatter_type)
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_should_use_rdoc_formatter_when_format_is_rdoc
|
50
50
|
options = OptionParser.parse(["--format","rdoc"], false, @err, @out)
|
51
|
-
assert_equal(RdocFormatter, options.formatter_type)
|
51
|
+
assert_equal(Formatter::RdocFormatter, options.formatter_type)
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_should_use_rdoc_formatter_when_format_is_r
|
55
55
|
options = OptionParser.parse(["--format","r"], false, @err, @out)
|
56
|
-
assert_equal(RdocFormatter, options.formatter_type)
|
56
|
+
assert_equal(Formatter::RdocFormatter, options.formatter_type)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_should_use_html_formatter_when_format_is_html
|
60
|
+
options = OptionParser.parse(["--format","html"], false, @err, @out)
|
61
|
+
assert_equal(Formatter::HtmlFormatter, options.formatter_type)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_use_html_formatter_when_format_is_h
|
65
|
+
options = OptionParser.parse(["--format","h"], false, @err, @out)
|
66
|
+
assert_equal(Formatter::HtmlFormatter, options.formatter_type)
|
57
67
|
end
|
58
68
|
|
59
69
|
def test_should_select_dry_run_for_rdoc_formatter
|
@@ -82,27 +92,27 @@ module Spec
|
|
82
92
|
assert_match(/Usage: spec/, @err.string)
|
83
93
|
end
|
84
94
|
|
85
|
-
def
|
95
|
+
def test_should_use_quiet_backtrace_tweaker_by_default
|
86
96
|
options = OptionParser.parse([], false, @err, @out)
|
87
97
|
assert options.backtrace_tweaker.instance_of?(QuietBacktraceTweaker)
|
88
98
|
end
|
89
99
|
|
90
|
-
def
|
100
|
+
def test_should_use_noisy_backtrace_tweaker_with_b_option
|
91
101
|
options = OptionParser.parse(["-b"], false, @err, @out)
|
92
102
|
assert options.backtrace_tweaker.instance_of?(NoisyBacktraceTweaker)
|
93
103
|
end
|
94
104
|
|
95
|
-
def
|
105
|
+
def test_should_use_noisy_backtrace_tweaker_with_backtrace_option
|
96
106
|
options = OptionParser.parse(["--backtrace"], false, @err, @out)
|
97
107
|
assert options.backtrace_tweaker.instance_of?(NoisyBacktraceTweaker)
|
98
108
|
end
|
99
109
|
|
100
|
-
def
|
110
|
+
def test_should_support_single_spec_with_spec_option
|
101
111
|
options = OptionParser.parse(["--spec","something or other"], false, @err, @out)
|
102
112
|
assert_equal "something or other", options.spec_name
|
103
113
|
end
|
104
114
|
|
105
|
-
def
|
115
|
+
def test_should_support_single_spec_with_s_option
|
106
116
|
options = OptionParser.parse(["-s","something or other"], false, @err, @out)
|
107
117
|
assert_equal "something or other", options.spec_name
|
108
118
|
end
|
@@ -62,7 +62,7 @@ module Spec
|
|
62
62
|
@reporter.dump
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def test_should_handle_multiple_contexts_with_same_name
|
66
66
|
@formatter.should_receive(:add_context).exactly(3).times
|
67
67
|
@formatter.should.receive(:spec_started).exactly(3).times
|
68
68
|
@formatter.should.receive(:spec_passed).exactly(3).times
|
data/test/test_classes.rb
CHANGED
@@ -39,27 +39,27 @@ module Spec
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
class
|
42
|
+
class HandCodedMock
|
43
43
|
def initialize(return_val)
|
44
44
|
@return_val = return_val
|
45
|
-
@
|
45
|
+
@funny_called = false
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
@
|
48
|
+
def funny?
|
49
|
+
@funny_called = true
|
50
50
|
@return_val
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def hungry?(a, b, c)
|
54
54
|
a.should.be 1
|
55
55
|
b.should.be 2
|
56
56
|
c.should.be 3
|
57
|
-
@
|
57
|
+
@funny_called = true
|
58
58
|
@return_val
|
59
59
|
end
|
60
60
|
|
61
61
|
def __verify
|
62
|
-
@
|
62
|
+
@funny_called.should.be true
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|