rspec-core 2.12.2 → 2.13.0

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.
Files changed (95) hide show
  1. data/Changelog.md +31 -0
  2. data/README.md +11 -10
  3. data/features/command_line/example_name_option.feature +6 -10
  4. data/features/command_line/tag.feature +15 -8
  5. data/features/configuration/backtrace_clean_patterns.feature +102 -0
  6. data/features/configuration/failure_exit_code.feature +36 -0
  7. data/features/configuration/order_and_seed.feature +3 -0
  8. data/features/configuration/output_stream.feature +24 -0
  9. data/features/configuration/pattern.feature +30 -0
  10. data/features/configuration/profile.feature +163 -0
  11. data/features/configuration/run_all_when_everything_filtered.feature +60 -0
  12. data/features/configuration/show_failures_in_pending_blocks.feature +61 -0
  13. data/features/configuration/treat_symbols_as_metadata_keys_with_true_values.feature +52 -0
  14. data/features/filtering/exclusion_filters.feature +1 -2
  15. data/features/formatters/configurable_colors.feature +31 -0
  16. data/features/step_definitions/additional_cli_steps.rb +21 -0
  17. data/features/subject/explicit_subject.feature +19 -0
  18. data/lib/autotest/rspec2.rb +1 -1
  19. data/lib/rspec/core.rb +1 -2
  20. data/lib/rspec/core/configuration.rb +33 -3
  21. data/lib/rspec/core/configuration_options.rb +5 -5
  22. data/lib/rspec/core/deprecation.rb +1 -1
  23. data/lib/rspec/core/example.rb +2 -2
  24. data/lib/rspec/core/example_group.rb +1 -3
  25. data/lib/rspec/core/formatters/base_text_formatter.rb +93 -27
  26. data/lib/rspec/core/formatters/documentation_formatter.rb +3 -3
  27. data/lib/rspec/core/formatters/progress_formatter.rb +3 -3
  28. data/lib/rspec/core/memoized_helpers.rb +425 -0
  29. data/lib/rspec/core/metadata.rb +6 -2
  30. data/lib/rspec/core/option_parser.rb +8 -2
  31. data/lib/rspec/core/pending.rb +7 -0
  32. data/lib/rspec/core/shared_context.rb +1 -1
  33. data/lib/rspec/core/version.rb +1 -1
  34. data/spec/autotest/failed_results_re_spec.rb +4 -4
  35. data/spec/autotest/rspec_spec.rb +25 -20
  36. data/spec/command_line/order_spec.rb +21 -21
  37. data/spec/rspec/core/command_line_spec.rb +6 -6
  38. data/spec/rspec/core/configuration_options_spec.rb +86 -72
  39. data/spec/rspec/core/configuration_spec.rb +161 -156
  40. data/spec/rspec/core/deprecations_spec.rb +4 -4
  41. data/spec/rspec/core/drb_command_line_spec.rb +9 -9
  42. data/spec/rspec/core/drb_options_spec.rb +46 -33
  43. data/spec/rspec/core/dsl_spec.rb +3 -3
  44. data/spec/rspec/core/example_group_spec.rb +156 -124
  45. data/spec/rspec/core/example_spec.rb +68 -52
  46. data/spec/rspec/core/filter_manager_spec.rb +36 -36
  47. data/spec/rspec/core/formatters/base_formatter_spec.rb +9 -9
  48. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +104 -42
  49. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +4 -4
  50. data/spec/rspec/core/formatters/helpers_spec.rb +13 -13
  51. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +5 -17
  52. data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +159 -44
  53. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +14 -14
  54. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +20 -20
  55. data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +5 -5
  56. data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +159 -44
  57. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +20 -20
  58. data/spec/rspec/core/formatters/{html_formatted-1.9.2-jruby.html → html_formatted-2.0.0.html} +24 -18
  59. data/spec/rspec/core/formatters/html_formatter_spec.rb +9 -5
  60. data/spec/rspec/core/formatters/json_formatter_spec.rb +9 -9
  61. data/spec/rspec/core/formatters/progress_formatter_spec.rb +4 -4
  62. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +3 -3
  63. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +5 -17
  64. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-rbx.html +159 -44
  65. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +16 -16
  66. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +23 -23
  67. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-jruby.html +5 -17
  68. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-rbx.html +159 -44
  69. data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +23 -23
  70. data/spec/rspec/core/formatters/{text_mate_formatted-1.9.2-jruby.html → text_mate_formatted-2.0.0.html} +25 -19
  71. data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +8 -4
  72. data/spec/rspec/core/hooks_filtering_spec.rb +16 -16
  73. data/spec/rspec/core/hooks_spec.rb +11 -11
  74. data/spec/rspec/core/kernel_extensions_spec.rb +1 -1
  75. data/spec/rspec/core/memoized_helpers_spec.rb +458 -0
  76. data/spec/rspec/core/metadata_spec.rb +74 -74
  77. data/spec/rspec/core/option_parser_spec.rb +27 -27
  78. data/spec/rspec/core/pending_example_spec.rb +32 -32
  79. data/spec/rspec/core/project_initializer_spec.rb +8 -8
  80. data/spec/rspec/core/rake_task_spec.rb +16 -16
  81. data/spec/rspec/core/reporter_spec.rb +3 -3
  82. data/spec/rspec/core/resources/formatter_specs.rb +4 -4
  83. data/spec/rspec/core/ruby_project_spec.rb +4 -2
  84. data/spec/rspec/core/shared_context_spec.rb +34 -7
  85. data/spec/rspec/core/shared_example_group_spec.rb +14 -14
  86. data/spec/rspec/core/world_spec.rb +9 -9
  87. data/spec/rspec/core_spec.rb +5 -5
  88. data/spec/spec_helper.rb +4 -0
  89. data/spec/support/shared_example_groups.rb +4 -4
  90. data/spec/support/spec_files.rb +2 -2
  91. metadata +158 -150
  92. data/lib/rspec/core/let.rb +0 -110
  93. data/lib/rspec/core/subject.rb +0 -223
  94. data/spec/rspec/core/let_spec.rb +0 -55
  95. data/spec/rspec/core/subject_spec.rb +0 -255
@@ -1,110 +0,0 @@
1
- module RSpec
2
- module Core
3
- module Let
4
-
5
- module ExampleGroupMethods
6
- # Generates a method whose return value is memoized after the first
7
- # call. Useful for reducing duplication between examples that assign
8
- # values to the same local variable.
9
- #
10
- # @note `let` _can_ enhance readability when used sparingly (1,2, or
11
- # maybe 3 declarations) in any given example group, but that can
12
- # quickly degrade with overuse. YMMV.
13
- #
14
- # @note `let` uses an `||=` conditional that has the potential to
15
- # behave in surprising ways in examples that spawn separate threads,
16
- # though we have yet to see this in practice. You've been warned.
17
- #
18
- # @example
19
- #
20
- # describe Thing do
21
- # let(:thing) { Thing.new }
22
- #
23
- # it "does something" do
24
- # # first invocation, executes block, memoizes and returns result
25
- # thing.do_something
26
- #
27
- # # second invocation, returns the memoized value
28
- # thing.should be_something
29
- # end
30
- # end
31
- def let(name, &block)
32
- define_method(name) do
33
- __memoized.fetch(name) {|k| __memoized[k] = instance_eval(&block) }
34
- end
35
- end
36
-
37
- # Just like `let`, except the block is invoked by an implicit `before`
38
- # hook. This serves a dual purpose of setting up state and providing a
39
- # memoized reference to that state.
40
- #
41
- # @example
42
- #
43
- # class Thing
44
- # def self.count
45
- # @count ||= 0
46
- # end
47
- #
48
- # def self.count=(val)
49
- # @count += val
50
- # end
51
- #
52
- # def self.reset_count
53
- # @count = 0
54
- # end
55
- #
56
- # def initialize
57
- # self.class.count += 1
58
- # end
59
- # end
60
- #
61
- # describe Thing do
62
- # after(:each) { Thing.reset_count }
63
- #
64
- # context "using let" do
65
- # let(:thing) { Thing.new }
66
- #
67
- # it "is not invoked implicitly" do
68
- # Thing.count.should eq(0)
69
- # end
70
- #
71
- # it "can be invoked explicitly" do
72
- # thing
73
- # Thing.count.should eq(1)
74
- # end
75
- # end
76
- #
77
- # context "using let!" do
78
- # let!(:thing) { Thing.new }
79
- #
80
- # it "is invoked implicitly" do
81
- # Thing.count.should eq(1)
82
- # end
83
- #
84
- # it "returns memoized version on first invocation" do
85
- # thing
86
- # Thing.count.should eq(1)
87
- # end
88
- # end
89
- # end
90
- def let!(name, &block)
91
- let(name, &block)
92
- before { __send__(name) }
93
- end
94
- end
95
-
96
- # @private
97
- module ExampleMethods
98
- # @private
99
- def __memoized
100
- @__memoized ||= {}
101
- end
102
- end
103
-
104
- def self.included(mod)
105
- mod.extend ExampleGroupMethods
106
- mod.__send__ :include, ExampleMethods
107
- end
108
- end
109
- end
110
- end
@@ -1,223 +0,0 @@
1
- module RSpec
2
- module Core
3
- module Subject
4
- module ExampleMethods
5
- # Returns the example group's `subject`.
6
- #
7
- # @note `subject` was contributed by Joe Ferris to support the one-liner
8
- # syntax embraced by shoulda matchers:
9
- #
10
- # describe Widget do
11
- # it { should validate_presence_of(:name) }
12
- # end
13
- #
14
- # While the examples below demonstrate how to use `subject`
15
- # explicitly in examples, we recommend that you define a method with
16
- # an intention revealing name instead.
17
- #
18
- # @example
19
- #
20
- # # explicit declaration of subject
21
- # describe Person do
22
- # subject { Person.new(:birthdate => 19.years.ago) }
23
- # it "should be eligible to vote" do
24
- # subject.should be_eligible_to_vote
25
- # # ^ ^ explicit reference to subject not recommended
26
- # end
27
- # end
28
- #
29
- # # implicit subject => { Person.new }
30
- # describe Person do
31
- # it "should be eligible to vote" do
32
- # subject.should be_eligible_to_vote
33
- # # ^ ^ explicit reference to subject not recommended
34
- # end
35
- # end
36
- #
37
- # # one-liner syntax - should is invoked on subject
38
- # describe Person do
39
- # it { should be_eligible_to_vote }
40
- # end
41
- #
42
- # @see ExampleGroupMethods#subject
43
- # @see #should
44
- def subject
45
- if defined?(@original_subject)
46
- @original_subject
47
- else
48
- @original_subject = instance_eval(&self.class.subject)
49
- end
50
- end
51
-
52
- # When `should` is called with no explicit receiver, the call is
53
- # delegated to the object returned by `subject`. Combined with an
54
- # implicit subject this supports very concise expressions.
55
- #
56
- # @example
57
- #
58
- # describe Person do
59
- # it { should be_eligible_to_vote }
60
- # end
61
- #
62
- # @see #subject
63
- def should(matcher=nil, message=nil)
64
- RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, matcher, message)
65
- end
66
-
67
- # Just like `should`, `should_not` delegates to the subject (implicit or
68
- # explicit) of the example group.
69
- #
70
- # @example
71
- #
72
- # describe Person do
73
- # it { should_not be_eligible_to_vote }
74
- # end
75
- #
76
- # @see #subject
77
- def should_not(matcher=nil, message=nil)
78
- RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message)
79
- end
80
-
81
- private
82
-
83
- def _attribute_chain(attribute)
84
- attribute.to_s.split('.')
85
- end
86
-
87
- def _nested_attribute(subject, attribute)
88
- _attribute_chain(attribute).inject(subject) do |inner_subject, attr|
89
- inner_subject.send(attr)
90
- end
91
- end
92
- end
93
-
94
- module ExampleGroupMethods
95
- # Creates a nested example group named by the submitted `attribute`,
96
- # and then generates an example using the submitted block.
97
- #
98
- # @example
99
- #
100
- # # This ...
101
- # describe Array do
102
- # its(:size) { should eq(0) }
103
- # end
104
- #
105
- # # ... generates the same runtime structure as this:
106
- # describe Array do
107
- # describe "size" do
108
- # it "should eq(0)" do
109
- # subject.size.should eq(0)
110
- # end
111
- # end
112
- # end
113
- #
114
- # The attribute can be a `Symbol` or a `String`. Given a `String`
115
- # with dots, the result is as though you concatenated that `String`
116
- # onto the subject in an expression.
117
- #
118
- # @example
119
- #
120
- # describe Person do
121
- # subject do
122
- # Person.new.tap do |person|
123
- # person.phone_numbers << "555-1212"
124
- # end
125
- # end
126
- #
127
- # its("phone_numbers.first") { should eq("555-1212") }
128
- # end
129
- #
130
- # When the subject is a `Hash`, you can refer to the Hash keys by
131
- # specifying a `Symbol` or `String` in an array.
132
- #
133
- # @example
134
- #
135
- # describe "a configuration Hash" do
136
- # subject do
137
- # { :max_users => 3,
138
- # 'admin' => :all_permissions }
139
- # end
140
- #
141
- # its([:max_users]) { should eq(3) }
142
- # its(['admin']) { should eq(:all_permissions) }
143
- #
144
- # # You can still access to its regular methods this way:
145
- # its(:keys) { should include(:max_users) }
146
- # its(:count) { should eq(2) }
147
- # end
148
- def its(attribute, &block)
149
- describe(attribute) do
150
- example do
151
- self.class.class_eval do
152
- define_method(:subject) do
153
- if defined?(@_subject)
154
- @_subject
155
- else
156
- @_subject = Array === attribute ? super()[*attribute] : _nested_attribute(super(), attribute)
157
- end
158
- end
159
- end
160
- instance_eval(&block)
161
- end
162
- end
163
- end
164
-
165
- # Declares a `subject` for an example group which can then be the
166
- # implicit receiver (through delegation) of calls to `should`.
167
- #
168
- # Given a `name`, defines a method with that name which returns the
169
- # `subject`. This lets you declare the subject once and access it
170
- # implicitly in one-liners and explicitly using an intention revealing
171
- # name.
172
- #
173
- # @param [String,Symbol] name used to define an accessor with an
174
- # intention revealing name
175
- # @param block defines the value to be returned by `subject` in examples
176
- #
177
- # @example
178
- #
179
- # describe CheckingAccount, "with $50" do
180
- # subject { CheckingAccount.new(Money.new(50, :USD)) }
181
- # it { should have_a_balance_of(Money.new(50, :USD)) }
182
- # it { should_not be_overdrawn }
183
- # end
184
- #
185
- # describe CheckingAccount, "with a non-zero starting balance" do
186
- # subject(:account) { CheckingAccount.new(Money.new(50, :USD)) }
187
- # it { should_not be_overdrawn }
188
- # it "has a balance equal to the starting balance" do
189
- # account.balance.should eq(Money.new(50, :USD))
190
- # end
191
- # end
192
- #
193
- # @see ExampleMethods#subject
194
- # @see ExampleMethods#should
195
- def subject(name=nil, &block)
196
- if name
197
- let(name, &block)
198
- subject { send name }
199
- else
200
- block ? @explicit_subject_block = block : explicit_subject || implicit_subject
201
- end
202
- end
203
-
204
- attr_reader :explicit_subject_block
205
-
206
- private
207
-
208
- def explicit_subject
209
- group = self
210
- while group.respond_to?(:explicit_subject_block)
211
- return group.explicit_subject_block if group.explicit_subject_block
212
- group = group.superclass
213
- end
214
- end
215
-
216
- def implicit_subject
217
- described = described_class || description
218
- Class === described ? proc { described.new } : proc { described }
219
- end
220
- end
221
- end
222
- end
223
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "#let" do
4
- let(:counter) do
5
- Class.new do
6
- def initialize
7
- @count = 0
8
- end
9
- def count
10
- @count += 1
11
- end
12
- end.new
13
- end
14
-
15
- let(:nil_value) do
16
- @nil_value_count += 1
17
- nil
18
- end
19
-
20
- it "generates an instance method" do
21
- counter.count.should eq(1)
22
- end
23
-
24
- it "caches the value" do
25
- counter.count.should eq(1)
26
- counter.count.should eq(2)
27
- end
28
-
29
- it "caches a nil value" do
30
- @nil_value_count = 0
31
- nil_value
32
- nil_value
33
-
34
- @nil_value_count.should eq(1)
35
- end
36
- end
37
-
38
- describe "#let!" do
39
- let!(:creator) do
40
- Class.new do
41
- @count = 0
42
- def self.count
43
- @count += 1
44
- end
45
- end
46
- end
47
-
48
- it "evaluates the value non-lazily" do
49
- lambda { creator.count }.should_not raise_error
50
- end
51
-
52
- it "does not interfere between tests" do
53
- creator.count.should eq(1)
54
- end
55
- end
@@ -1,255 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module RSpec::Core
4
-
5
- describe Subject do
6
- before(:each) { RSpec.configuration.configure_expectation_framework }
7
-
8
- describe "implicit subject" do
9
- describe "with a class" do
10
- it "returns an instance of the class" do
11
- ExampleGroup.describe(Array).subject.call.should eq([])
12
- end
13
- end
14
-
15
- describe "with a Module" do
16
- it "returns the Module" do
17
- ExampleGroup.describe(Enumerable).subject.call.should eq(Enumerable)
18
- end
19
- end
20
-
21
- describe "with a string" do
22
- it "return the string" do
23
- ExampleGroup.describe("Foo").subject.call.should eq("Foo")
24
- end
25
- end
26
-
27
- describe "with a number" do
28
- it "returns the number" do
29
- ExampleGroup.describe(15).subject.call.should eq(15)
30
- end
31
- end
32
-
33
- end
34
-
35
- describe "explicit subject" do
36
- [false, nil].each do |falsy_value|
37
- context "with a value of #{falsy_value.inspect}" do
38
- it "is evaluated once per example" do
39
- group = ExampleGroup.describe(Array)
40
- group.before do
41
- Object.should_receive(:this_question?).once.and_return(falsy_value)
42
- end
43
- group.subject do
44
- Object.this_question?
45
- end
46
- group.example do
47
- subject
48
- subject
49
- end
50
- group.run.should be_true, "expected subject block to be evaluated only once"
51
- end
52
- end
53
- end
54
-
55
- describe "defined in a top level group" do
56
- it "replaces the implicit subject in that group" do
57
- group = ExampleGroup.describe(Array)
58
- group.subject { [1,2,3] }
59
- group.subject.call.should eq([1,2,3])
60
- end
61
- end
62
-
63
- describe "defined in a top level group" do
64
- let(:group) do
65
- ExampleGroup.describe do
66
- subject{ [4,5,6] }
67
- end
68
- end
69
-
70
- it "is available in a nested group (subclass)" do
71
- nested_group = group.describe("I'm nested!") { }
72
- nested_group.subject.call.should eq([4,5,6])
73
- end
74
-
75
- it "is available in a doubly nested group (subclass)" do
76
- nested_group = group.describe("Nesting level 1") { }
77
- doubly_nested_group = nested_group.describe("Nesting level 2") { }
78
- doubly_nested_group.subject.call.should eq([4,5,6])
79
- end
80
- end
81
-
82
- describe "with a name" do
83
- it "defines a method that returns the memoized subject" do
84
- group = ExampleGroup.describe do
85
- subject(:list) { [1,2,3] }
86
- example do
87
- list.should equal(list)
88
- subject.should equal(subject)
89
- subject.should equal(list)
90
- end
91
- end
92
- group.run.should be_true
93
- end
94
-
95
- it "is referred from inside subject by the name" do
96
- group = ExampleGroup.describe do
97
- subject(:list) { [1,2,3] }
98
- describe 'first' do
99
- subject(:first_element) { list.first }
100
- it { should eq(1) }
101
- end
102
- end
103
- group.run.should be_true
104
- end
105
- end
106
- end
107
-
108
- context "using 'self' as an explicit subject" do
109
- it "delegates matcher to the ExampleGroup" do
110
- group = ExampleGroup.describe("group") do
111
- subject { self }
112
- def ok?; true; end
113
- def not_ok?; false; end
114
-
115
- it { should eq(self) }
116
- it { should be_ok }
117
- it { should_not be_not_ok }
118
- end
119
-
120
- group.run.should be_true
121
- end
122
- end
123
-
124
- describe "#its" do
125
- subject do
126
- Class.new do
127
- def initialize
128
- @call_count = 0
129
- end
130
-
131
- def call_count
132
- @call_count += 1
133
- end
134
- end.new
135
- end
136
-
137
- context "with a call counter" do
138
- its(:call_count) { should eq(1) }
139
- end
140
-
141
- context "with nil value" do
142
- subject do
143
- Class.new do
144
- def nil_value
145
- nil
146
- end
147
- end.new
148
- end
149
- its(:nil_value) { should be_nil }
150
- end
151
-
152
- context "with nested attributes" do
153
- subject do
154
- Class.new do
155
- def name
156
- "John"
157
- end
158
- end.new
159
- end
160
- its("name") { should eq("John") }
161
- its("name.size") { should eq(4) }
162
- its("name.size.class") { should eq(Fixnum) }
163
- end
164
-
165
- context "when it responds to #[]" do
166
- subject do
167
- Class.new do
168
- def [](*objects)
169
- objects.map do |object|
170
- "#{object.class}: #{object.to_s}"
171
- end.join("; ")
172
- end
173
-
174
- def name
175
- "George"
176
- end
177
- end.new
178
- end
179
- its([:a]) { should eq("Symbol: a") }
180
- its(['a']) { should eq("String: a") }
181
- its([:b, 'c', 4]) { should eq("Symbol: b; String: c; Fixnum: 4") }
182
- its(:name) { should eq("George") }
183
- context "when referring to an attribute without the proper array syntax" do
184
- context "it raises an error" do
185
- its(:age) do
186
- expect do
187
- should eq(64)
188
- end.to raise_error(NoMethodError)
189
- end
190
- end
191
- end
192
- end
193
-
194
- context "when it does not respond to #[]" do
195
- subject { Object.new }
196
-
197
- context "it raises an error" do
198
- its([:a]) do
199
- expect do
200
- should eq("Symbol: a")
201
- end.to raise_error(NoMethodError)
202
- end
203
- end
204
- end
205
-
206
- context "calling and overriding super" do
207
- it "calls to the subject defined in the parent group" do
208
- group = ExampleGroup.describe(Array) do
209
- subject { [1, 'a'] }
210
-
211
- its(:last) { should eq("a") }
212
-
213
- describe '.first' do
214
- def subject; super().first; end
215
-
216
- its(:next) { should eq(2) }
217
- end
218
- end
219
-
220
- group.run.should be_true
221
- end
222
- end
223
-
224
- context "with nil subject" do
225
- subject do
226
- Class.new do
227
- def initialize
228
- @counter = -1
229
- end
230
- def nil_if_first_time
231
- @counter += 1
232
- @counter == 0 ? nil : true
233
- end
234
- end.new
235
- end
236
- its(:nil_if_first_time) { should be(nil) }
237
- end
238
-
239
- context "with false subject" do
240
- subject do
241
- Class.new do
242
- def initialize
243
- @counter = -1
244
- end
245
- def false_if_first_time
246
- @counter += 1
247
- @counter > 0
248
- end
249
- end.new
250
- end
251
- its(:false_if_first_time) { should be(false) }
252
- end
253
- end
254
- end
255
- end