test_launcher 1.5.0 → 1.5.1

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -0
  3. data/bin/test_launcher +2 -5
  4. data/lib/test_launcher/cli/input_parser.rb +37 -12
  5. data/lib/test_launcher/cli/query.rb +30 -0
  6. data/lib/test_launcher/cli/request.rb +61 -0
  7. data/lib/test_launcher/cli.rb +44 -0
  8. data/lib/test_launcher/frameworks/base.rb +26 -7
  9. data/lib/test_launcher/frameworks/elixir.rb +84 -0
  10. data/lib/test_launcher/frameworks/implementation/test_case.rb +4 -7
  11. data/lib/test_launcher/frameworks/minitest.rb +80 -23
  12. data/lib/test_launcher/frameworks/rspec.rb +38 -13
  13. data/lib/test_launcher/queries.rb +346 -0
  14. data/lib/test_launcher/rubymine/launcher.rb +1 -12
  15. data/lib/test_launcher/rubymine/request.rb +15 -0
  16. data/lib/test_launcher/rubymine.rb +20 -13
  17. data/lib/test_launcher/search/ag.rb +96 -0
  18. data/lib/test_launcher/search/git.rb +6 -2
  19. data/lib/test_launcher/search.rb +18 -0
  20. data/lib/test_launcher/shell/runner.rb +2 -1
  21. data/lib/test_launcher/version.rb +1 -1
  22. data/lib/test_launcher.rb +0 -26
  23. data/test/test_helper.rb +2 -1
  24. data/test/test_helpers/integration_helper.rb +40 -0
  25. data/test/test_helpers/mock.rb +59 -0
  26. data/test/test_helpers/mock_searcher.rb +1 -0
  27. data/test/test_helpers/mocks/searcher_mock.rb +82 -0
  28. data/test/test_helpers/mocks.rb +76 -0
  29. data/test/test_launcher/cli/input_parser_test.rb +72 -0
  30. data/test/test_launcher/frameworks/minitest/runner_test.rb +72 -0
  31. data/test/test_launcher/frameworks/minitest/searcher_test.rb +109 -0
  32. data/test/test_launcher/frameworks/rspec/runner_test.rb +76 -0
  33. data/test/test_launcher/frameworks/rspec/searcher_test.rb +54 -0
  34. data/test/test_launcher/minitest_integration_test.rb +31 -40
  35. data/test/test_launcher/queries/example_name_query_test.rb +217 -0
  36. data/test/test_launcher/queries/full_regex_query_test.rb +153 -0
  37. data/test/test_launcher/queries/generic_query_test.rb +23 -0
  38. data/test/test_launcher/queries/line_number_query_test.rb +107 -0
  39. data/test/test_launcher/queries/multi_term_query_test.rb +138 -0
  40. data/test/test_launcher/queries/path_query_test.rb +192 -0
  41. data/test/test_launcher/queries/search_query_test.rb +54 -0
  42. data/test/test_launcher/queries/single_term_query_test.rb +36 -0
  43. data/test/test_launcher/queries/specified_name_query_test.rb +112 -0
  44. data/test/test_launcher/rspec_integration_test.rb +27 -41
  45. data/test/test_launcher/search/git_test.rb +2 -0
  46. metadata +49 -10
  47. data/lib/test_launcher/frameworks/implementation/collection.rb +0 -36
  48. data/lib/test_launcher/frameworks/implementation/consolidator.rb +0 -83
  49. data/lib/test_launcher/frameworks/implementation/locator.rb +0 -118
  50. data/lib/test_launcher/frameworks.rb +0 -20
  51. data/lib/test_launcher/request.rb +0 -36
  52. data/test/test_launcher/frameworks/implementation/locator_test.rb +0 -166
@@ -1,83 +1,74 @@
1
1
  require "test_helper"
2
- require "test_launcher/request"
2
+ require "test_helpers/integration_helper"
3
3
 
4
4
  module TestLauncher
5
5
  class MinitestIntegrationTest < TestCase
6
+ include IntegrationHelper
7
+
6
8
  def test__single_method
7
- launch("file_name_1__method_name_1")
8
- 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::Runner.recall_exec
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
9
11
  end
10
12
 
11
13
  def test__multiple_methods__same_file
12
- launch("file_name_1")
13
- 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::Runner.recall_exec
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
16
  end
15
17
 
16
18
  def test__multiple_methods__different_files
17
- launch("multiple_files__same_method")
18
- 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::Runner.recall_exec
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
19
21
  end
20
22
 
21
23
  def test__single_file
22
- launch("class_1_test")
23
- 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::Runner.recall_exec
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
24
26
  end
25
27
 
26
28
  def test__uses_spring
27
- launch("different_roo""t_test") # don't trigger the find in *this* file
28
- 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::Runner.recall_exec
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
29
31
  end
30
32
 
31
33
  def test__multiple_files__found
32
- launch("Root1""Dum""myTest""Class") # don't trigger the find in *this* file
33
- 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::Runner.recall_exec
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
34
36
  end
35
37
 
36
38
  def test__multiple_files__found__all
37
- launch("Root1""DummyTest""Class", run_all: true) # don't trigger the find in *this* file
38
- 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::Runner.recall_exec
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
39
41
  end
40
42
 
41
43
  def test__multiple_file_paths
42
- launch("class_1_tes""t.rb class_2_test.rb") # don't trigger the find in *this* file
43
- 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::Runner.recall_exec
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
44
46
  end
45
47
 
46
48
  def test__multiple_files__different_roots__all
47
- launch("DummyTest""Class", run_all: true) # don't trigger the find in *this* file
49
+ launch("DummyTest""Class", run_all: true, framework: "minitest") # don't trigger the find in *this* file
48
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")}"
49
- assert_equal expected, Shell::Runner.recall_exec
51
+ assert_equal expected, shell_mock.recall_exec
50
52
  end
51
53
 
52
54
  def test__regex
53
- launch("Root1""DummyTest""Class1""Test") # don't trigger the find in *this* file
54
- 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::Runner.recall_exec
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
55
57
  end
56
58
 
57
59
  def test__regex__does_not_test_helper__methods
58
- launch("helper_meth""od") # don't trigger the find in *this* file
59
- 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::Runner.recall_exec
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
60
62
  end
61
63
 
62
- def test__not_found
63
- launch("not_found""thing")
64
- assert_equal nil, Shell::Runner.recall_exec
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
65
67
  end
66
68
 
67
- private
68
-
69
- def system_path(relative_dir)
70
- File.join(Dir.pwd, relative_dir)
71
- end
72
-
73
- def launch(query, run_all: false)
74
- request = Request.new(
75
- query: query,
76
- run_all: run_all,
77
- framework: "minitest"
78
- )
79
-
80
- TestLauncher.launch(request)
69
+ def test__not_found
70
+ launch("not_found""thing", framework: "minitest")
71
+ assert_equal nil, shell_mock.recall_exec
81
72
  end
82
73
 
83
74
  end
@@ -0,0 +1,217 @@
1
+ require "test_helper"
2
+ require "test_helpers/mocks"
3
+ require "test_launcher/queries"
4
+ require "test_launcher/frameworks/minitest"
5
+
6
+ module TestLauncher
7
+ module Queries
8
+ class ExampleNameQueryTest < TestCase
9
+ include DefaultMocks
10
+
11
+ def raw_searcher
12
+ @raw_searcher ||= MemorySearcher.new do |searcher|
13
+ searcher.mock_file do |f|
14
+ f.path "file_1_test.rb"
15
+ f.mtime Time.now - 3000
16
+ f.contents <<-RB
17
+ class SingleTest
18
+ def test__one_example
19
+ matches_single
20
+ end
21
+
22
+ def test__same_file_1
23
+ end
24
+
25
+ def test__same_file_2
26
+ end
27
+
28
+ def test__different_files
29
+ end
30
+ end
31
+ RB
32
+ end
33
+
34
+ searcher.mock_file do |f|
35
+ f.path "file_2_test.rb"
36
+ f.mtime Time.now
37
+ f.contents <<-RB
38
+ class MultipleMatches1Test
39
+ def test__different_files
40
+ end
41
+ end
42
+ RB
43
+ end
44
+
45
+ searcher.mock_file do |f|
46
+ f.path "multiple_matches_2_test.rb"
47
+ f.mtime Time.now
48
+ f.contents <<-RB
49
+ class MultipleMatches2Test
50
+ def test__1
51
+ multiple_matches_2
52
+ end
53
+
54
+ def test__2
55
+ multiple_matches_2
56
+ end
57
+ end
58
+ RB
59
+ end
60
+ end
61
+ end
62
+
63
+ def searcher
64
+ @searcher ||= Frameworks::Minitest::Searcher.new(raw_searcher)
65
+ end
66
+
67
+ def runner
68
+ @runner ||= MockRunner.new do |m|
69
+
70
+ m.impl :single_example do |test_case|
71
+ "single_example #{test_case.file} #{test_case.example}"
72
+ end
73
+
74
+ m.impl :multiple_examples_same_file do |test_cases|
75
+ "multiple_examples_same_file #{test_cases.first.file} #{test_cases.first.example}"
76
+ end
77
+
78
+ m.impl :multiple_files do |test_cases|
79
+ "multiple_files #{test_cases.map(&:file).join(" ")}"
80
+ end
81
+ end
82
+ end
83
+
84
+ def test_command__example_not_found__returns_nil
85
+ request = MockRequest.new(
86
+ search_string: "not_found",
87
+ searcher: searcher
88
+ )
89
+
90
+ command = ExampleNameQuery.new(request, default_command_finder).command
91
+
92
+ assert_equal nil, command
93
+ end
94
+
95
+ def test_command__one_example_found
96
+ request = MockRequest.new(
97
+ search_string: "one_example",
98
+ searcher: searcher,
99
+ runner: runner,
100
+ shell: default_shell
101
+ )
102
+
103
+ command = ExampleNameQuery.new(request, default_command_finder).command
104
+
105
+ assert_equal "single_example file_1_test.rb one_example", command
106
+ end
107
+
108
+ def test_command__one_example_found__notifies
109
+ request = MockRequest.new(
110
+ search_string: "one_example",
111
+ searcher: searcher,
112
+ runner: runner,
113
+ shell: default_shell
114
+ )
115
+
116
+ command = ExampleNameQuery.new(request, default_command_finder).command
117
+
118
+ messages = [
119
+ ["Found 1 example in 1 file."],
120
+ ]
121
+ assert_equal messages, default_shell.recall(:notify)
122
+ end
123
+
124
+ def test_command__multiple_examples__one_file
125
+ request = MockRequest.new(
126
+ search_string: "same_file",
127
+ searcher: searcher,
128
+ runner: runner,
129
+ shell: default_shell
130
+ )
131
+
132
+ command = ExampleNameQuery.new(request, default_command_finder).command
133
+
134
+ assert_equal "multiple_examples_same_file file_1_test.rb same_file", command
135
+ end
136
+
137
+ def test_command__multiple_examples__one_file__notifies
138
+ request = MockRequest.new(
139
+ search_string: "same_file",
140
+ searcher: searcher,
141
+ runner: runner,
142
+ shell: default_shell
143
+ )
144
+
145
+ command = ExampleNameQuery.new(request, default_command_finder).command
146
+
147
+ messages = [
148
+ ["Found 2 examples in 1 file."],
149
+ ]
150
+ assert_equal messages, default_shell.recall(:notify)
151
+ end
152
+
153
+ def test_command__multiple_examples__multiple_files__no_all
154
+ request = MockRequest.new(
155
+ search_string: "different_files",
156
+ searcher: searcher,
157
+ runner: runner,
158
+ shell: default_shell,
159
+ run_all?: false
160
+ )
161
+
162
+ command = ExampleNameQuery.new(request, default_command_finder).command
163
+
164
+ assert_equal "single_example file_2_test.rb different_files", command
165
+ end
166
+
167
+ def test_command__multiple_examples__multiple_files__no_all__notifies
168
+ request = MockRequest.new(
169
+ search_string: "different_files",
170
+ searcher: searcher,
171
+ runner: runner,
172
+ shell: default_shell,
173
+ run_all?: false
174
+ )
175
+
176
+ command = ExampleNameQuery.new(request, default_command_finder).command
177
+
178
+ messages = [
179
+ ["Found 2 examples in 2 files."],
180
+ ["Running most recently edited. Run with '--all' to run all the tests."],
181
+ ]
182
+ assert_equal messages, default_shell.recall(:notify)
183
+ end
184
+
185
+ def test_command__multiple_examples__multiple_files__all
186
+ request = MockRequest.new(
187
+ search_string: "different_files",
188
+ searcher: searcher,
189
+ runner: runner,
190
+ shell: default_shell,
191
+ run_all?: true
192
+ )
193
+
194
+ command = ExampleNameQuery.new(request, default_command_finder).command
195
+
196
+ assert_equal "multiple_files file_1_test.rb file_2_test.rb", command
197
+ end
198
+
199
+ def test_command__multiple_examples__multiple_files__all__notifies
200
+ request = MockRequest.new(
201
+ search_string: "different_files",
202
+ searcher: searcher,
203
+ runner: runner,
204
+ shell: default_shell,
205
+ run_all?: true
206
+ )
207
+
208
+ command = ExampleNameQuery.new(request, default_command_finder).command
209
+
210
+ messages = [
211
+ ["Found 2 examples in 2 files."],
212
+ ]
213
+ assert_equal messages, default_shell.recall(:notify)
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,153 @@
1
+ require "test_helper"
2
+ require "test_helpers/mocks"
3
+ require "test_launcher/queries"
4
+ require "test_launcher/frameworks/minitest"
5
+
6
+ module TestLauncher
7
+ module Queries
8
+ class FullRegexQueryTest < TestCase
9
+ include DefaultMocks
10
+
11
+ def raw_searcher
12
+ @raw_searcher ||= MemorySearcher.new do |searcher|
13
+ searcher.mock_file do |f|
14
+ f.path "single_test.rb"
15
+ f.contents <<-RB
16
+ class SingleTest
17
+ def test__1
18
+ matches_single
19
+ end
20
+ end
21
+ RB
22
+ end
23
+
24
+ searcher.mock_file do |f|
25
+ f.path "multiple_matches_1_test.rb"
26
+ f.mtime Time.now - 3000
27
+ f.contents <<-RB
28
+ class MultipleMatches1Test
29
+ def test__1
30
+ multiple_matches_1
31
+ end
32
+
33
+ def test__2
34
+ multiple_matches_1
35
+ end
36
+ end
37
+ RB
38
+ end
39
+
40
+ searcher.mock_file do |f|
41
+ f.path "multiple_matches_2_test.rb"
42
+ f.mtime Time.now
43
+ f.contents <<-RB
44
+ class MultipleMatches2Test
45
+ def test__1
46
+ multiple_matches_2
47
+ end
48
+
49
+ def test__2
50
+ multiple_matches_2
51
+ end
52
+ end
53
+ RB
54
+ end
55
+ end
56
+ end
57
+
58
+ def searcher
59
+ @searcher ||= Frameworks::Minitest::Searcher.new(raw_searcher)
60
+ end
61
+
62
+ def runner
63
+ @runner ||= MockRunner.new do |m|
64
+ m.impl :single_file do |test_case|
65
+ case test_case.file
66
+ when "single_test.rb"
67
+ "single_file single_test.rb"
68
+ when "multiple_matches_1_test.rb"
69
+ "single_file multiple_matches_1_test.rb"
70
+ when "multiple_matches_2_test.rb"
71
+ "single_file multiple_matches_2_test.rb"
72
+ else
73
+ raise "unmocked single_file: #{test_case.file}"
74
+ end
75
+ end
76
+
77
+ m.impl :multiple_files do |test_cases|
78
+ case test_cases.map(&:file)
79
+ when ["multiple_matches_1_test.rb", "multiple_matches_2_test.rb"]
80
+ "multiple_files multiple_matches_1_test.rb multiple_matches_2_test.rb"
81
+ else
82
+ raise "unmocked multiple_files: #{test_cases}"
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ def test_command__regex_not_found
89
+ request = MockRequest.new(
90
+ search_string: "not_found",
91
+ searcher: searcher
92
+ )
93
+
94
+ command = FullRegexQuery.new(request, default_command_finder).command
95
+ assert_equal nil, command
96
+ end
97
+
98
+ def test_command__single_match
99
+ request = MockRequest.new(
100
+ search_string: "single",
101
+ searcher: searcher,
102
+ runner: runner,
103
+ shell: default_shell
104
+ )
105
+
106
+ command = FullRegexQuery.new(request, default_command_finder).command
107
+
108
+ assert_equal "single_file single_test.rb", command
109
+ end
110
+
111
+ def test_command__multiple_matches_same_file
112
+ request = MockRequest.new(
113
+ search_string: "multiple_matches_1",
114
+ searcher: searcher,
115
+ runner: runner,
116
+ shell: default_shell
117
+ )
118
+
119
+ command = FullRegexQuery.new(request, default_command_finder).command
120
+
121
+ assert_equal "single_file multiple_matches_1_test.rb", command
122
+ end
123
+
124
+ def test_command__multiple_matches_different_files__no_all
125
+ request = MockRequest.new(
126
+ search_string: "multiple_matches",
127
+ searcher: searcher,
128
+ runner: runner,
129
+ shell: default_shell,
130
+ run_all?: false
131
+ )
132
+
133
+ command = FullRegexQuery.new(request, default_command_finder).command
134
+
135
+ assert_equal "single_file multiple_matches_2_test.rb", command
136
+ end
137
+
138
+ def test_command__multiple_matches_different_files__all
139
+ request = MockRequest.new(
140
+ search_string: "multiple_matches",
141
+ searcher: searcher,
142
+ runner: runner,
143
+ shell: default_shell,
144
+ run_all?: true
145
+ )
146
+
147
+ command = FullRegexQuery.new(request, default_command_finder).command
148
+
149
+ assert_equal "multiple_files multiple_matches_1_test.rb multiple_matches_2_test.rb", command
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,23 @@
1
+ require "test_helper"
2
+ require "test_helpers/mocks"
3
+ require "test_launcher/queries"
4
+
5
+ module TestLauncher
6
+ module Queries
7
+ class GenericQueryTest < TestCase
8
+ include DefaultMocks
9
+
10
+ def test__specified_name
11
+ command_finder = Mock.new(Queries::CommandFinder, specified_name: :specified_name)
12
+
13
+ assert_equal :specified_name, GenericQuery.new(MockRequest.new(example_name: "name_present"), command_finder).command
14
+ end
15
+
16
+ def test__example_name
17
+ command_finder = Mock.new(Queries::CommandFinder, full_search: :full_search)
18
+
19
+ assert_equal :full_search, GenericQuery.new(MockRequest.new(example_name: nil), command_finder).command
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,107 @@
1
+ require "test_helper"
2
+ require "test_helpers/mocks"
3
+ require "test_launcher/queries"
4
+
5
+ module TestLauncher
6
+ module Queries
7
+ class LineNumberQueryTest < TestCase
8
+ include DefaultMocks
9
+
10
+ def searcher
11
+ @searcher ||= MockSearcher.new do |m|
12
+ m.impl :by_line do |file, line_number|
13
+ case [file, line_number]
14
+ when ["not_found", 1]
15
+ nil
16
+ when ["found", 17]
17
+ {file: "found", example_name: "test_example", line_number: 14}
18
+ when ["found", 1]
19
+ {file: "found"}
20
+ when ["found", 9999]
21
+ raise "invalid line number"
22
+ when ["multiple", 1]
23
+ raise "multiple files matched with line query"
24
+ else
25
+ raise "unmocked search_string: #{file}, #{line_number}"
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def create_mock_request(**attrs)
32
+ MockRequest.new(**attrs) do |m|
33
+ m.impl(:test_case) do |file:, example: nil, request:, line_number: nil|
34
+ case [file, example]
35
+ when ["found", nil]
36
+ whole_file_test_case
37
+ when ["found", "test_example"]
38
+ example_name_test_case
39
+ else
40
+ raise "unmocked file: #{file}"
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ def whole_file_test_case
47
+ @whole_file_test_case ||= MockTestCase.new(file: "found")
48
+ end
49
+
50
+ def example_name_test_case
51
+ @example_name_test_case ||= MockTestCase.new(file: "found", example_name: "test_example")
52
+ end
53
+
54
+ def test_command__file_not_found
55
+ request = create_mock_request(
56
+ search_string: "not_found:1",
57
+ searcher: searcher
58
+ )
59
+
60
+ command = LineNumberQuery.new(request, default_command_finder).command
61
+ assert_equal nil, command
62
+ end
63
+
64
+ def test_command__search_string_does_not_have_colon
65
+ request = create_mock_request(
66
+ search_string: "not_found",
67
+ searcher: searcher
68
+ )
69
+
70
+ command = LineNumberQuery.new(request, default_command_finder).command
71
+
72
+ assert_equal nil, command
73
+ end
74
+
75
+ def test_command__file_found__line_number_not_in_example
76
+ request = create_mock_request(
77
+ search_string: "found:1",
78
+ searcher: searcher,
79
+ runner: default_runner,
80
+ shell: default_shell
81
+ )
82
+
83
+ command = LineNumberQuery.new(request, default_command_finder).command
84
+
85
+ assert_equal [[whole_file_test_case]], default_runner.recall(:single_file)
86
+
87
+ assert_equal "single_file_return", command
88
+ end
89
+
90
+
91
+ def test_command__file_found__line_number_inside_example
92
+ request = create_mock_request(
93
+ search_string: "found:17",
94
+ searcher: searcher,
95
+ runner: default_runner,
96
+ shell: default_shell
97
+ )
98
+
99
+ command = LineNumberQuery.new(request, default_command_finder).command
100
+
101
+ assert_equal [[example_name_test_case]], default_runner.recall(:single_example)
102
+
103
+ assert_equal "single_example_return", command
104
+ end
105
+ end
106
+ end
107
+ end