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
@@ -1,17 +1,6 @@
1
- class Root1DummyTestClass1Test
2
- def test__file_name_1__method_name_1
3
- test_unit_test_method_body
4
- end
5
-
6
- def test__file_name_1__method_name_2
7
- test_unit_test_method_body
8
- end
9
-
10
- def test__multiple_files__same_method
11
-
12
- end
13
-
14
- def helper_method
15
-
1
+ require 'minitest/autorun'
2
+ class Class1Test < Minitest::Test
3
+ def test_1
4
+ assert false, "1 was run"
16
5
  end
17
6
  end
@@ -1,5 +1,9 @@
1
- class Root1DummyTestClass2Test
2
- def test__multiple_files__same_method
3
-
1
+ require 'minitest/autorun'
2
+ class Class2Test < Minitest::Test
3
+ def test_1
4
+ assert false, "Class2: test_1 was run"
5
+ end
6
+ def test_2
7
+ assert false, "Class2: test_2 was run"
4
8
  end
5
9
  end
@@ -15,10 +15,10 @@ module TestLauncher
15
15
  test_case = MockTestCase.new(
16
16
  example: "example_name",
17
17
  app_root: "app_root",
18
- runner: "runner",
18
+ example_runner: "example_runner",
19
19
  file: "file"
20
20
  )
21
- assert_equal "cd app_root && runner file --name=example_name", Runner.new.single_example(test_case)
21
+ assert_equal "cd app_root && example_runner file --name=/example_name/", Runner.new.single_example(test_case)
22
22
  end
23
23
 
24
24
  def test_multiple_examples_same_file
@@ -26,27 +26,27 @@ module TestLauncher
26
26
  MockTestCase.new(
27
27
  example: "example_name",
28
28
  app_root: "app_root",
29
- runner: "runner",
29
+ example_runner: "example_runner",
30
30
  file: "file"
31
31
  ),
32
32
  MockTestCase.new(
33
33
  example: "example_name",
34
34
  app_root: "app_root",
35
- runner: "runner",
35
+ example_runner: "example_runner",
36
36
  file: "file"
37
37
  )
38
38
  ]
39
- assert_equal "cd app_root && runner file --name=/example_name/", Runner.new.multiple_examples_same_file(test_cases)
39
+ assert_equal "cd app_root && example_runner file --name=/example_name/", Runner.new.multiple_examples_same_file(test_cases)
40
40
  end
41
41
 
42
42
  def test_single_file
43
43
  test_case = MockTestCase.new(
44
44
  example: "example_name",
45
45
  app_root: "app_root",
46
- runner: "runner",
46
+ file_runner: "file_runner",
47
47
  file: "file"
48
48
  )
49
- assert_equal "cd app_root && runner file", Runner.new.single_file(test_case)
49
+ assert_equal "cd app_root && file_runner file", Runner.new.single_file(test_case)
50
50
  end
51
51
 
52
52
  def test_one_or_more_files
@@ -54,17 +54,17 @@ module TestLauncher
54
54
  MockTestCase.new(
55
55
  example: "example_name",
56
56
  app_root: "app_root",
57
- runner: "runner",
57
+ file_runner: "file_runner",
58
58
  file: "file_1"
59
59
  ),
60
60
  MockTestCase.new(
61
61
  example: "example_name",
62
62
  app_root: "app_root",
63
- runner: "runner",
63
+ file_runner: "file_runner",
64
64
  file: "file_2"
65
65
  )
66
66
  ]
67
- assert_equal "cd app_root && runner file_1 file_2", Runner.new.one_or_more_files(test_cases)
67
+ assert_equal "cd app_root && file_runner file_1 file_2", Runner.new.one_or_more_files(test_cases)
68
68
  end
69
69
  end
70
70
  end
@@ -13,7 +13,7 @@ module TestLauncher
13
13
  mocks Search::Git
14
14
 
15
15
  impl :grep do |regex, file_pattern:|
16
- example_name_regex = "^ *def test_.*.*" #TODO: no bueno copying this
16
+ example_name_regex = "^ *def +test_.*.*" #TODO: no bueno copying this
17
17
  case [regex, file_pattern]
18
18
  when [example_name_regex, "test/test_launcher/single_test.rb"]
19
19
  [
@@ -34,6 +34,7 @@ module TestLauncher
34
34
  "test/dir/2_multiple_test.rb:30: def test__second",
35
35
  ]
36
36
  else
37
+ require "pry";binding.pry
37
38
  raise "unmocked search: #{regex}, #{file_pattern}"
38
39
  end
39
40
  end
@@ -59,42 +60,42 @@ module TestLauncher
59
60
  end
60
61
 
61
62
  def test_by_line__file_not_found
62
- assert_equal nil, searcher.by_line("not_found_test.rb", 1)
63
+ assert_equal [], searcher.by_line("not_found_test.rb", 1)
63
64
  end
64
65
 
65
66
  def test_by_line__file_is_not_test_file
66
- assert_equal nil, searcher.by_line("non_test_file.rb", 1)
67
+ assert_equal [], searcher.by_line("non_test_file.rb", 1)
67
68
  end
68
69
 
69
70
  def test_by_line__single_file_line_before_all_examples
70
- expected_result = {file: "test/test_launcher/single_test.rb"}
71
+ expected_result = [{file: "test/test_launcher/single_test.rb"}]
71
72
  assert_equal expected_result, searcher.by_line("single_test.rb", 1)
72
73
  end
73
74
 
74
75
  def test_by_line__single_file_line_exact_number
75
- expected_result = {
76
+ expected_result = [{
76
77
  file: "test/test_launcher/single_test.rb",
77
78
  example_name: "test__first",
78
79
  line_number: 8
79
- }
80
+ }]
80
81
  assert_equal expected_result, searcher.by_line("single_test.rb", 8)
81
82
  end
82
83
 
83
84
  def test_by_line__single_file_line_after_example
84
- expected_result = {
85
+ expected_result = [{
85
86
  file: "test/test_launcher/single_test.rb",
86
87
  example_name: "test__first",
87
88
  line_number: 8
88
- }
89
+ }]
89
90
  assert_equal expected_result, searcher.by_line("single_test.rb", 10)
90
91
  end
91
92
 
92
93
  def test_by_line__single_file_line_after_example_2
93
- expected_result = {
94
+ expected_result = [{
94
95
  file: "test/test_launcher/single_test.rb",
95
96
  example_name: "test__second",
96
97
  line_number: 13
97
- }
98
+ }]
98
99
  assert_equal expected_result, searcher.by_line("single_test.rb", 17)
99
100
  end
100
101
 
@@ -17,7 +17,7 @@ module TestLauncher
17
17
  app_root: "app_root",
18
18
  file: "file"
19
19
  )
20
- assert_equal "cd app_root && rspec file --example example_name", Runner.new.single_example(test_case)
20
+ assert_equal "cd app_root && bundle exec rspec file --example example_name", Runner.new.single_example(test_case)
21
21
  end
22
22
 
23
23
  def test_single_example__with_messy_name
@@ -26,7 +26,7 @@ module TestLauncher
26
26
  app_root: "app_root",
27
27
  file: "file"
28
28
  )
29
- assert_equal "cd app_root && rspec file --example this\\ is\\ it\\'s\\ name\\ :\\(", Runner.new.single_example(test_case)
29
+ assert_equal "cd app_root && bundle exec rspec file --example this\\ is\\ it\\'s\\ name\\ :\\(", Runner.new.single_example(test_case)
30
30
  end
31
31
 
32
32
 
@@ -43,7 +43,7 @@ module TestLauncher
43
43
  file: "file"
44
44
  )
45
45
  ]
46
- assert_equal "cd app_root && rspec file --example example_name", Runner.new.multiple_examples_same_file(test_cases)
46
+ assert_equal "cd app_root && bundle exec rspec file --example example_name", Runner.new.multiple_examples_same_file(test_cases)
47
47
  end
48
48
 
49
49
  def test_single_file
@@ -52,7 +52,7 @@ module TestLauncher
52
52
  app_root: "app_root",
53
53
  file: "file"
54
54
  )
55
- assert_equal "cd app_root && rspec file", Runner.new.single_file(test_case)
55
+ assert_equal "cd app_root && bundle exec rspec file", Runner.new.single_file(test_case)
56
56
  end
57
57
 
58
58
  def test_one_or_more_files
@@ -68,7 +68,7 @@ module TestLauncher
68
68
  file: "file_2"
69
69
  )
70
70
  ]
71
- assert_equal "cd app_root && rspec file_1 file_2", Runner.new.one_or_more_files(test_cases)
71
+ assert_equal "cd app_root && bundle exec rspec file_1 file_2", Runner.new.one_or_more_files(test_cases)
72
72
  end
73
73
  end
74
74
  end
@@ -33,18 +33,18 @@ module TestLauncher
33
33
  end
34
34
 
35
35
  def test_by_line__file_not_found
36
- assert_equal nil, searcher.by_line("not_found_spec.rb", 1)
36
+ assert_equal [], searcher.by_line("not_found_spec.rb", 1)
37
37
  end
38
38
 
39
39
  def test_by_line__file_is_not_test_file
40
- assert_equal nil, searcher.by_line("non_test_file.rb", 1)
40
+ assert_equal [], searcher.by_line("non_test_file.rb", 1)
41
41
  end
42
42
 
43
43
  def test_by_line__file_is_found
44
- expected_result = {
44
+ expected_result = [{
45
45
  file: "spec/test_launcher/single_spec.rb",
46
46
  line_number: 8
47
- }
47
+ }]
48
48
 
49
49
  assert_equal expected_result, searcher.by_line("single_spec.rb", 8)
50
50
  end
@@ -5,71 +5,566 @@ module TestLauncher
5
5
  class MinitestIntegrationTest < TestCase
6
6
  include IntegrationHelper
7
7
 
8
- def test__single_method
9
- launch("file_name_1__method_name_1", framework: "minitest")
10
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} --name=file_name_1__method_name_1", shell_mock.recall_exec
8
+ def launch(query, env: {}, searcher:)
9
+ query += " --framework minitest "
10
+ shell_mock.reset
11
+ CLI.launch(query.split(" "), env, shell: shell_mock, searcher: searcher)
11
12
  end
12
13
 
13
- def test__multiple_methods__same_file
14
- launch("file_name_1", framework: "minitest")
15
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} --name=/file_name_1/", shell_mock.recall_exec
14
+ def test__by_example__single_method
15
+ searcher = MemorySearcher.new do |searcher|
16
+ searcher.mock_file do |f|
17
+ f.path "/src/test/class_1_test.rb"
18
+ f.contents <<-RB
19
+ class Class1Test
20
+ def test_name
21
+ end
22
+ end
23
+ RB
24
+ end
25
+ end
26
+
27
+ launch("test_name", searcher: searcher)
28
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_1_test.rb --name=/test_name/", shell_mock.recall_exec
29
+
30
+ launch("n", searcher: searcher)
31
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_1_test.rb --name=/n/", shell_mock.recall_exec
32
+ end
33
+
34
+ def test__by_example__multiple_methods__same_file
35
+ searcher = MemorySearcher.new do |searcher|
36
+ searcher.mock_file do |f|
37
+ f.path "/src/test/class_1_test.rb"
38
+ f.contents <<-RB
39
+ class Class1Test
40
+ def test_name_1
41
+ end
42
+
43
+ def test_name_2
44
+ end
45
+ end
46
+ RB
47
+ end
48
+ end
49
+
50
+ launch("name_", searcher: searcher)
51
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_1_test.rb --name=/name_/", shell_mock.recall_exec
16
52
  end
17
53
 
18
- def test__multiple_methods__different_files
19
- launch("multiple_files__same_method", framework: "minitest")
20
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test #{system_path("test/test_launcher/fixtures/minitest/test/class_2_test.rb")} --name=multiple_files__same_method", shell_mock.recall_exec
54
+ def test__by_example__multiple_methods__regex_issue
55
+ searcher = MemorySearcher.new do |searcher|
56
+ searcher.mock_file do |f|
57
+ f.path "/src/test/class_1_test.rb"
58
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
59
+ f.contents <<-RB
60
+ def test_name_1
61
+ RB
62
+ end
63
+
64
+ searcher.mock_file do |f|
65
+ f.path "/src/test/class_2_test.rb"
66
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
67
+ f.contents <<-RB
68
+ def test_somename
69
+ RB
70
+ end
71
+ end
72
+
73
+ launch("test_name", searcher: searcher)
74
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_1_test.rb --name=/test_name/", shell_mock.recall_exec
75
+
76
+ skip
77
+ # not seeing a good solution here...
78
+ # we cannot tell whether the _ is part of the test_ or not.
79
+ # might need to do two passes: first with user input, then
80
+ # filter down to those that match test_...would that work?
81
+ launch("_name", searcher: searcher)
82
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_1_test.rb --name=/test_name/", shell_mock.recall_exec
21
83
  end
22
84
 
23
- def test__single_file
24
- launch("class_1_test", framework: "minitest")
25
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")}", shell_mock.recall_exec
85
+ def test__by_example__multiple_methods__different_files
86
+ searcher = MemorySearcher.new do |searcher|
87
+ searcher.mock_file do |f|
88
+ f.path "/src/test/class_1_test.rb"
89
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
90
+ f.contents <<-RB
91
+ def test_name_1
92
+ def test_name_2
93
+ RB
94
+ end
95
+
96
+ searcher.mock_file do |f|
97
+ f.path "/src/test/class_2_test.rb"
98
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
99
+ f.contents <<-RB
100
+ def test_name_1
101
+ def test_name_2
102
+ RB
103
+ end
104
+
105
+ searcher.mock_file do |f|
106
+ f.path "/src/test/class_3_test.rb"
107
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
108
+ f.contents <<-RB
109
+ def test_name_2
110
+ RB
111
+ end
112
+ end
113
+
114
+ launch("name_1", searcher: searcher)
115
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_2_test.rb --name=/name_1/", shell_mock.recall_exec
116
+
117
+ launch("name_2", searcher: searcher)
118
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/class_2_test.rb --name=/name_2/", shell_mock.recall_exec
119
+
120
+ launch("name_1 --all", searcher: searcher)
121
+ assert_equal "cd /src && bundle exec ruby -I test -e \"ARGV.push('--name=/name_1/')\" -r /src/test/class_1_test.rb -r /src/test/class_2_test.rb", shell_mock.recall_exec
122
+
123
+ launch("name_2 --all", searcher: searcher)
124
+ assert_equal "cd /src && bundle exec ruby -I test -e \"ARGV.push('--name=/name_2/')\" -r /src/test/class_1_test.rb -r /src/test/class_2_test.rb -r /src/test/class_3_test.rb", shell_mock.recall_exec
125
+
126
+ launch("name_1|name_2 --all", searcher: searcher)
127
+ assert_equal "cd /src && bundle exec ruby -I test -e \"ARGV.push('--name=/name_1|name_2/')\" -r /src/test/class_1_test.rb -r /src/test/class_2_test.rb -r /src/test/class_3_test.rb", shell_mock.recall_exec
128
+ end
129
+
130
+ def test__by_filename
131
+ searcher = MemorySearcher.new do |searcher|
132
+ searcher.mock_file do |f|
133
+ f.path "/src/test/file_1_test.rb"
134
+ f.contents ""
135
+ end
136
+ end
137
+
138
+ launch("file_1", searcher: searcher)
139
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
140
+
141
+ launch("file_1_test.rb", searcher: searcher)
142
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
143
+
144
+ launch("/file_1", searcher: searcher)
145
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
146
+
147
+ launch(".rb", searcher: searcher)
148
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
149
+
150
+ launch("/src/test/file_1", searcher: searcher)
151
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
152
+
153
+ launch("src/test/file_1", searcher: searcher)
154
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
155
+
156
+ launch("st/file_1", searcher: searcher)
157
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
26
158
  end
27
159
 
28
- def test__uses_spring
29
- launch("different_roo""t_test", framework: "minitest") # don't trigger the find in *this* file
30
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest/test/different_root")} && bundle exec spring testunit #{system_path("test/test_launcher/fixtures/minitest/test/different_root/test/different_root_test.rb")}", shell_mock.recall_exec
160
+ def test__by_filename__multiple_files_found
161
+ searcher = MemorySearcher.new do |searcher|
162
+ searcher.mock_file do |f|
163
+ f.path "/src/test/file_1_test.rb"
164
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
165
+ end
166
+
167
+ searcher.mock_file do |f|
168
+ f.path "/src/test/file_2_test.rb"
169
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
170
+ end
171
+
172
+ searcher.mock_file do |f|
173
+ f.path "/src/test/file_3_test.rb"
174
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
175
+ end
176
+
177
+ searcher.mock_file do |f|
178
+ f.path "/src/test/other_test.rb"
179
+ end
180
+ end
181
+
182
+ launch("file_1", searcher: searcher)
183
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
184
+
185
+ launch("file", searcher: searcher)
186
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_2_test.rb", shell_mock.recall_exec
187
+
188
+ launch("file --all", searcher: searcher)
189
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb /src/test/file_2_test.rb /src/test/file_3_test.rb", shell_mock.recall_exec
31
190
  end
32
191
 
33
- def test__multiple_files__found
34
- launch("Root1""Dum""myTest""Class", framework: "minitest") # don't trigger the find in *this* file
35
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_2_test.rb")}", shell_mock.recall_exec
192
+ def test__by_filename__preferred_over_regex_and_test_name_matches
193
+ searcher = MemorySearcher.new do |searcher|
194
+ searcher.mock_file do |f|
195
+ f.path "/src/test/class_1_test.rb"
196
+ f.contents <<-RB
197
+ def test_name
198
+ RB
199
+ end
200
+
201
+ searcher.mock_file do |f|
202
+ f.path "/src/test/name_test.rb"
203
+ end
204
+
205
+ searcher.mock_file do |f|
206
+ f.path "/src/test/other_test.rb"
207
+ f.contents <<-RB
208
+ regex will match name_test
209
+ RB
210
+ end
211
+ end
212
+
213
+ launch("name_test", searcher: searcher)
214
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/name_test.rb", shell_mock.recall_exec
36
215
  end
37
216
 
38
- def test__multiple_files__found__all
39
- launch("Root1""DummyTest""Class", run_all: true, framework: "minitest") # don't trigger the find in *this* file
40
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} #{system_path("test/test_launcher/fixtures/minitest/test/class_2_test.rb")}", shell_mock.recall_exec
217
+ def test__by_multiple_filenames__multiple_files_found
218
+ searcher = MemorySearcher.new do |searcher|
219
+ searcher.mock_file do |f|
220
+ f.path "/src/test/file_1_test.rb"
221
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
222
+ f.contents ""
223
+ end
224
+
225
+ searcher.mock_file do |f|
226
+ f.path "/src/test/file_2_test.rb"
227
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
228
+ f.contents ""
229
+ end
230
+
231
+ searcher.mock_file do |f|
232
+ f.path "/src/test/file_3_test.rb"
233
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
234
+ f.contents ""
235
+ end
236
+
237
+ searcher.mock_file do |f|
238
+ f.path "/src/test/other_test.rb"
239
+ f.contents ""
240
+ end
241
+ end
242
+
243
+ launch("file_1 file_2", searcher: searcher)
244
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb /src/test/file_2_test.rb", shell_mock.recall_exec
245
+
246
+ launch("file_1 file", searcher: searcher)
247
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb /src/test/file_2_test.rb /src/test/file_3_test.rb", shell_mock.recall_exec
248
+
249
+ # If multiple queries are submitted but not all of them match,
250
+ # then what should we do? For now, we assume that it's only
251
+ # considered a match if each query term matches at least one
252
+ # or more files.
253
+ launch("file_1 gibberish", searcher: searcher)
254
+ assert_equal nil, shell_mock.recall_exec
41
255
  end
42
256
 
43
- def test__multiple_file_paths
44
- launch("class_1_tes""t.rb class_2_test.rb", framework: "minitest") # don't trigger the find in *this* file
45
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} #{system_path("test/test_launcher/fixtures/minitest/test/class_2_test.rb")}", shell_mock.recall_exec
257
+ def test_uses_spring__if_spring_binstub_found
258
+ searcher = MemorySearcher.new do |searcher|
259
+ searcher.mock_file do |f|
260
+ f.path "/src/test/class_1_test.rb"
261
+ f.contents <<-RB
262
+ def test_name
263
+ RB
264
+ end
265
+
266
+ searcher.mock_file do |f|
267
+ f.path "/src/bin/spring"
268
+ f.contents ""
269
+ end
270
+ end
271
+
272
+
273
+ launch("class_1_test.rb", env: {}, searcher: searcher)
274
+ assert_equal "cd /src && bundle exec spring testunit /src/test/class_1_test.rb", shell_mock.recall_exec
275
+
276
+ launch("class_1_test.rb", env: {"DISABLE_SPRING" => "1"}, searcher: searcher)
277
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/class_1_test.rb", shell_mock.recall_exec
46
278
  end
47
279
 
48
- def test__multiple_files__different_roots__all
49
- launch("DummyTest""Class", run_all: true, framework: "minitest") # don't trigger the find in *this* file
50
- expected = "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} #{system_path("test/test_launcher/fixtures/minitest/test/class_2_test.rb")}; cd -;\n\ncd #{system_path("test/test_launcher/fixtures/minitest/test/different_root")} && bundle exec spring testunit #{system_path("test/test_launcher/fixtures/minitest/test/different_root/test/different_root_test.rb")}"
51
- assert_equal expected, shell_mock.recall_exec
280
+ def test__by_regex__one_match
281
+ searcher = MemorySearcher.new do |searcher|
282
+ searcher.mock_file do |f|
283
+ f.path "/src/test/file_1_test.rb"
284
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
285
+ f.contents <<-RB
286
+ regex match 1
287
+ regex match 2
288
+ regex match 3
289
+ RB
290
+ end
291
+
292
+ searcher.mock_file do |f|
293
+ f.path "/src/test/file_2_test.rb"
294
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
295
+ f.contents <<-RB
296
+ regex match 1
297
+ regex match 2
298
+ RB
299
+ end
300
+
301
+ searcher.mock_file do |f|
302
+ f.path "/src/test/file_3_test.rb"
303
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
304
+ f.contents <<-RB
305
+ regex match 1
306
+ regex match 3
307
+ RB
308
+ end
309
+ end
310
+
311
+ launch("regex match 1", searcher: searcher)
312
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_2_test.rb", shell_mock.recall_exec
313
+
314
+ launch("regex match 3", searcher: searcher)
315
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_3_test.rb", shell_mock.recall_exec
316
+
317
+ launch("regex match", searcher: searcher)
318
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_2_test.rb", shell_mock.recall_exec
319
+
320
+ launch("regex match --all", searcher: searcher)
321
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb /src/test/file_2_test.rb /src/test/file_3_test.rb", shell_mock.recall_exec
52
322
  end
53
323
 
54
- def test__regex
55
- launch("Root1""DummyTest""Class1""Test", framework: "minitest") # don't trigger the find in *this* file
56
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")}", shell_mock.recall_exec
324
+ def test__by_example__preferred_over_regex
325
+ searcher = MemorySearcher.new do |searcher|
326
+ searcher.mock_file do |f|
327
+ f.path "/src/test/file_1_test.rb"
328
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
329
+ f.contents <<-RB
330
+ def test_regex_match
331
+ RB
332
+ end
333
+
334
+ searcher.mock_file do |f|
335
+ f.path "/src/test/file_2_test.rb"
336
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
337
+ f.contents <<-RB
338
+ regex_match
339
+ RB
340
+ end
341
+ end
342
+
343
+ launch("regex_match", searcher: searcher)
344
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/regex_match/", shell_mock.recall_exec
57
345
  end
58
346
 
59
- def test__regex__does_not_test_helper__methods
60
- launch("helper_meth""od", framework: "minitest") # don't trigger the find in *this* file
61
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")}", shell_mock.recall_exec
347
+ def test__helper_methods_are_considered_regexes
348
+ searcher = MemorySearcher.new do |searcher|
349
+ searcher.mock_file do |f|
350
+ f.path "/src/test/file_1_test.rb"
351
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
352
+ f.contents <<-RB
353
+ def helper_method
354
+ RB
355
+ end
356
+ end
357
+
358
+ launch("helper_method", searcher: searcher)
359
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
62
360
  end
63
361
 
64
- def test__specified_name
65
- launch("class_1_test.rb", name: "file_name_1__method_name_1", framework: "minitest") # don't trigger the find in *this* file
66
- assert_equal "cd #{system_path("test/test_launcher/fixtures/minitest")} && bundle exec ruby -I test #{system_path("test/test_launcher/fixtures/minitest/test/class_1_test.rb")} --name=file_name_1__method_name_1", shell_mock.recall_exec
362
+ def test__by_example__handles_regex_for_example_name
363
+ searcher = MemorySearcher.new do |searcher|
364
+ searcher.mock_file do |f|
365
+ f.path "/src/test/file_1_test.rb"
366
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
367
+ f.contents <<-RB
368
+ def test_name_1
369
+ RB
370
+ end
371
+
372
+ searcher.mock_file do |f|
373
+ f.path "/src/test/file_2_test.rb"
374
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
375
+ f.contents <<-RB
376
+ def test_name_2
377
+ RB
378
+ end
379
+ end
380
+
381
+ launch("test_name_1$", searcher: searcher)
382
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1\\$/", shell_mock.recall_exec
383
+
384
+ launch("test_name_2|test_name_1", searcher: searcher)
385
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_2_test.rb --name=/test_name_2\\|test_name_1/", shell_mock.recall_exec
386
+
387
+ launch('test_name_\d', searcher: searcher)
388
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_2_test.rb --name=/test_name_\\\\d/", shell_mock.recall_exec
389
+
390
+ launch('test_name_\d --all', searcher: searcher)
391
+ assert_equal "cd /src && bundle exec ruby -I test -e \"ARGV.push('--name=/test_name_\\d/')\" -r /src/test/file_1_test.rb -r /src/test/file_2_test.rb", shell_mock.recall_exec
67
392
  end
68
393
 
69
394
  def test__not_found
70
- launch("not_found""thing", framework: "minitest")
395
+ searcher = MemorySearcher.new do |searcher|
396
+ searcher.mock_file do |f|
397
+ f.path "/src/test/file_1_test.rb"
398
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
399
+ f.contents <<-RB
400
+ some stuff
401
+ RB
402
+ end
403
+ end
404
+
405
+ launch("gibberish", searcher: searcher)
71
406
  assert_equal nil, shell_mock.recall_exec
72
407
  end
73
408
 
409
+ def test__different_roots
410
+ searcher = MemorySearcher.new do |searcher|
411
+ searcher.mock_file do |f|
412
+ f.path "/src/test/file_1_test.rb"
413
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
414
+ f.contents <<-RB
415
+ def test_name_1
416
+ RB
417
+ end
418
+
419
+ searcher.mock_file do |f|
420
+ f.path "/src/test/file_2_test.rb"
421
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
422
+ f.contents <<-RB
423
+ def test_name_2
424
+ RB
425
+ end
426
+
427
+ searcher.mock_file do |f|
428
+ f.path "/src/inline/gem/test/file_1_test.rb"
429
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
430
+ f.contents <<-RB
431
+ def test_name_1
432
+ RB
433
+ end
434
+ end
435
+
436
+ launch("test_name_1", searcher: searcher)
437
+ assert_equal "cd /src/inline/gem && bundle exec ruby -I test /src/inline/gem/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
438
+
439
+ launch("test_name_1 --all", searcher: searcher)
440
+ assert_equal "cd /src && bundle exec ruby -I test -e \"ARGV.push('--name=/test_name_1/')\" -r /src/test/file_1_test.rb; cd -;\n\ncd /src/inline/gem && bundle exec ruby -I test -e \"ARGV.push('--name=/test_name_1/')\" -r /src/inline/gem/test/file_1_test.rb", shell_mock.recall_exec
441
+
442
+ launch("file --all", searcher: searcher)
443
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb /src/test/file_2_test.rb; cd -;\n\ncd /src/inline/gem && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/inline/gem/test/file_1_test.rb", shell_mock.recall_exec
444
+
445
+ launch("file_1", searcher: searcher)
446
+ assert_equal "cd /src/inline/gem && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/inline/gem/test/file_1_test.rb", shell_mock.recall_exec
447
+
448
+ launch("file_1 --all", searcher: searcher)
449
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb; cd -;\n\ncd /src/inline/gem && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/inline/gem/test/file_1_test.rb", shell_mock.recall_exec
450
+ end
451
+
452
+ def test__specified_example_name__simple
453
+ searcher = MemorySearcher.new do |searcher|
454
+ searcher.mock_file do |f|
455
+ f.path "/src/test/file_1_test.rb"
456
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
457
+ f.contents <<-RB
458
+ def test_name_1
459
+ RB
460
+ end
461
+
462
+ searcher.mock_file do |f|
463
+ f.path "/src/inline/gem/test/file_2_test.rb"
464
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
465
+ f.contents <<-RB
466
+ def test_name_2
467
+ RB
468
+ end
469
+ end
470
+
471
+ launch("file_1 --name test_name_1", searcher: searcher)
472
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
473
+
474
+ launch("file_2 --name test_name_2", searcher: searcher)
475
+ assert_equal "cd /src/inline/gem && bundle exec ruby -I test /src/inline/gem/test/file_2_test.rb --name=/test_name_2/", shell_mock.recall_exec
476
+ end
477
+
478
+ def test__specified_example_name__multiple_files_same_name
479
+ searcher = MemorySearcher.new do |searcher|
480
+ searcher.mock_file do |f|
481
+ f.path "/src/test/file_1_test.rb"
482
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
483
+ f.contents <<-RB
484
+ def test_name_1
485
+ RB
486
+ end
487
+
488
+ searcher.mock_file do |f|
489
+ f.path "/src/inline/gem/test/file_1_test.rb"
490
+ f.mtime Time.new(2015, 01, 01, 00, 00, 00)
491
+ f.contents <<-RB
492
+ def test_name_1
493
+ RB
494
+ end
495
+ end
496
+
497
+ launch("file_1 --name test_name_1", searcher: searcher)
498
+ assert_equal "cd /src/inline/gem && bundle exec ruby -I test /src/inline/gem/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
499
+ end
500
+
501
+ def test__by_line_number
502
+ searcher = MemorySearcher.new do |searcher|
503
+ searcher.mock_file do |f|
504
+ f.path "/src/test/file_1_test.rb"
505
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
506
+ f.contents <<-RB
507
+ class File1Test
508
+ def test_name_1
509
+ things
510
+ end
511
+
512
+ def test_name_2
513
+ things
514
+ end
515
+ end
516
+ RB
517
+ end
518
+ end
519
+
520
+ launch("file_1_test.rb:1", searcher: searcher)
521
+ assert_equal "cd /src && bundle exec ruby -I test -e 'ARGV.each {|f| require(f)}' /src/test/file_1_test.rb", shell_mock.recall_exec
522
+
523
+ launch("file_1_test.rb:2", searcher: searcher)
524
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
525
+
526
+ launch("file_1_test.rb:3", searcher: searcher)
527
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
528
+
529
+ launch("file_1_test.rb:4", searcher: searcher)
530
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
531
+
532
+ launch("file_1_test.rb:5", searcher: searcher)
533
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_1/", shell_mock.recall_exec
534
+
535
+ launch("file_1_test.rb:6", searcher: searcher)
536
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_2/", shell_mock.recall_exec
537
+
538
+ launch("file_1_test.rb:7", searcher: searcher)
539
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_2/", shell_mock.recall_exec
540
+
541
+ launch("file_1_test.rb:8", searcher: searcher)
542
+ assert_equal "cd /src && bundle exec ruby -I test /src/test/file_1_test.rb --name=/test_name_2/", shell_mock.recall_exec
543
+ end
544
+
545
+ def test__by_line_number__multiple_files
546
+ searcher = MemorySearcher.new do |searcher|
547
+ searcher.mock_file do |f|
548
+ f.path "/src/test/file_1_test.rb"
549
+ f.mtime Time.new(2013, 01, 01, 00, 00, 00)
550
+ f.contents <<-RB
551
+ class File1Test
552
+ def test_name_1
553
+ RB
554
+ end
555
+
556
+ searcher.mock_file do |f|
557
+ f.path "/src/inline/gem/test/file_1_test.rb"
558
+ f.mtime Time.new(2014, 01, 01, 00, 00, 00)
559
+ f.contents <<-RB
560
+ class File1Test
561
+ def test_name_1
562
+ RB
563
+ end
564
+ end
565
+
566
+ launch("file_1_test.rb:1", searcher: searcher)
567
+ assert shell_mock.recall(:warn).first.first.to_s.match(/Open an issue/)
568
+ end
74
569
  end
75
570
  end