rspec 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/{CHANGES → History.txt} +116 -64
  2. data/Manifest.txt +403 -0
  3. data/{MIT-LICENSE → README.txt} +43 -0
  4. data/Rakefile +39 -212
  5. data/{TODO → TODO.txt} +0 -0
  6. data/bin/autospec +4 -0
  7. data/bin/spec +1 -1
  8. data/examples/pure/yielding_example.rb +33 -0
  9. data/examples/stories/game-of-life/.loadpath +5 -0
  10. data/examples/stories/game-of-life/behaviour/everything.rb +1 -1
  11. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +17 -17
  12. data/init.rb +9 -0
  13. data/lib/autotest/discover.rb +1 -1
  14. data/lib/autotest/rspec.rb +3 -29
  15. data/lib/spec.rb +10 -12
  16. data/lib/spec/adapters.rb +1 -0
  17. data/lib/spec/adapters/ruby_engine.rb +26 -0
  18. data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
  19. data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
  20. data/lib/spec/example/errors.rb +6 -0
  21. data/lib/spec/example/example_group_methods.rb +17 -14
  22. data/lib/spec/example/example_matcher.rb +2 -0
  23. data/lib/spec/example/example_methods.rb +4 -9
  24. data/lib/spec/example/module_inclusion_warnings.rb +2 -1
  25. data/lib/spec/expectations/extensions/object.rb +2 -2
  26. data/lib/spec/expectations/handler.rb +8 -16
  27. data/lib/spec/extensions/main.rb +2 -17
  28. data/lib/spec/matchers.rb +8 -2
  29. data/lib/spec/matchers/be.rb +0 -3
  30. data/lib/spec/matchers/change.rb +44 -40
  31. data/lib/spec/matchers/has.rb +1 -1
  32. data/lib/spec/matchers/have.rb +17 -12
  33. data/lib/spec/matchers/operator_matcher.rb +10 -4
  34. data/lib/spec/matchers/simple_matcher.rb +113 -10
  35. data/lib/spec/mocks.rb +1 -1
  36. data/lib/spec/mocks/argument_constraints.rb +185 -0
  37. data/lib/spec/mocks/argument_expectation.rb +35 -173
  38. data/lib/spec/mocks/framework.rb +1 -1
  39. data/lib/spec/mocks/message_expectation.rb +30 -5
  40. data/lib/spec/mocks/methods.rb +14 -2
  41. data/lib/spec/mocks/mock.rb +4 -0
  42. data/lib/spec/mocks/proxy.rb +46 -5
  43. data/lib/spec/mocks/spec_methods.rb +9 -1
  44. data/lib/spec/rake/spectask.rb +14 -22
  45. data/lib/spec/rake/verify_rcov.rb +3 -3
  46. data/lib/spec/runner.rb +18 -6
  47. data/lib/spec/runner/backtrace_tweaker.rb +6 -7
  48. data/lib/spec/runner/command_line.rb +6 -17
  49. data/lib/spec/runner/drb_command_line.rb +1 -1
  50. data/lib/spec/runner/formatter/base_formatter.rb +3 -1
  51. data/lib/spec/runner/formatter/base_text_formatter.rb +5 -9
  52. data/lib/spec/runner/formatter/html_formatter.rb +1 -1
  53. data/lib/spec/runner/formatter/nested_text_formatter.rb +1 -1
  54. data/lib/spec/runner/formatter/progress_bar_formatter.rb +2 -2
  55. data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -1
  56. data/lib/spec/runner/formatter/story/html_formatter.rb +62 -16
  57. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +68 -16
  58. data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
  59. data/lib/spec/runner/heckle_runner.rb +2 -2
  60. data/lib/spec/runner/option_parser.rb +2 -1
  61. data/lib/spec/runner/options.rb +18 -9
  62. data/lib/spec/runner/reporter.rb +24 -4
  63. data/lib/spec/runner/spec_parser.rb +1 -1
  64. data/lib/spec/story/runner.rb +1 -2
  65. data/lib/spec/story/runner/story_mediator.rb +14 -0
  66. data/lib/spec/story/runner/story_parser.rb +20 -0
  67. data/lib/spec/story/step.rb +40 -28
  68. data/lib/spec/story/step_mother.rb +2 -1
  69. data/lib/spec/story/world.rb +6 -2
  70. data/lib/spec/version.rb +13 -22
  71. data/rake_tasks/failing_examples_with_html.rake +1 -1
  72. data/rake_tasks/verify_rcov.rake +2 -2
  73. data/rspec.gemspec +33 -0
  74. data/spec/autotest/rspec_spec.rb +90 -141
  75. data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
  76. data/spec/spec/example/base_formatter_spec.rb +112 -0
  77. data/spec/spec/example/example_group_factory_spec.rb +2 -2
  78. data/spec/spec/example/example_group_methods_spec.rb +55 -4
  79. data/spec/spec/example/example_group_spec.rb +4 -3
  80. data/spec/spec/example/example_methods_spec.rb +18 -14
  81. data/spec/spec/example/pending_module_spec.rb +38 -0
  82. data/spec/spec/example/shared_example_group_spec.rb +1 -1
  83. data/spec/spec/expectations/extensions/object_spec.rb +0 -12
  84. data/spec/spec/extensions/main_spec.rb +3 -8
  85. data/spec/spec/matchers/change_spec.rb +16 -6
  86. data/spec/spec/matchers/handler_spec.rb +58 -37
  87. data/spec/spec/matchers/has_spec.rb +10 -0
  88. data/spec/spec/matchers/have_spec.rb +105 -2
  89. data/spec/spec/matchers/operator_matcher_spec.rb +35 -2
  90. data/spec/spec/matchers/simple_matcher_spec.rb +64 -2
  91. data/spec/spec/mocks/any_number_of_times_spec.rb +7 -0
  92. data/spec/spec/mocks/bug_report_496.rb +17 -0
  93. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +7 -1
  94. data/spec/spec/mocks/hash_including_matcher_spec.rb +45 -24
  95. data/spec/spec/mocks/mock_spec.rb +55 -10
  96. data/spec/spec/mocks/nil_expectation_warning_spec.rb +54 -0
  97. data/spec/spec/mocks/null_object_mock_spec.rb +14 -0
  98. data/spec/spec/mocks/options_hash_spec.rb +18 -28
  99. data/spec/spec/mocks/partial_mock_spec.rb +2 -0
  100. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +20 -6
  101. data/spec/spec/mocks/stub_spec.rb +7 -0
  102. data/spec/spec/runner/command_line_spec.rb +5 -12
  103. data/spec/spec/runner/drb_command_line_spec.rb +13 -6
  104. data/spec/spec/runner/formatter/html_formatter_spec.rb +2 -1
  105. data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +3 -3
  106. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +20 -2
  107. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +2 -1
  108. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +3 -3
  109. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +76 -2
  110. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +161 -0
  111. data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
  112. data/spec/spec/runner/heckle_runner_spec.rb +8 -8
  113. data/spec/spec/runner/option_parser_spec.rb +21 -6
  114. data/spec/spec/runner/output_one_time_fixture_runner.rb +1 -1
  115. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -0
  116. data/spec/spec/runner/reporter_spec.rb +51 -5
  117. data/spec/spec/runner/spec_parser_spec.rb +4 -4
  118. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +2 -5
  119. data/spec/spec/story/runner/story_mediator_spec.rb +10 -0
  120. data/spec/spec/story/runner/story_parser_spec.rb +23 -6
  121. data/spec/spec/story/scenario_spec.rb +1 -3
  122. data/spec/spec/story/step_mother_spec.rb +12 -0
  123. data/spec/spec/story/step_spec.rb +57 -4
  124. data/spec/spec/story/story_spec.rb +1 -3
  125. data/spec/spec/story/world_spec.rb +1 -1
  126. data/spec/spec_helper.rb +21 -68
  127. data/stories/all.rb +1 -1
  128. data/stories/configuration/before_blocks.story +21 -0
  129. data/stories/configuration/stories.rb +7 -0
  130. data/stories/example_groups/stories.rb +3 -4
  131. data/stories/resources/spec/before_blocks_example.rb +32 -0
  132. data/stories/stories/multiline_steps.story +23 -0
  133. data/stories/stories/steps/multiline_steps.rb +13 -0
  134. data/stories/stories/stories.rb +6 -0
  135. data/story_server/prototype/javascripts/builder.js +136 -0
  136. data/story_server/prototype/javascripts/controls.js +972 -0
  137. data/story_server/prototype/javascripts/dragdrop.js +976 -0
  138. data/story_server/prototype/javascripts/effects.js +1117 -0
  139. data/story_server/prototype/javascripts/prototype.js +4140 -0
  140. data/story_server/prototype/javascripts/rspec.js +149 -0
  141. data/story_server/prototype/javascripts/scriptaculous.js +58 -0
  142. data/story_server/prototype/javascripts/slider.js +276 -0
  143. data/story_server/prototype/javascripts/sound.js +55 -0
  144. data/story_server/prototype/javascripts/unittest.js +568 -0
  145. data/story_server/prototype/lib/server.rb +24 -0
  146. data/story_server/prototype/stories.html +176 -0
  147. data/story_server/prototype/stylesheets/rspec.css +136 -0
  148. data/story_server/prototype/stylesheets/test.css +90 -0
  149. metadata +166 -166
  150. data/README +0 -36
  151. data/UPGRADE +0 -7
  152. data/bin/spec_translator +0 -8
  153. data/lib/spec/mocks/argument_constraint_matchers.rb +0 -31
  154. data/lib/spec/translator.rb +0 -114
  155. data/spec/spec/example/example_spec.rb +0 -53
  156. data/spec/spec/runner/execution_context_spec.rb +0 -37
  157. data/spec/spec/translator_spec.rb +0 -265
@@ -0,0 +1,403 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ TODO.txt
6
+ bin/autospec
7
+ bin/spec
8
+ examples/pure/autogenerated_docstrings_example.rb
9
+ examples/pure/before_and_after_example.rb
10
+ examples/pure/behave_as_example.rb
11
+ examples/pure/custom_expectation_matchers.rb
12
+ examples/pure/custom_formatter.rb
13
+ examples/pure/dynamic_spec.rb
14
+ examples/pure/file_accessor.rb
15
+ examples/pure/file_accessor_spec.rb
16
+ examples/pure/greeter_spec.rb
17
+ examples/pure/helper_method_example.rb
18
+ examples/pure/io_processor.rb
19
+ examples/pure/io_processor_spec.rb
20
+ examples/pure/legacy_spec.rb
21
+ examples/pure/mocking_example.rb
22
+ examples/pure/multi_threaded_behaviour_runner.rb
23
+ examples/pure/nested_classes_example.rb
24
+ examples/pure/partial_mock_example.rb
25
+ examples/pure/pending_example.rb
26
+ examples/pure/predicate_example.rb
27
+ examples/pure/priority.txt
28
+ examples/pure/shared_example_group_example.rb
29
+ examples/pure/shared_stack_examples.rb
30
+ examples/pure/spec_helper.rb
31
+ examples/pure/stack.rb
32
+ examples/pure/stack_spec.rb
33
+ examples/pure/stack_spec_with_nested_example_groups.rb
34
+ examples/pure/stubbing_example.rb
35
+ examples/pure/yielding_example.rb
36
+ examples/stories/adder.rb
37
+ examples/stories/addition
38
+ examples/stories/addition.rb
39
+ examples/stories/calculator.rb
40
+ examples/stories/game-of-life/.loadpath
41
+ examples/stories/game-of-life/README.txt
42
+ examples/stories/game-of-life/behaviour/everything.rb
43
+ examples/stories/game-of-life/behaviour/examples/examples.rb
44
+ examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
45
+ examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
46
+ examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
47
+ examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
48
+ examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
49
+ examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
50
+ examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
51
+ examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
52
+ examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
53
+ examples/stories/game-of-life/behaviour/stories/helper.rb
54
+ examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
55
+ examples/stories/game-of-life/behaviour/stories/steps.rb
56
+ examples/stories/game-of-life/behaviour/stories/stories.rb
57
+ examples/stories/game-of-life/behaviour/stories/stories.txt
58
+ examples/stories/game-of-life/life.rb
59
+ examples/stories/game-of-life/life/game.rb
60
+ examples/stories/game-of-life/life/grid.rb
61
+ examples/stories/helper.rb
62
+ examples/stories/steps/addition_steps.rb
63
+ failing_examples/README.txt
64
+ failing_examples/diffing_spec.rb
65
+ failing_examples/failing_autogenerated_docstrings_example.rb
66
+ failing_examples/failure_in_setup.rb
67
+ failing_examples/failure_in_teardown.rb
68
+ failing_examples/mocking_example.rb
69
+ failing_examples/mocking_with_flexmock.rb
70
+ failing_examples/mocking_with_mocha.rb
71
+ failing_examples/mocking_with_rr.rb
72
+ failing_examples/partial_mock_example.rb
73
+ failing_examples/predicate_example.rb
74
+ failing_examples/raising_example.rb
75
+ failing_examples/spec_helper.rb
76
+ failing_examples/syntax_error_example.rb
77
+ failing_examples/team_spec.rb
78
+ failing_examples/timeout_behaviour.rb
79
+ init.rb
80
+ lib/autotest/discover.rb
81
+ lib/autotest/rspec.rb
82
+ lib/spec.rb
83
+ lib/spec/adapters.rb
84
+ lib/spec/adapters/ruby_engine.rb
85
+ lib/spec/adapters/ruby_engine/mri.rb
86
+ lib/spec/adapters/ruby_engine/rubinius.rb
87
+ lib/spec/example.rb
88
+ lib/spec/example/configuration.rb
89
+ lib/spec/example/errors.rb
90
+ lib/spec/example/example_group.rb
91
+ lib/spec/example/example_group_factory.rb
92
+ lib/spec/example/example_group_methods.rb
93
+ lib/spec/example/example_matcher.rb
94
+ lib/spec/example/example_methods.rb
95
+ lib/spec/example/module_inclusion_warnings.rb
96
+ lib/spec/example/module_reopening_fix.rb
97
+ lib/spec/example/pending.rb
98
+ lib/spec/example/shared_example_group.rb
99
+ lib/spec/expectations.rb
100
+ lib/spec/expectations/differs/default.rb
101
+ lib/spec/expectations/errors.rb
102
+ lib/spec/expectations/extensions.rb
103
+ lib/spec/expectations/extensions/object.rb
104
+ lib/spec/expectations/extensions/string_and_symbol.rb
105
+ lib/spec/expectations/handler.rb
106
+ lib/spec/extensions.rb
107
+ lib/spec/extensions/class.rb
108
+ lib/spec/extensions/main.rb
109
+ lib/spec/extensions/metaclass.rb
110
+ lib/spec/extensions/object.rb
111
+ lib/spec/interop/test.rb
112
+ lib/spec/interop/test/unit/autorunner.rb
113
+ lib/spec/interop/test/unit/testcase.rb
114
+ lib/spec/interop/test/unit/testresult.rb
115
+ lib/spec/interop/test/unit/testsuite_adapter.rb
116
+ lib/spec/interop/test/unit/ui/console/testrunner.rb
117
+ lib/spec/matchers.rb
118
+ lib/spec/matchers/be.rb
119
+ lib/spec/matchers/be_close.rb
120
+ lib/spec/matchers/change.rb
121
+ lib/spec/matchers/eql.rb
122
+ lib/spec/matchers/equal.rb
123
+ lib/spec/matchers/exist.rb
124
+ lib/spec/matchers/has.rb
125
+ lib/spec/matchers/have.rb
126
+ lib/spec/matchers/include.rb
127
+ lib/spec/matchers/match.rb
128
+ lib/spec/matchers/operator_matcher.rb
129
+ lib/spec/matchers/raise_error.rb
130
+ lib/spec/matchers/respond_to.rb
131
+ lib/spec/matchers/satisfy.rb
132
+ lib/spec/matchers/simple_matcher.rb
133
+ lib/spec/matchers/throw_symbol.rb
134
+ lib/spec/mocks.rb
135
+ lib/spec/mocks/argument_constraints.rb
136
+ lib/spec/mocks/argument_expectation.rb
137
+ lib/spec/mocks/error_generator.rb
138
+ lib/spec/mocks/errors.rb
139
+ lib/spec/mocks/extensions.rb
140
+ lib/spec/mocks/extensions/object.rb
141
+ lib/spec/mocks/framework.rb
142
+ lib/spec/mocks/message_expectation.rb
143
+ lib/spec/mocks/methods.rb
144
+ lib/spec/mocks/mock.rb
145
+ lib/spec/mocks/order_group.rb
146
+ lib/spec/mocks/proxy.rb
147
+ lib/spec/mocks/space.rb
148
+ lib/spec/mocks/spec_methods.rb
149
+ lib/spec/rake/spectask.rb
150
+ lib/spec/rake/verify_rcov.rb
151
+ lib/spec/runner.rb
152
+ lib/spec/runner/backtrace_tweaker.rb
153
+ lib/spec/runner/class_and_arguments_parser.rb
154
+ lib/spec/runner/command_line.rb
155
+ lib/spec/runner/drb_command_line.rb
156
+ lib/spec/runner/example_group_runner.rb
157
+ lib/spec/runner/formatter/base_formatter.rb
158
+ lib/spec/runner/formatter/base_text_formatter.rb
159
+ lib/spec/runner/formatter/failing_example_groups_formatter.rb
160
+ lib/spec/runner/formatter/failing_examples_formatter.rb
161
+ lib/spec/runner/formatter/html_formatter.rb
162
+ lib/spec/runner/formatter/nested_text_formatter.rb
163
+ lib/spec/runner/formatter/profile_formatter.rb
164
+ lib/spec/runner/formatter/progress_bar_formatter.rb
165
+ lib/spec/runner/formatter/snippet_extractor.rb
166
+ lib/spec/runner/formatter/specdoc_formatter.rb
167
+ lib/spec/runner/formatter/story/html_formatter.rb
168
+ lib/spec/runner/formatter/story/plain_text_formatter.rb
169
+ lib/spec/runner/formatter/story/progress_bar_formatter.rb
170
+ lib/spec/runner/formatter/text_mate_formatter.rb
171
+ lib/spec/runner/heckle_runner.rb
172
+ lib/spec/runner/heckle_runner_unsupported.rb
173
+ lib/spec/runner/option_parser.rb
174
+ lib/spec/runner/options.rb
175
+ lib/spec/runner/reporter.rb
176
+ lib/spec/runner/spec_parser.rb
177
+ lib/spec/story.rb
178
+ lib/spec/story/extensions.rb
179
+ lib/spec/story/extensions/main.rb
180
+ lib/spec/story/extensions/regexp.rb
181
+ lib/spec/story/extensions/string.rb
182
+ lib/spec/story/given_scenario.rb
183
+ lib/spec/story/runner.rb
184
+ lib/spec/story/runner/plain_text_story_runner.rb
185
+ lib/spec/story/runner/scenario_collector.rb
186
+ lib/spec/story/runner/scenario_runner.rb
187
+ lib/spec/story/runner/story_mediator.rb
188
+ lib/spec/story/runner/story_parser.rb
189
+ lib/spec/story/runner/story_runner.rb
190
+ lib/spec/story/scenario.rb
191
+ lib/spec/story/step.rb
192
+ lib/spec/story/step_group.rb
193
+ lib/spec/story/step_mother.rb
194
+ lib/spec/story/story.rb
195
+ lib/spec/story/world.rb
196
+ lib/spec/version.rb
197
+ plugins/mock_frameworks/flexmock.rb
198
+ plugins/mock_frameworks/mocha.rb
199
+ plugins/mock_frameworks/rr.rb
200
+ plugins/mock_frameworks/rspec.rb
201
+ rake_tasks/examples.rake
202
+ rake_tasks/examples_with_rcov.rake
203
+ rake_tasks/failing_examples_with_html.rake
204
+ rake_tasks/verify_rcov.rake
205
+ rspec.gemspec
206
+ spec/README.jruby
207
+ spec/autotest/discover_spec.rb
208
+ spec/autotest/rspec_spec.rb
209
+ spec/autotest_helper.rb
210
+ spec/autotest_matchers.rb
211
+ spec/rspec_suite.rb
212
+ spec/ruby_forker.rb
213
+ spec/spec.opts
214
+ spec/spec/adapters/ruby_engine_spec.rb
215
+ spec/spec/example/base_formatter_spec.rb
216
+ spec/spec/example/configuration_spec.rb
217
+ spec/spec/example/example_group/described_module_spec.rb
218
+ spec/spec/example/example_group/warning_messages_spec.rb
219
+ spec/spec/example/example_group_class_definition_spec.rb
220
+ spec/spec/example/example_group_factory_spec.rb
221
+ spec/spec/example/example_group_methods_spec.rb
222
+ spec/spec/example/example_group_spec.rb
223
+ spec/spec/example/example_matcher_spec.rb
224
+ spec/spec/example/example_methods_spec.rb
225
+ spec/spec/example/example_runner_spec.rb
226
+ spec/spec/example/nested_example_group_spec.rb
227
+ spec/spec/example/pending_module_spec.rb
228
+ spec/spec/example/predicate_matcher_spec.rb
229
+ spec/spec/example/shared_example_group_spec.rb
230
+ spec/spec/example/subclassing_example_group_spec.rb
231
+ spec/spec/expectations/differs/default_spec.rb
232
+ spec/spec/expectations/extensions/object_spec.rb
233
+ spec/spec/expectations/fail_with_spec.rb
234
+ spec/spec/extensions/main_spec.rb
235
+ spec/spec/interop/test/unit/resources/spec_that_fails.rb
236
+ spec/spec/interop/test/unit/resources/spec_that_passes.rb
237
+ spec/spec/interop/test/unit/resources/spec_with_errors.rb
238
+ spec/spec/interop/test/unit/resources/test_case_that_fails.rb
239
+ spec/spec/interop/test/unit/resources/test_case_that_passes.rb
240
+ spec/spec/interop/test/unit/resources/test_case_with_errors.rb
241
+ spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
242
+ spec/spec/interop/test/unit/spec_spec.rb
243
+ spec/spec/interop/test/unit/test_unit_spec_helper.rb
244
+ spec/spec/interop/test/unit/testcase_spec.rb
245
+ spec/spec/interop/test/unit/testsuite_adapter_spec.rb
246
+ spec/spec/matchers/be_close_spec.rb
247
+ spec/spec/matchers/be_spec.rb
248
+ spec/spec/matchers/change_spec.rb
249
+ spec/spec/matchers/description_generation_spec.rb
250
+ spec/spec/matchers/eql_spec.rb
251
+ spec/spec/matchers/equal_spec.rb
252
+ spec/spec/matchers/exist_spec.rb
253
+ spec/spec/matchers/handler_spec.rb
254
+ spec/spec/matchers/has_spec.rb
255
+ spec/spec/matchers/have_spec.rb
256
+ spec/spec/matchers/include_spec.rb
257
+ spec/spec/matchers/match_spec.rb
258
+ spec/spec/matchers/matcher_methods_spec.rb
259
+ spec/spec/matchers/mock_constraint_matchers_spec.rb
260
+ spec/spec/matchers/operator_matcher_spec.rb
261
+ spec/spec/matchers/raise_error_spec.rb
262
+ spec/spec/matchers/respond_to_spec.rb
263
+ spec/spec/matchers/satisfy_spec.rb
264
+ spec/spec/matchers/simple_matcher_spec.rb
265
+ spec/spec/matchers/throw_symbol_spec.rb
266
+ spec/spec/mocks/any_number_of_times_spec.rb
267
+ spec/spec/mocks/argument_expectation_spec.rb
268
+ spec/spec/mocks/at_least_spec.rb
269
+ spec/spec/mocks/at_most_spec.rb
270
+ spec/spec/mocks/bug_report_10260_spec.rb
271
+ spec/spec/mocks/bug_report_10263_spec.rb
272
+ spec/spec/mocks/bug_report_11545_spec.rb
273
+ spec/spec/mocks/bug_report_15719_spec.rb
274
+ spec/spec/mocks/bug_report_496.rb
275
+ spec/spec/mocks/bug_report_7611_spec.rb
276
+ spec/spec/mocks/bug_report_7805_spec.rb
277
+ spec/spec/mocks/bug_report_8165_spec.rb
278
+ spec/spec/mocks/bug_report_8302_spec.rb
279
+ spec/spec/mocks/failing_mock_argument_constraints_spec.rb
280
+ spec/spec/mocks/hash_including_matcher_spec.rb
281
+ spec/spec/mocks/mock_ordering_spec.rb
282
+ spec/spec/mocks/mock_space_spec.rb
283
+ spec/spec/mocks/mock_spec.rb
284
+ spec/spec/mocks/multiple_return_value_spec.rb
285
+ spec/spec/mocks/nil_expectation_warning_spec.rb
286
+ spec/spec/mocks/null_object_mock_spec.rb
287
+ spec/spec/mocks/once_counts_spec.rb
288
+ spec/spec/mocks/options_hash_spec.rb
289
+ spec/spec/mocks/partial_mock_spec.rb
290
+ spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
291
+ spec/spec/mocks/passing_mock_argument_constraints_spec.rb
292
+ spec/spec/mocks/precise_counts_spec.rb
293
+ spec/spec/mocks/record_messages_spec.rb
294
+ spec/spec/mocks/stub_spec.rb
295
+ spec/spec/mocks/twice_counts_spec.rb
296
+ spec/spec/package/bin_spec_spec.rb
297
+ spec/spec/runner/class_and_argument_parser_spec.rb
298
+ spec/spec/runner/command_line_spec.rb
299
+ spec/spec/runner/drb_command_line_spec.rb
300
+ spec/spec/runner/empty_file.txt
301
+ spec/spec/runner/examples.txt
302
+ spec/spec/runner/failed.txt
303
+ spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
304
+ spec/spec/runner/formatter/failing_examples_formatter_spec.rb
305
+ spec/spec/runner/formatter/html_formatted-1.8.4.html
306
+ spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
307
+ spec/spec/runner/formatter/html_formatted-1.8.5.html
308
+ spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
309
+ spec/spec/runner/formatter/html_formatted-1.8.6.html
310
+ spec/spec/runner/formatter/html_formatter_spec.rb
311
+ spec/spec/runner/formatter/nested_text_formatter_spec.rb
312
+ spec/spec/runner/formatter/profile_formatter_spec.rb
313
+ spec/spec/runner/formatter/progress_bar_formatter_spec.rb
314
+ spec/spec/runner/formatter/snippet_extractor_spec.rb
315
+ spec/spec/runner/formatter/spec_mate_formatter_spec.rb
316
+ spec/spec/runner/formatter/specdoc_formatter_spec.rb
317
+ spec/spec/runner/formatter/story/html_formatter_spec.rb
318
+ spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
319
+ spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb
320
+ spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
321
+ spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
322
+ spec/spec/runner/heckle_runner_spec.rb
323
+ spec/spec/runner/heckler_spec.rb
324
+ spec/spec/runner/noisy_backtrace_tweaker_spec.rb
325
+ spec/spec/runner/option_parser_spec.rb
326
+ spec/spec/runner/options_spec.rb
327
+ spec/spec/runner/output_one_time_fixture.rb
328
+ spec/spec/runner/output_one_time_fixture_runner.rb
329
+ spec/spec/runner/output_one_time_spec.rb
330
+ spec/spec/runner/quiet_backtrace_tweaker_spec.rb
331
+ spec/spec/runner/reporter_spec.rb
332
+ spec/spec/runner/resources/a_bar.rb
333
+ spec/spec/runner/resources/a_foo.rb
334
+ spec/spec/runner/resources/a_spec.rb
335
+ spec/spec/runner/spec.opts
336
+ spec/spec/runner/spec_drb.opts
337
+ spec/spec/runner/spec_parser/spec_parser_fixture.rb
338
+ spec/spec/runner/spec_parser_spec.rb
339
+ spec/spec/runner/spec_spaced.opts
340
+ spec/spec/runner_spec.rb
341
+ spec/spec/spec_classes.rb
342
+ spec/spec/story/builders.rb
343
+ spec/spec/story/extensions/main_spec.rb
344
+ spec/spec/story/extensions_spec.rb
345
+ spec/spec/story/given_scenario_spec.rb
346
+ spec/spec/story/runner/plain_text_story_runner_spec.rb
347
+ spec/spec/story/runner/scenario_collector_spec.rb
348
+ spec/spec/story/runner/scenario_runner_spec.rb
349
+ spec/spec/story/runner/story_mediator_spec.rb
350
+ spec/spec/story/runner/story_parser_spec.rb
351
+ spec/spec/story/runner/story_runner_spec.rb
352
+ spec/spec/story/runner_spec.rb
353
+ spec/spec/story/scenario_spec.rb
354
+ spec/spec/story/step_group_spec.rb
355
+ spec/spec/story/step_mother_spec.rb
356
+ spec/spec/story/step_spec.rb
357
+ spec/spec/story/story_helper.rb
358
+ spec/spec/story/story_spec.rb
359
+ spec/spec/story/world_spec.rb
360
+ spec/spec_helper.rb
361
+ stories/all.rb
362
+ stories/configuration/before_blocks.story
363
+ stories/configuration/stories.rb
364
+ stories/example_groups/autogenerated_docstrings
365
+ stories/example_groups/example_group_with_should_methods
366
+ stories/example_groups/nested_groups
367
+ stories/example_groups/output
368
+ stories/example_groups/stories.rb
369
+ stories/helper.rb
370
+ stories/interop/examples_and_tests_together
371
+ stories/interop/stories.rb
372
+ stories/interop/test_case_with_should_methods
373
+ stories/mock_framework_integration/stories.rb
374
+ stories/mock_framework_integration/use_flexmock.story
375
+ stories/pending_stories/README
376
+ stories/resources/helpers/cmdline.rb
377
+ stories/resources/helpers/story_helper.rb
378
+ stories/resources/matchers/smart_match.rb
379
+ stories/resources/spec/before_blocks_example.rb
380
+ stories/resources/spec/example_group_with_should_methods.rb
381
+ stories/resources/spec/simple_spec.rb
382
+ stories/resources/spec/spec_with_flexmock.rb
383
+ stories/resources/steps/running_rspec.rb
384
+ stories/resources/stories/failing_story.rb
385
+ stories/resources/test/spec_and_test_together.rb
386
+ stories/resources/test/test_case_with_should_methods.rb
387
+ stories/stories/multiline_steps.story
388
+ stories/stories/steps/multiline_steps.rb
389
+ stories/stories/stories.rb
390
+ story_server/prototype/javascripts/builder.js
391
+ story_server/prototype/javascripts/controls.js
392
+ story_server/prototype/javascripts/dragdrop.js
393
+ story_server/prototype/javascripts/effects.js
394
+ story_server/prototype/javascripts/prototype.js
395
+ story_server/prototype/javascripts/rspec.js
396
+ story_server/prototype/javascripts/scriptaculous.js
397
+ story_server/prototype/javascripts/slider.js
398
+ story_server/prototype/javascripts/sound.js
399
+ story_server/prototype/javascripts/unittest.js
400
+ story_server/prototype/lib/server.rb
401
+ story_server/prototype/stories.html
402
+ story_server/prototype/stylesheets/rspec.css
403
+ story_server/prototype/stylesheets/test.css
@@ -1,3 +1,46 @@
1
+ = RSpec
2
+
3
+ * http://rspec.info
4
+ * http://rspec.info/rdoc/
5
+ * http://github.com/dchelimsky/rspec/wikis
6
+ * mailto:rspec-devel@rubyforge.org
7
+
8
+ == DESCRIPTION:
9
+
10
+ RSpec is a Behaviour Driven Development framework with tools to express User
11
+ Stories with Executable Scenarios and Executable Examples at the code level.
12
+
13
+ == FEATURES:
14
+
15
+ * Spec::Story provides a framework for expressing User Stories and Scenarios
16
+ * Spec::Example provides a framework for expressing Isolated Examples
17
+ * Spec::Matchers provides Expression Matchers for use with Spec::Expectations and Spec::Mocks.
18
+
19
+ == SYNOPSIS:
20
+
21
+ Spec::Expectations supports setting expectations on your objects so you
22
+ can do things like:
23
+
24
+ result.should equal(expected_result)
25
+
26
+ Spec::Mocks supports creating Mock Objects, Stubs, and adding Mock/Stub
27
+ behaviour to your existing objects.
28
+
29
+ == INSTALL:
30
+
31
+ [sudo] gem install rspec
32
+
33
+ or
34
+
35
+ git clone git://github.com/dchelimsky/rspec.git
36
+ cd rspec
37
+ rake gem
38
+ rake install_gem
39
+
40
+ == LICENSE:
41
+
42
+ (The MIT License)
43
+
1
44
  Copyright (c) 2005-2008 The RSpec Development Team
2
45
 
3
46
  Permission is hereby granted, free of charge, to any person obtaining
data/Rakefile CHANGED
@@ -1,105 +1,60 @@
1
- $:.unshift('lib')
1
+ # -*- ruby -*-
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
4
  require 'rubygems'
3
- require 'rake/gempackagetask'
4
- require 'rake/contrib/rubyforgepublisher'
5
- require 'rake/clean'
6
- require 'rake/rdoctask'
7
- require 'rake/testtask'
5
+ require 'hoe'
8
6
  require 'spec/version'
9
- dir = File.dirname(__FILE__)
7
+ require 'spec/rake/spectask'
8
+
9
+ class Hoe
10
+ def extra_deps
11
+ @extra_deps.reject! { |x| Array(x).first == 'hoe' }
12
+ @extra_deps
13
+ end
14
+ end
15
+
16
+ Hoe.new('rspec', Spec::VERSION::STRING) do |p|
17
+ p.summary = Spec::VERSION::SUMMARY
18
+ p.url = 'http://rspec.info/'
19
+ p.description = "Behaviour Driven Development for Ruby."
20
+ p.rubyforge_name = 'rspec'
21
+ p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
22
+ p.spec_extras = { :to_ruby => lambda { |str| File.open("rspec.gemspec", "w+"){ |f| f.puts str } } }
23
+ end
24
+
25
+ ['audit','test','test_deps','default','publish_docs','post_blog'].each do |task|
26
+ Rake.application.instance_variable_get('@tasks').delete(task)
27
+ end
28
+
29
+ task :verify_rcov => [:spec, :stories]
30
+ task :default => :verify_rcov
10
31
 
11
- # Some of the tasks are in separate files since they are also part of the website documentation
32
+ # # Some of the tasks are in separate files since they are also part of the website documentation
12
33
  load File.dirname(__FILE__) + '/rake_tasks/examples.rake'
13
34
  load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake'
14
35
  load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake'
15
36
  load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake'
16
37
 
17
- PKG_NAME = "rspec"
18
- PKG_VERSION = Spec::VERSION::STRING
19
- PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
20
- PKG_FILES = FileList[
21
- '[A-Z]*',
22
- 'lib/**/*.rb',
23
- 'spec/**/*',
24
- 'examples/**/*',
25
- 'failing_examples/**/*',
26
- 'plugins/**/*',
27
- 'stories/**/*',
28
- 'rake_tasks/**/*'
29
- ]
30
-
31
- task :default => [:verify_rcov]
32
- task :verify_rcov => [:spec, :stories]
33
-
34
38
  desc "Run all specs"
35
39
  Spec::Rake::SpecTask.new do |t|
36
40
  t.spec_files = FileList['spec/**/*_spec.rb']
37
41
  t.spec_opts = ['--options', 'spec/spec.opts']
38
42
  unless ENV['NO_RCOV']
39
43
  t.rcov = true
40
- t.rcov_dir = '../doc/output/coverage'
41
- t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest']
44
+ t.rcov_dir = 'coverage'
45
+ t.rcov_opts = ['--exclude', "lib/spec.rb,lib/spec/runner.rb,spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
42
46
  end
43
47
  end
44
48
 
45
49
  desc "Run all stories"
46
50
  task :stories do
47
- html = 'story_server/prototype/rspec_stories.html'
48
- ruby "stories/all.rb --colour --format plain --format html:#{html}"
49
- unless IO.read(html) =~ /<span class="param">/m
50
- raise 'highlighted parameters are broken in story HTML'
51
- end
51
+ ruby "stories/all.rb --colour --format plain"
52
52
  end
53
53
 
54
- desc "Run all specs and store html output in doc/output/report.html"
55
- Spec::Rake::SpecTask.new('spec_html') do |t|
56
- t.spec_files = FileList['spec/**/*_spec.rb']
57
- t.spec_opts = ['--format html:../../../../doc/output/report.html', '--format progress','--backtrace']
58
- end
59
-
60
- desc "Run all failing examples"
54
+ desc "Run failing examples (see failure output)"
61
55
  Spec::Rake::SpecTask.new('failing_examples') do |t|
62
56
  t.spec_files = FileList['failing_examples/**/*_spec.rb']
63
- end
64
-
65
- desc 'Generate RDoc'
66
- rd = Rake::RDocTask.new do |rdoc|
67
- rdoc.rdoc_dir = '../doc/output/rdoc'
68
- rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README'
69
- rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'UPGRADE', 'lib/**/*.rb')
70
- end
71
-
72
- spec = Gem::Specification.new do |s|
73
- s.name = PKG_NAME
74
- s.version = PKG_VERSION
75
- s.summary = Spec::VERSION::DESCRIPTION
76
- s.description = <<-EOF
77
- RSpec is a behaviour driven development (BDD) framework for Ruby. RSpec was
78
- created in response to Dave Astels' article _A New Look at Test Driven Development_
79
- which can be read at: http://daveastels.com/index.php?p=5 RSpec is intended to
80
- provide the features discussed in Dave's article.
81
- EOF
82
-
83
- s.files = PKG_FILES.to_a
84
- s.require_path = 'lib'
85
-
86
- s.has_rdoc = true
87
- s.rdoc_options = rd.options
88
- s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
89
-
90
- s.bindir = 'bin'
91
- s.executables = ['spec', 'spec_translator']
92
- s.default_executable = 'spec'
93
- s.author = "RSpec Development Team"
94
- s.email = "rspec-devel@rubyforge.org"
95
- s.homepage = "http://rspec.rubyforge.org"
96
- s.platform = Gem::Platform::RUBY
97
- s.rubyforge_project = "rspec"
98
- end
99
-
100
- Rake::GemPackageTask.new(spec) do |pkg|
101
- pkg.need_zip = true
102
- pkg.need_tar = true
57
+ t.spec_opts = ['--options', 'spec/spec.opts']
103
58
  end
104
59
 
105
60
  def egrep(pattern)
@@ -121,142 +76,14 @@ task :todo do
121
76
  egrep /(FIXME|TODO|TBD)/
122
77
  end
123
78
 
124
- task :release => [:verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news]
79
+ desc "verify_committed, verify_rcov, post_news, release"
80
+ task :complete_release => [:verify_committed, :verify_rcov, :post_news, :release]
125
81
 
126
82
  desc "Verifies that there is no uncommitted code"
127
83
  task :verify_committed do
128
- # IO.popen('git status') do |io|
129
- # io.each_line do |line|
130
- # raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/
131
- # end
132
- # end
133
- end
134
-
135
- desc "Creates a tag in svn"
136
- task :tag do
137
- # from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1]
138
- # to = from.gsub(/trunk/, "tags/#{Spec::VERSION::TAG}")
139
- # current = from.gsub(/trunk/, "tags/CURRENT")
140
- #
141
- # puts "Creating tag in SVN"
142
- # tag_cmd = "svn cp #{from} #{to} -m \"Tag release #{Spec::VERSION::FULL_VERSION}\""
143
- # `#{tag_cmd}` ; raise "ERROR: #{tag_cmd}" unless $? == 0
144
- #
145
- # puts "Removing CURRENT"
146
- # remove_current_cmd = "svn rm #{current} -m \"Remove tags/CURRENT\""
147
- # `#{remove_current_cmd}` ; raise "ERROR: #{remove_current_cmd}" unless $? == 0
148
- #
149
- # puts "Re-Creating CURRENT"
150
- # create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\""
151
- # `#{create_current_cmd}` ; "ERROR: #{create_current_cmd}" unless $? == 0
152
- end
153
-
154
- task :verify_user do
155
- raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
156
- end
157
-
158
- desc "Upload Website to RubyForge"
159
- task :publish_website => [:verify_user, :website] do
160
- unless Spec::VERSION::RELEASE_CANDIDATE
161
- publisher = Rake::SshDirPublisher.new(
162
- "rspec-website@rubyforge.org",
163
- "/var/www/gforge-projects/#{PKG_NAME}",
164
- "../doc/output"
165
- )
166
- publisher.upload
167
- else
168
- puts "** Not publishing packages to RubyForge - this is a prerelease"
169
- end
170
- end
171
-
172
- desc "Upload Website archive to RubyForge"
173
- task :archive_website => [:verify_user, :website] do
174
- publisher = Rake::SshDirPublisher.new(
175
- "rspec-website@rubyforge.org",
176
- "/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}",
177
- "../doc/output"
178
- )
179
- publisher.upload
180
- end
181
-
182
- desc "Package the Rails plugin"
183
- task :package_rspec_on_rails do
184
- mkdir 'pkg' rescue nil
185
- rm_rf "pkg/rspec-rails-#{PKG_VERSION}" rescue nil
186
- `git clone ../rspec-rails pkg/rspec-rails-#{PKG_VERSION}`
187
- rm_rf "pkg/rspec-rails-#{PKG_VERSION}/.git"
188
- Dir.chdir 'pkg' do
189
- `tar cvzf rspec-rails-#{PKG_VERSION}.tgz rspec-rails-#{PKG_VERSION}`
190
- end
191
- end
192
- task :pkg => :package_rspec_on_rails
193
-
194
- desc "Package the RSpec.tmbundle"
195
- task :package_tmbundle do
196
- mkdir 'pkg' rescue nil
197
- rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle" rescue nil
198
- `git clone ../../../../RSpec.tmbundle pkg/RSpec-#{PKG_VERSION}.tmbundle`
199
- rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle/.git"
200
- Dir.chdir 'pkg' do
201
- `tar cvzf RSpec-#{PKG_VERSION}.tmbundle.tgz RSpec-#{PKG_VERSION}.tmbundle`
202
- end
203
- end
204
- task :pkg => :package_tmbundle
205
-
206
- desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file"
207
- task :publish_packages => [:verify_user, :package, :pkg] do
208
- release_files = FileList[
209
- "pkg/#{PKG_FILE_NAME}.gem",
210
- "pkg/#{PKG_FILE_NAME}.tgz",
211
- "pkg/rspec-rails-#{PKG_VERSION}.tgz",
212
- "pkg/#{PKG_FILE_NAME}.zip",
213
- "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz"
214
- ]
215
- unless Spec::VERSION::RELEASE_CANDIDATE
216
- require 'meta_project'
217
- require 'rake/contrib/xforge'
218
-
219
- Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf|
220
- # Never hardcode user name and password in the Rakefile!
221
- xf.user_name = ENV['RUBYFORGE_USER']
222
- xf.files = release_files.to_a
223
- xf.release_name = "RSpec #{PKG_VERSION}"
224
- end
225
- else
226
- puts "SINCE THIS IS A PRERELEASE, FILES ARE UPLOADED WITH SSH, NOT TO THE RUBYFORGE FILE SECTION"
227
- puts "YOU MUST TYPE THE PASSWORD #{release_files.length} TIMES..."
228
-
229
- host = "rspec-website@rubyforge.org"
230
- remote_dir = "/var/www/gforge-projects/#{PKG_NAME}"
231
-
232
- publisher = Rake::SshFilePublisher.new(
233
- host,
234
- remote_dir,
235
- File.dirname(__FILE__),
236
- *release_files
237
- )
238
- publisher.upload
239
-
240
- puts "UPLADED THE FOLLOWING FILES:"
241
- release_files.each do |file|
242
- name = file.match(/pkg\/(.*)/)[1]
243
- puts "* http://rspec.rubyforge.org/#{name}"
244
- end
245
-
246
- puts "They are not linked to anywhere, so don't forget to tell people!"
247
- end
248
- end
249
-
250
- desc "Publish news on RubyForge"
251
- task :publish_news => [:verify_user] do
252
- unless Spec::VERSION::RELEASE_CANDIDATE
253
- require 'meta_project'
254
- require 'rake/contrib/xforge'
255
- Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
256
- # Never hardcode user name and password in the Rakefile!
257
- news.user_name = ENV['RUBYFORGE_USER']
84
+ IO.popen('git status') do |io|
85
+ io.each_line do |line|
86
+ raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/
258
87
  end
259
- else
260
- puts "** Not publishing news to RubyForge - this is a prerelease"
261
88
  end
262
89
  end