test_launcher 1.5.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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