test_launcher 1.5.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +81 -37
  3. data/lib/test_launcher/cli.rb +1 -3
  4. data/lib/test_launcher/cli/input_parser.rb +10 -6
  5. data/lib/test_launcher/frameworks/base.rb +11 -0
  6. data/lib/test_launcher/frameworks/{elixir.rb → ex_unit.rb} +16 -20
  7. data/lib/test_launcher/frameworks/minitest.rb +29 -17
  8. data/lib/test_launcher/frameworks/rspec.rb +14 -7
  9. data/lib/test_launcher/queries.rb +47 -31
  10. data/lib/test_launcher/shell/runner.rb +2 -1
  11. data/lib/test_launcher/version.rb +1 -1
  12. data/test/test_helpers/integration_helper.rb +6 -13
  13. data/test/test_helpers/mocks.rb +1 -0
  14. data/test/test_helpers/mocks/searcher_mock.rb +3 -1
  15. data/test/test_launcher/ex_unit_integration_test.rb +392 -0
  16. data/test/test_launcher/fixtures/minitest/test/class_1_test.rb +4 -15
  17. data/test/test_launcher/fixtures/minitest/test/class_2_test.rb +7 -3
  18. data/test/test_launcher/frameworks/minitest/runner_test.rb +10 -10
  19. data/test/test_launcher/frameworks/minitest/searcher_test.rb +11 -10
  20. data/test/test_launcher/frameworks/rspec/runner_test.rb +5 -5
  21. data/test/test_launcher/frameworks/rspec/searcher_test.rb +4 -4
  22. data/test/test_launcher/minitest_integration_test.rb +533 -38
  23. data/test/test_launcher/queries/example_name_query_test.rb +5 -1
  24. data/test/test_launcher/queries/line_number_query_test.rb +7 -7
  25. data/test/test_launcher/queries/multi_term_query_test.rb +0 -12
  26. data/test/test_launcher/rspec_integration_test.rb +458 -35
  27. metadata +5 -5
  28. data/test/test_launcher/queries/specified_name_query_test.rb +0 -112
@@ -78,6 +78,10 @@ module TestLauncher
78
78
  m.impl :multiple_files do |test_cases|
79
79
  "multiple_files #{test_cases.map(&:file).join(" ")}"
80
80
  end
81
+
82
+ m.impl :multiple_examples do |test_cases|
83
+ "multiple_examples #{test_cases.map(&:file).join(" ")}"
84
+ end
81
85
  end
82
86
  end
83
87
 
@@ -193,7 +197,7 @@ module TestLauncher
193
197
 
194
198
  command = ExampleNameQuery.new(request, default_command_finder).command
195
199
 
196
- assert_equal "multiple_files file_1_test.rb file_2_test.rb", command
200
+ assert_equal "multiple_examples file_1_test.rb file_2_test.rb", command
197
201
  end
198
202
 
199
203
  def test_command__multiple_examples__multiple_files__all__notifies
@@ -12,11 +12,11 @@ module TestLauncher
12
12
  m.impl :by_line do |file, line_number|
13
13
  case [file, line_number]
14
14
  when ["not_found", 1]
15
- nil
15
+ []
16
16
  when ["found", 17]
17
- {file: "found", example_name: "test_example", line_number: 14}
17
+ [{file: "found", example_name: "test_example", line_number: 14}]
18
18
  when ["found", 1]
19
- {file: "found"}
19
+ [{file: "found"}]
20
20
  when ["found", 9999]
21
21
  raise "invalid line number"
22
22
  when ["multiple", 1]
@@ -82,9 +82,9 @@ module TestLauncher
82
82
 
83
83
  command = LineNumberQuery.new(request, default_command_finder).command
84
84
 
85
- assert_equal [[whole_file_test_case]], default_runner.recall(:single_file)
85
+ assert_equal [[whole_file_test_case]], default_runner.recall(:by_line_number)
86
86
 
87
- assert_equal "single_file_return", command
87
+ assert_equal "by_line_number_return", command
88
88
  end
89
89
 
90
90
 
@@ -98,9 +98,9 @@ module TestLauncher
98
98
 
99
99
  command = LineNumberQuery.new(request, default_command_finder).command
100
100
 
101
- assert_equal [[example_name_test_case]], default_runner.recall(:single_example)
101
+ assert_equal [[example_name_test_case]], default_runner.recall(:by_line_number)
102
102
 
103
- assert_equal "single_example_return", command
103
+ assert_equal "by_line_number_return", command
104
104
  end
105
105
  end
106
106
  end
@@ -74,18 +74,6 @@ module TestLauncher
74
74
  assert_equal nil, command
75
75
  end
76
76
 
77
- def test_command__finds_files_for_0_of_2_terms__warns
78
- request = create_mock_request(
79
- search_string: "not_found not_found",
80
- shell: default_shell,
81
- runner: default_runner,
82
- searcher: searcher
83
- )
84
- command = MultiTermQuery.new(request, default_command_finder).command
85
-
86
- assert_equal 1, default_shell.recall(:warn).size
87
- end
88
-
89
77
  def test_command__finds_files_for_1_of_2_terms
90
78
  request = create_mock_request(
91
79
  search_string: "file_1 not_found",
@@ -5,65 +5,488 @@ module TestLauncher
5
5
  class RspecIntegrationTest < TestCase
6
6
  include IntegrationHelper
7
7
 
8
- def test__single_method
9
- launch("file_name_1 example_name_""1", framework: "rspec")
10
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} --example file_name_1\\ example_name_1", shell_mock.recall_exec
8
+ def launch(query, env: {}, searcher:)
9
+ query += " --framework rspec"
10
+ shell_mock.reset
11
+ CLI.launch(query.split(" "), env, shell: shell_mock, searcher: searcher)
11
12
  end
12
13
 
13
- def test__single_context
14
- launch("file_name_1 con""text_1", framework: "rspec")
15
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} --example file_name_1\\ context_1", shell_mock.recall_exec
14
+ def test__by_example__single_example
15
+ searcher = MemorySearcher.new do |searcher|
16
+ searcher.mock_file do |f|
17
+ f.path "/src/spec/class_1_spec.rb"
18
+ f.contents <<-RB
19
+ it "does a thing" do
20
+ RB
21
+ end
22
+ end
23
+
24
+ launch("thing", searcher: searcher)
25
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb --example thing", shell_mock.recall_exec
26
+
27
+ launch("does a thing", searcher: searcher)
28
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb --example does\\ a\\ thing", shell_mock.recall_exec
29
+
30
+ launch("n", searcher: searcher)
31
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb --example n", shell_mock.recall_exec
16
32
  end
17
33
 
18
- def test__single_describe
19
- launch("Root1DummyTes""tClass1", framework: "rspec")
20
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} --example Root1DummyTes""tClass1", shell_mock.recall_exec
34
+ def test__by_example__multiple_examples__same_file
35
+ searcher = MemorySearcher.new do |searcher|
36
+ searcher.mock_file do |f|
37
+ f.path "/src/spec/class_1_spec.rb"
38
+ f.contents <<-RB
39
+ it "name_1" do
40
+ it "name_2" do
41
+ end
42
+ RB
43
+ end
44
+ end
45
+
46
+ launch("name_", searcher: searcher)
47
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb --example name_", shell_mock.recall_exec
21
48
  end
22
49
 
23
- def test__multiple_methods__same_file
24
- launch("file_name_1", framework: "rspec")
25
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} --example file_name_1", shell_mock.recall_exec
50
+ def test__by_example__multiple_methods__different_files
51
+ searcher = MemorySearcher.new do |searcher|
52
+ searcher.mock_file do |f|
53
+ f.path "/src/spec/class_1_spec.rb"
54
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
55
+ f.contents <<-RB
56
+ it "test_name_1" do
57
+ it "test_name_2" do
58
+ RB
59
+ end
60
+
61
+ searcher.mock_file do |f|
62
+ f.path "/src/spec/class_2_spec.rb"
63
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
64
+ f.contents <<-RB
65
+ it "test_name_1" do
66
+ it "test_name_2" do
67
+ RB
68
+ end
69
+
70
+ searcher.mock_file do |f|
71
+ f.path "/src/spec/class_3_spec.rb"
72
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
73
+ f.contents <<-RB
74
+ it "test_name_2" do
75
+ RB
76
+ end
77
+ end
78
+
79
+ launch("name_1", searcher: searcher)
80
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_2_spec.rb --example name_1", shell_mock.recall_exec
81
+
82
+ launch("name_2", searcher: searcher)
83
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_2_spec.rb --example name_2", shell_mock.recall_exec
84
+
85
+ launch("name_1 --all", searcher: searcher)
86
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb /src/spec/class_2_spec.rb", shell_mock.recall_exec
87
+
88
+ launch("name_2 --all", searcher: searcher)
89
+ assert_equal "cd /src && bundle exec rspec /src/spec/class_1_spec.rb /src/spec/class_2_spec.rb /src/spec/class_3_spec.rb", shell_mock.recall_exec
26
90
  end
27
91
 
28
- def test__multiple_methods__different_files
29
- launch("multiple_files same_example", framework: "rspec")
30
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")} --example multiple_files\\ same_example", shell_mock.recall_exec
92
+ def test__by_filename
93
+ searcher = MemorySearcher.new do |searcher|
94
+ searcher.mock_file do |f|
95
+ f.path "/src/spec/file_1_spec.rb"
96
+ f.contents ""
97
+ end
98
+ end
99
+
100
+ launch("file_1", searcher: searcher)
101
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
102
+
103
+ launch("file_1_spec.rb", searcher: searcher)
104
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
105
+
106
+ launch("/file_1", searcher: searcher)
107
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
108
+
109
+ launch(".rb", searcher: searcher)
110
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
111
+
112
+ launch("/src/spec/file_1", searcher: searcher)
113
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
114
+
115
+ launch("src/spec/file_1", searcher: searcher)
116
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
117
+
118
+ launch("ec/file_1", searcher: searcher)
119
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
31
120
  end
32
121
 
33
- def test__single_file
34
- launch("class_1_spec", framework: "rspec")
35
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")}", shell_mock.recall_exec
122
+ def test__by_filename__multiple_files_found
123
+ searcher = MemorySearcher.new do |searcher|
124
+ searcher.mock_file do |f|
125
+ f.path "/src/spec/file_1_spec.rb"
126
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
127
+ end
128
+
129
+ searcher.mock_file do |f|
130
+ f.path "/src/spec/file_2_spec.rb"
131
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
132
+ end
133
+
134
+ searcher.mock_file do |f|
135
+ f.path "/src/spec/file_3_spec.rb"
136
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
137
+ end
138
+
139
+ searcher.mock_file do |f|
140
+ f.path "/src/spec/other_spec.rb"
141
+ end
142
+ end
143
+
144
+ launch("file_1", searcher: searcher)
145
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb", shell_mock.recall_exec
146
+
147
+ launch("file", searcher: searcher)
148
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_2_spec.rb", shell_mock.recall_exec
149
+
150
+ launch("file --all", searcher: searcher)
151
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb /src/spec/file_3_spec.rb", shell_mock.recall_exec
36
152
  end
37
153
 
38
- def test__multiple_files__found
39
- launch("Root1", framework: "rspec") # don't trigger the find in *this* file
40
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")} --example Roo""t1", shell_mock.recall_exec
154
+ def test__by_filename__preferred_over_regex_and_test_name_matches
155
+ searcher = MemorySearcher.new do |searcher|
156
+ searcher.mock_file do |f|
157
+ f.path "/src/spec/class_1_spec.rb"
158
+ f.contents <<-RB
159
+ it "name_spec" do
160
+ RB
161
+ end
162
+
163
+ searcher.mock_file do |f|
164
+ f.path "/src/spec/name_spec.rb"
165
+ end
166
+
167
+ searcher.mock_file do |f|
168
+ f.path "/src/spec/other_spec.rb"
169
+ f.contents <<-RB
170
+ regex will match name_spec
171
+ RB
172
+ end
173
+ end
174
+
175
+ launch("name_spec", searcher: searcher)
176
+ assert_equal "cd /src && bundle exec rspec /src/spec/name_spec.rb", shell_mock.recall_exec
41
177
  end
42
178
 
43
- def test__multiple_files__found__all
44
- launch("Root1""DummyTest""Class", run_all: true, framework: "rspec") # don't trigger the find in *this* file
45
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")}", shell_mock.recall_exec
179
+ def test__by_multiple_filenames__multiple_files_found
180
+ searcher = MemorySearcher.new do |searcher|
181
+ searcher.mock_file do |f|
182
+ f.path "/src/spec/file_1_spec.rb"
183
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
184
+ f.contents ""
185
+ end
186
+
187
+ searcher.mock_file do |f|
188
+ f.path "/src/spec/file_2_spec.rb"
189
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
190
+ f.contents ""
191
+ end
192
+
193
+ searcher.mock_file do |f|
194
+ f.path "/src/spec/file_3_spec.rb"
195
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
196
+ f.contents ""
197
+ end
198
+
199
+ searcher.mock_file do |f|
200
+ f.path "/src/spec/other_tspecrb"
201
+ f.contents ""
202
+ end
203
+ end
204
+
205
+ launch("file_1 file_2", searcher: searcher)
206
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb", shell_mock.recall_exec
207
+
208
+ launch("file_1 file", searcher: searcher)
209
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb /src/spec/file_3_spec.rb", shell_mock.recall_exec
210
+
211
+ # If multiple queries are submitted but not all of them match,
212
+ # then what should we do? For now, we assume that it's only
213
+ # considered a match if each query term matches at least one
214
+ # or more files.
215
+ launch("file_1 gibberish", searcher: searcher)
216
+ assert_equal nil, shell_mock.recall_exec
46
217
  end
47
218
 
48
- def test__multiple_file_paths
49
- launch("class_1_spec.rb class_2_spec.rb", framework: "rspec") # don't trigger the find in *this* file
50
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")}", shell_mock.recall_exec
219
+ def test__by_regex__one_match
220
+ searcher = MemorySearcher.new do |searcher|
221
+ searcher.mock_file do |f|
222
+ f.path "/src/spec/file_1_spec.rb"
223
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
224
+ f.contents <<-RB
225
+ regex match 1
226
+ regex match 2
227
+ regex match 3
228
+ RB
229
+ end
230
+
231
+ searcher.mock_file do |f|
232
+ f.path "/src/spec/file_2_spec.rb"
233
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
234
+ f.contents <<-RB
235
+ regex match 1
236
+ regex match 2
237
+ RB
238
+ end
239
+
240
+ searcher.mock_file do |f|
241
+ f.path "/src/spec/file_3_spec.rb"
242
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
243
+ f.contents <<-RB
244
+ regex match 1
245
+ regex match 3
246
+ RB
247
+ end
248
+ end
249
+
250
+ launch("regex match 1", searcher: searcher)
251
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_2_spec.rb", shell_mock.recall_exec
252
+
253
+ launch("regex match 3", searcher: searcher)
254
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_3_spec.rb", shell_mock.recall_exec
255
+
256
+ launch("regex match", searcher: searcher)
257
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_2_spec.rb", shell_mock.recall_exec
258
+
259
+ launch("regex match --all", searcher: searcher)
260
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb /src/spec/file_3_spec.rb", shell_mock.recall_exec
51
261
  end
52
262
 
53
- def test__multiple_files__different_roots__all
54
- launch("DummyTest""Class", run_all: true, framework: "rspec") # don't trigger the find in *this* file
55
- expected = "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_1_spec.rb")} #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")}; cd -;\n\ncd #{system_path("test/test_launcher/fixtures/rspec/spec/different_root")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/different_root/spec/different_root_spec.rb")}"
56
- assert_equal expected, shell_mock.recall_exec
263
+ def test__by_example__preferred_over_regex
264
+ searcher = MemorySearcher.new do |searcher|
265
+ searcher.mock_file do |f|
266
+ f.path "/src/spec/file_1_spec.rb"
267
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
268
+ f.contents <<-RB
269
+ it "regex_match" do
270
+ RB
271
+ end
272
+
273
+ searcher.mock_file do |f|
274
+ f.path "/src/spec/file_2_spec.rb"
275
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
276
+ f.contents <<-RB
277
+ regex_match
278
+ RB
279
+ end
280
+ end
281
+
282
+ launch("regex_match", searcher: searcher)
283
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example regex_match", shell_mock.recall_exec
57
284
  end
58
285
 
59
- def test__regex
60
- launch("a_test_that_u""ses", framework: "rspec") # don't trigger the find in *this* file
61
- assert_equal "cd #{system_path("test/test_launcher/fixtures/rspec")} && rspec #{system_path("test/test_launcher/fixtures/rspec/spec/class_2_spec.rb")}", shell_mock.recall_exec
286
+ def test__context_blocks_are_treated_as_examples
287
+ searcher = MemorySearcher.new do |searcher|
288
+ searcher.mock_file do |f|
289
+ f.path "/src/spec/file_1_spec.rb"
290
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
291
+ f.contents <<-RB
292
+ describe "test_1" do
293
+ context "test_2" do
294
+ RSpec.describe "test_3" do
295
+ RB
296
+ end
297
+ end
298
+
299
+ launch("test_1", searcher: searcher)
300
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_1", shell_mock.recall_exec
301
+
302
+ launch("test_2", searcher: searcher)
303
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_2", shell_mock.recall_exec
304
+
305
+ launch("test_3", searcher: searcher)
306
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_3", shell_mock.recall_exec
307
+ end
308
+
309
+ def test__by_example__handles_regex_for_example_name
310
+ searcher = MemorySearcher.new do |searcher|
311
+ searcher.mock_file do |f|
312
+ f.path "/src/spec/file_1_spec.rb"
313
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
314
+ f.contents <<-RB
315
+ it "test_name_1" do
316
+ RB
317
+ end
318
+
319
+ searcher.mock_file do |f|
320
+ f.path "/src/spec/file_2_spec.rb"
321
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
322
+ f.contents <<-RB
323
+ it "test_name_2" do
324
+ RB
325
+ end
326
+ end
327
+
328
+ launch("test_name_1x?", searcher: searcher)
329
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_name_1x\\?", shell_mock.recall_exec
330
+
331
+ launch("test_name_2|test_name_1", searcher: searcher)
332
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_2_spec.rb --example test_name_2\\|test_name_1", shell_mock.recall_exec
333
+
334
+ launch('test_name_\d', searcher: searcher)
335
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_2_spec.rb --example test_name_\\\\d", shell_mock.recall_exec
336
+
337
+ launch('test_name_\d --all', searcher: searcher)
338
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb", shell_mock.recall_exec
62
339
  end
63
340
 
64
341
  def test__not_found
65
- launch("not_found""thing", framework: "rspec")
342
+ searcher = MemorySearcher.new do |searcher|
343
+ searcher.mock_file do |f|
344
+ f.path "/src/spec/file_1_spec.rb"
345
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
346
+ f.contents <<-RB
347
+ some stuff
348
+ RB
349
+ end
350
+ end
351
+
352
+ launch("gibberish", searcher: searcher)
66
353
  assert_equal nil, shell_mock.recall_exec
67
354
  end
355
+
356
+ def test__different_roots
357
+ searcher = MemorySearcher.new do |searcher|
358
+ searcher.mock_file do |f|
359
+ f.path "/src/spec/file_1_spec.rb"
360
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
361
+ f.contents <<-RB
362
+ it 'test_name_1' do
363
+ RB
364
+ end
365
+
366
+ searcher.mock_file do |f|
367
+ f.path "/src/spec/file_2_spec.rb"
368
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
369
+ f.contents <<-RB
370
+ it 'test_name_2' do
371
+ RB
372
+ end
373
+
374
+ searcher.mock_file do |f|
375
+ f.path "/src/inline/gem/spec/file_1_spec.rb"
376
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
377
+ f.contents <<-RB
378
+ it 'test_name_1' do
379
+ RB
380
+ end
381
+ end
382
+
383
+ launch("test_name_1", searcher: searcher)
384
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb --example test_name_1", shell_mock.recall_exec
385
+
386
+ launch("test_name_1 --all", searcher: searcher)
387
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb; cd -;\n\ncd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb", shell_mock.recall_exec
388
+
389
+ launch("file --all", searcher: searcher)
390
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb /src/spec/file_2_spec.rb; cd -;\n\ncd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb", shell_mock.recall_exec
391
+
392
+ launch("file_1", searcher: searcher)
393
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb", shell_mock.recall_exec
394
+
395
+ launch("file_1 --all", searcher: searcher)
396
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb; cd -;\n\ncd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb", shell_mock.recall_exec
397
+ end
398
+
399
+ def test__specified_example_name__simple
400
+ searcher = MemorySearcher.new do |searcher|
401
+ searcher.mock_file do |f|
402
+ f.path "/src/spec/file_1_spec.rb"
403
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
404
+ f.contents <<-RB
405
+ it "test_name_1" do
406
+ RB
407
+ end
408
+
409
+ searcher.mock_file do |f|
410
+ f.path "/src/inline/gem/spec/file_2_spec.rb"
411
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
412
+ f.contents <<-RB
413
+ it "test_name_2" do
414
+ RB
415
+ end
416
+ end
417
+
418
+ launch("file_1 --name test_name_1", searcher: searcher)
419
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_name_1", shell_mock.recall_exec
420
+
421
+ launch("file_2 --name test_name_2", searcher: searcher)
422
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_2_spec.rb --example test_name_2", shell_mock.recall_exec
423
+
424
+ launch("file_1 --example test_name_1", searcher: searcher)
425
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb --example test_name_1", shell_mock.recall_exec
426
+ end
427
+
428
+ def test__specified_example_name__multiple_files_same_name
429
+ searcher = MemorySearcher.new do |searcher|
430
+ searcher.mock_file do |f|
431
+ f.path "/src/spec/file_1_spec.rb"
432
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
433
+ f.contents <<-RB
434
+ it "test_name_1" do
435
+ RB
436
+ end
437
+
438
+ searcher.mock_file do |f|
439
+ f.path "/src/inline/gem/spec/file_1_spec.rb"
440
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
441
+ f.contents <<-RB
442
+ it "test_name_1" do
443
+ RB
444
+ end
445
+ end
446
+
447
+ launch("file_1_spec.rb --name test_name_1", searcher: searcher)
448
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb --example test_name_1", shell_mock.recall_exec
449
+
450
+ launch("file_1 --name test_name_1", searcher: searcher)
451
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb --example test_name_1", shell_mock.recall_exec
452
+ end
453
+
454
+ def test__by_line_number__just_passes_through_to_rspec
455
+ searcher = MemorySearcher.new do |searcher|
456
+ searcher.mock_file do |f|
457
+ f.path "/src/spec/file_1_spec.rb"
458
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
459
+ f.contents ""
460
+ end
461
+ end
462
+
463
+ launch("file_1_spec.rb:1", searcher: searcher)
464
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb:1", shell_mock.recall_exec
465
+
466
+ launch("/src/spec/file_1_spec.rb:1", searcher: searcher)
467
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb:1", shell_mock.recall_exec
468
+
469
+ launch("file_1_spec.rb:273", searcher: searcher)
470
+ assert_equal "cd /src && bundle exec rspec /src/spec/file_1_spec.rb:273", shell_mock.recall_exec
471
+ end
472
+
473
+ def test__by_line_number__multiple_files
474
+ searcher = MemorySearcher.new do |searcher|
475
+ searcher.mock_file do |f|
476
+ f.path "/src/spec/file_1_spec.rb"
477
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
478
+ f.contents ""
479
+ end
480
+
481
+ searcher.mock_file do |f|
482
+ f.path "/src/inline/gem/spec/file_1_spec.rb"
483
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
484
+ f.contents ""
485
+ end
486
+ end
487
+
488
+ launch("file_1_spec.rb:1", searcher: searcher)
489
+ assert_equal "cd /src/inline/gem && bundle exec rspec /src/inline/gem/spec/file_1_spec.rb:1", shell_mock.recall_exec
490
+ end
68
491
  end
69
492
  end