retest 1.10.0 → 1.11.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec0496e89c678c022c2e9f07edc70d9bb9f10e80ff9be3079ea1c00242e35920
4
- data.tar.gz: a8b2c71b0be9ed265a1c04d1276c9a2ad84919a5349956fcaa5c5b497d241445
3
+ metadata.gz: 1e115f99996becceaa5a11f81f938afa18571c8bdcb3e3fe5e500bb4d2eaa647
4
+ data.tar.gz: 003bfb6679ddcfc531666fe397121170926248792503834f14e79566022da274
5
5
  SHA512:
6
- metadata.gz: c1754d242669324f364419af2718449fb337435596079f3bce0b8ba54cce782af9480f1eb98635cf3e84901c0e478aaeeefa6e59d4c2953807dfb9ce54efbe14
7
- data.tar.gz: 27771c70fada9ebcd67460982bf0d2a1d5b1440eee17b58328a674a5cba2e54fa3b2ab63a3e61c0a96634e4e5567a8ac3c8bd6b89b5e119a432dc0fecb7cdb48
6
+ metadata.gz: 7c71cb0291862bdd2cdda6ca37a7d199b6ad95c48812ff099e26ceef5505bb138cd01ea230fcbf7627c051de1760393850f129c59066f4ca45db21310114bf66
7
+ data.tar.gz: eac9a20b762eea7d8706d4754f2894659c8aafb4f3930d99d8d5b730fe1e47ae4341538bf1616569e3d01f9a8555b3b1ec5c33be60c4db699d13d639947de285
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
data/Gemfile CHANGED
@@ -3,6 +3,6 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in retest.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
6
+ gem "rake", "~> 13.0"
7
7
  gem "minitest", "~> 5.0"
8
8
  gem "byebug"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (1.10.0)
4
+ retest (1.11.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
@@ -11,16 +11,16 @@ GEM
11
11
  specs:
12
12
  byebug (11.1.3)
13
13
  ffi (1.15.5)
14
- listen (3.7.1)
14
+ listen (3.8.0)
15
15
  rb-fsevent (~> 0.10, >= 0.10.3)
16
16
  rb-inotify (~> 0.9, >= 0.9.10)
17
17
  minitest (5.15.0)
18
- rake (12.3.3)
18
+ rake (13.0.6)
19
19
  rb-fsevent (0.11.2)
20
20
  rb-inotify (0.10.1)
21
21
  ffi (~> 1.0)
22
22
  string-similarity (2.1.0)
23
- tty-option (0.2.0)
23
+ tty-option (0.3.0)
24
24
 
25
25
  PLATFORMS
26
26
  ruby
@@ -28,8 +28,8 @@ PLATFORMS
28
28
  DEPENDENCIES
29
29
  byebug
30
30
  minitest (~> 5.0)
31
- rake (~> 12.0)
31
+ rake (~> 13.0)
32
32
  retest!
33
33
 
34
34
  BUNDLED WITH
35
- 2.1.4
35
+ 2.3.22
@@ -0,0 +1,60 @@
1
+ require 'forwardable'
2
+
3
+ module Retest
4
+ class MatchingOptions
5
+ class Path
6
+ extend Forwardable
7
+
8
+ def_delegators :pathname, :to_s, :basename, :extname, :dirname
9
+
10
+ attr_reader :pathname
11
+ def initialize(path)
12
+ @pathname = Pathname(path)
13
+ end
14
+
15
+ def reversed_dirnames
16
+ @reversed_dirnames ||= dirnames.reverse
17
+ end
18
+
19
+ def dirnames
20
+ @dirnames ||= dirname.each_filename.to_a
21
+ end
22
+
23
+ def test?(test_directories: nil)
24
+ if test_directories && (test_directories & dirnames).empty?
25
+ return false
26
+ end
27
+
28
+ test_regexs.any? { |regex| regex =~ to_s }
29
+ end
30
+
31
+ def possible_test?(file)
32
+ possible_test_regexs.any? { |regex| regex =~ file }
33
+ end
34
+
35
+ def similarity_score(file)
36
+ String::Similarity.levenshtein(to_s, file)
37
+ end
38
+
39
+ private
40
+
41
+ def test_regexs
42
+ [
43
+ Regexp.new("^(.*\/)?.*_(?:spec|test)#{extname}$"),
44
+ Regexp.new("^(.*\/)?(?:spec|test)_.*#{extname}$"),
45
+ ]
46
+ end
47
+
48
+ def possible_test_regexs
49
+ [
50
+ Regexp.new("^(.*\/)?.*#{filename}_(?:spec|test)#{extname}$"),
51
+ Regexp.new("^(.*\/)?.*(?:spec|test)_#{filename}#{extname}$"),
52
+ ]
53
+ end
54
+
55
+ def filename
56
+ basename(extname)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'matching_options/path'
2
+
3
+ module Retest
4
+ class MatchingOptions
5
+ def self.for(path, files: [], limit: nil)
6
+ new(path, files: files, limit: limit).filtered_results
7
+ end
8
+
9
+ attr_reader :path, :files, :test_directories
10
+
11
+ def initialize(path, files: [], limit: 5, test_directories: nil)
12
+ @path = Path.new(path)
13
+ @files = files
14
+ @limit = limit || 5
15
+ @test_directories = (test_directories || %w[spec test]) + %w[.] # add root file as a valid test directory
16
+ end
17
+
18
+ def filtered_results
19
+ if path.test?(test_directories: test_directories)
20
+ [path]
21
+ elsif (screened_tests = screen_namespaces(possible_tests)).any?
22
+ screened_tests
23
+ else
24
+ possible_tests
25
+ end.map(&:to_s)
26
+ end
27
+
28
+ private
29
+
30
+ def possible_tests
31
+ @possible_tests ||= files
32
+ .select { |file| path.possible_test?(file) }
33
+ .sort_by { |file| [-path.similarity_score(file), file] }
34
+ .first(@limit)
35
+ end
36
+
37
+ def screen_namespaces(files)
38
+ test_files = files
39
+ .map { |file| Path.new(file) }
40
+ .select { |path| (path.reversed_dirnames & test_directories).any? }
41
+
42
+ path
43
+ .reversed_dirnames
44
+ .each
45
+ .with_index
46
+ .with_object(test_files) do |(dirname, index), tests|
47
+ break tests if tests.count <= 1
48
+
49
+ tests.keep_if { |test| test.reversed_dirnames[index] == dirname }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,47 @@
1
+ module Retest
2
+ class Prompt
3
+ def self.ask_which_test_to_use(path, files)
4
+ new.ask_which_test_to_use(path, files)
5
+ end
6
+
7
+ def self.puts(*args)
8
+ new.puts(*args)
9
+ end
10
+
11
+ attr_accessor :input, :output
12
+ def initialize(input: nil, output: nil)
13
+ @input = input || $stdin
14
+ @output = output || $stdout
15
+ end
16
+
17
+ def ask_which_test_to_use(path, files)
18
+ output.puts(<<~QUESTION)
19
+ We found few tests matching: #{path}
20
+
21
+ #{list_options(files)}
22
+
23
+ Which file do you want to use?
24
+ Enter the file number now:
25
+ QUESTION
26
+
27
+ files[input.gets.chomp.to_i]
28
+ end
29
+
30
+ def puts(*args)
31
+ output.puts(*args)
32
+ end
33
+
34
+ def read_output
35
+ output.tap(&:rewind).read
36
+ end
37
+
38
+ private
39
+
40
+ def list_options(files)
41
+ files
42
+ .map
43
+ .with_index { |file, index| "[#{index}] - #{file}" }
44
+ .join("\n")
45
+ end
46
+ end
47
+ end
@@ -1,12 +1,11 @@
1
1
  module Retest
2
2
  class Repository
3
- attr_accessor :files, :cache, :stdin, :stdout
3
+ attr_accessor :files, :cache, :prompt
4
4
 
5
- def initialize(files: [], cache: {}, stdin: $stdin, stdout: $stdout)
5
+ def initialize(files: [], cache: {}, prompt: nil)
6
6
  @cache = cache
7
7
  @files = files
8
- @stdin = stdin
9
- @stdout = stdout
8
+ @prompt = prompt || Prompt.new
10
9
  end
11
10
 
12
11
  def find_test(path)
@@ -14,7 +13,7 @@ module Retest
14
13
  return if path.empty?
15
14
 
16
15
  @path = path
17
- cache[@path] ||= select_from TestOptions.for(@path, files: files)
16
+ cache[@path] ||= select_from MatchingOptions.for(@path, files: files)
18
17
  end
19
18
 
20
19
  def find_tests(paths)
@@ -55,29 +54,8 @@ module Retest
55
54
  when 0, 1
56
55
  tests.first
57
56
  else
58
- ask_question tests
59
- tests[get_input]
57
+ prompt.ask_which_test_to_use(@path, tests)
60
58
  end
61
59
  end
62
-
63
- def ask_question(tests)
64
- stdout.puts(<<~QUESTION)
65
- We found few tests matching: #{@path}
66
- #{list_options(tests)}
67
-
68
- Which file do you want to use?
69
- Enter the file number now:
70
- QUESTION
71
- end
72
-
73
- def list_options(tests)
74
- tests.map.with_index do |file, index|
75
- "[#{index}] - #{file}"
76
- end.join("\n")
77
- end
78
-
79
- def get_input
80
- stdin.gets.chomp.to_i
81
- end
82
60
  end
83
61
  end
@@ -0,0 +1,23 @@
1
+ module Retest
2
+ module Runners
3
+ module CachedTestFile
4
+ def cached_test_file
5
+ @cached_test_file
6
+ end
7
+
8
+ def cached_test_file=(value)
9
+ @cached_test_file = value || @cached_test_file
10
+ end
11
+
12
+ def purge_test_file(purged)
13
+ return if purged.empty?
14
+
15
+ if purged.is_a?(Array) && purged.include?(cached_test_file)
16
+ @cached_test_file = nil
17
+ elsif purged.is_a?(String) && purged == cached_test_file
18
+ @cached_test_file = nil
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -2,15 +2,19 @@ module Retest
2
2
  module Runners
3
3
  class ChangeRunner < Runner
4
4
  def run(changed_file = nil, repository: nil)
5
- if changed_file
6
- log("Changed File Selected: #{changed_file}")
7
- system_run command.gsub('<changed>', changed_file)
8
- else
9
- log(<<~ERROR)
10
- 404 - Test File Not Found
11
- Retest could not find a changed file to run.
12
- ERROR
13
- end
5
+ return print_file_not_found unless changed_file
6
+
7
+ log("Changed File Selected: #{changed_file}")
8
+ system_run command.gsub('<changed>', changed_file)
9
+ end
10
+
11
+ private
12
+
13
+ def print_file_not_found
14
+ log(<<~ERROR)
15
+ 404 - File Not Found
16
+ Retest could not find a changed file to run.
17
+ ERROR
14
18
  end
15
19
  end
16
20
  end
@@ -1,46 +1,30 @@
1
+ require_relative "cached_test_file"
2
+
1
3
  module Retest
2
4
  module Runners
3
5
  class TestRunner < Runner
4
- def cached_test_file
5
- @cached_test_file
6
- end
7
-
8
- def cached_test_file=(value)
9
- @cached_test_file = value || @cached_test_file
10
- end
6
+ include CachedTestFile
11
7
 
12
8
  def run(changed_file, repository:)
13
9
  self.cached_test_file = repository.find_test(changed_file)
14
10
 
15
- if cached_test_file
16
- log("Test File Selected: #{cached_test_file}")
17
- system_run command.gsub('<test>', cached_test_file)
18
- else
19
- log(<<~ERROR)
20
- 404 - Test File Not Found
21
- Retest could not find a matching test file to run.
22
- ERROR
23
- end
11
+ return print_file_not_found unless cached_test_file
12
+
13
+ log("Test File Selected: #{cached_test_file}")
14
+ system_run command.gsub('<test>', cached_test_file)
24
15
  end
25
16
 
26
17
  def sync(added:, removed:)
27
- remove(removed)
18
+ purge_test_file(removed)
28
19
  end
29
20
 
30
21
  private
31
22
 
32
- def remove(purged)
33
- return if purged.empty?
34
-
35
- if purged.is_a? Array
36
- purge_cache if purged.include? cached_test_file
37
- elsif purged.is_a? String
38
- purge_cache if purged == cached_test_file
39
- end
40
- end
41
-
42
- def purge_cache
43
- @cached_test_file = nil
23
+ def print_file_not_found
24
+ log(<<~ERROR)
25
+ 404 - Test File Not Found
26
+ Retest could not find a matching test file to run.
27
+ ERROR
44
28
  end
45
29
  end
46
30
  end
@@ -1,18 +1,14 @@
1
+ require_relative "cached_test_file"
2
+
1
3
  module Retest
2
4
  module Runners
3
5
  class VariableRunner < Runner
4
- def cached_test_file
5
- @cached_test_file
6
- end
7
-
8
- def cached_test_file=(value)
9
- @cached_test_file = value || @cached_test_file
10
- end
6
+ include CachedTestFile
11
7
 
12
8
  def run(changed_file, repository:)
13
9
  self.cached_test_file = repository.find_test(changed_file)
14
10
 
15
- return print_test_file_not_found unless cached_test_file
11
+ return print_file_not_found unless cached_test_file
16
12
 
17
13
  log(<<~FILES)
18
14
  Files Selected:
@@ -27,31 +23,17 @@ module Retest
27
23
  end
28
24
 
29
25
  def sync(added:, removed:)
30
- remove(removed)
26
+ purge_test_file(removed)
31
27
  end
32
28
 
33
29
  private
34
30
 
35
- def print_test_file_not_found
31
+ def print_file_not_found
36
32
  log(<<~ERROR)
37
33
  404 - Test File Not Found
38
34
  Retest could not find a matching test file to run.
39
35
  ERROR
40
36
  end
41
-
42
- def remove(purged)
43
- return if purged.empty?
44
-
45
- if purged.is_a? Array
46
- purge_cache if purged.include? cached_test_file
47
- elsif purged.is_a? String
48
- purge_cache if purged == cached_test_file
49
- end
50
- end
51
-
52
- def purge_cache
53
- @cached_test_file = nil
54
- end
55
37
  end
56
38
  end
57
39
  end
@@ -8,14 +8,13 @@ module Retest
8
8
  module_function
9
9
 
10
10
  def runner_for(command)
11
- if command.include?('<test>') && command.include?('<changed>')
12
- VariableRunner
13
- elsif command.include?('<test>')
14
- TestRunner
15
- elsif command.include?('<changed>')
16
- ChangeRunner
17
- else
18
- Runner
11
+ for_test = command.include?('<test>')
12
+ for_change = command.include?('<changed>')
13
+
14
+ if for_test && for_change then VariableRunner
15
+ elsif for_test then TestRunner
16
+ elsif for_change then ChangeRunner
17
+ else Runner
19
18
  end.new command
20
19
  end
21
20
  end
data/lib/retest/setup.rb CHANGED
@@ -1,21 +1,13 @@
1
1
  module Retest
2
2
  class Setup
3
- def self.type
4
- new.type
5
- end
6
-
7
3
  def type
8
4
  @type ||= begin
9
5
  return :ruby unless has_lock_file?
10
6
 
11
- if rspec?
12
- :rspec
13
- elsif rails?
14
- :rails
15
- elsif rake?
16
- :rake
17
- else
18
- :ruby
7
+ if rspec? then :rspec
8
+ elsif rails? then :rails
9
+ elsif rake? then :rake
10
+ else :ruby
19
11
  end
20
12
  end
21
13
  end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "1.10.0"
2
+ VERSION = "1.11.0"
3
3
  end
@@ -1,33 +1,32 @@
1
- class Retest::VersionControl
2
- class Git
3
- def self.installed?
4
- system "git -C . rev-parse 2>/dev/null"
5
- end
1
+ module Retest
2
+ module VersionControl
3
+ module Git
6
4
 
7
- def self.diff_files(branch)
8
- new.diff_files(branch)
9
- end
5
+ module_function
10
6
 
11
- def name
12
- 'git'
13
- end
7
+ def installed?
8
+ system "git -C . rev-parse 2>/dev/null"
9
+ end
14
10
 
15
- def files
16
- (untracked_files + tracked_files).sort
17
- end
11
+ def name
12
+ 'git'
13
+ end
18
14
 
19
- def diff_files(branch)
20
- `git diff #{branch} --name-only --diff-filter=ACMRT -z`.split("\x0")
21
- end
15
+ def files
16
+ (untracked_files + tracked_files).sort
17
+ end
22
18
 
23
- private
19
+ def diff_files(branch)
20
+ `git diff #{branch} --name-only --diff-filter=ACMRT -z`.split("\x0")
21
+ end
24
22
 
25
- def untracked_files
26
- `git ls-files --other --exclude-standard -z`.split("\x0")
27
- end
23
+ def untracked_files
24
+ `git ls-files --other --exclude-standard -z`.split("\x0")
25
+ end
28
26
 
29
- def tracked_files
30
- `git ls-files -z`.split("\x0")
27
+ def tracked_files
28
+ `git ls-files -z`.split("\x0")
29
+ end
31
30
  end
32
31
  end
33
- end
32
+ end
@@ -1,15 +1,20 @@
1
- class Retest::VersionControl
2
- class NoVersionControl
3
- def self.installed?
4
- true
5
- end
1
+ module Retest
2
+ module VersionControl
3
+ module NoVersionControl
6
4
 
7
- def name
8
- 'default'
9
- end
5
+ module_function
6
+
7
+ def installed?
8
+ true
9
+ end
10
+
11
+ def name
12
+ 'default'
13
+ end
10
14
 
11
- def files
12
- Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
15
+ def files
16
+ Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
17
+ end
13
18
  end
14
19
  end
15
- end
20
+ end
@@ -2,12 +2,12 @@ require_relative 'version_control/git'
2
2
  require_relative 'version_control/no_version_control'
3
3
 
4
4
  module Retest
5
- class VersionControl
6
- def self.files
7
- [Git, NoVersionControl].select(&:installed?).first.new.files
8
- end
5
+ module VersionControl
6
+
7
+ module_function
9
8
 
10
- def name; end
11
- alias :to_s :name
9
+ def files
10
+ [Git, NoVersionControl].find(&:installed?).files
11
+ end
12
12
  end
13
13
  end
data/lib/retest.rb CHANGED
@@ -5,13 +5,14 @@ require 'observer'
5
5
  require "retest/version"
6
6
  require "retest/runners"
7
7
  require "retest/repository"
8
- require "retest/test_options"
8
+ require "retest/matching_options"
9
9
  require "retest/options"
10
10
  require "retest/version_control"
11
11
  require "retest/setup"
12
12
  require "retest/command"
13
13
  require "retest/file_system"
14
14
  require "retest/program"
15
+ require "retest/prompt"
15
16
  require "retest/sounds"
16
17
 
17
18
  module Retest
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Barret
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-01 00:00:00.000000000 Z
11
+ date: 2023-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -60,6 +60,7 @@ executables:
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - ".github/dependabot.yml"
63
64
  - ".github/workflows/ci.yml"
64
65
  - ".gitignore"
65
66
  - Gemfile
@@ -87,17 +88,20 @@ files:
87
88
  - lib/retest/command/rspec.rb
88
89
  - lib/retest/command/ruby.rb
89
90
  - lib/retest/file_system.rb
91
+ - lib/retest/matching_options.rb
92
+ - lib/retest/matching_options/path.rb
90
93
  - lib/retest/options.rb
91
94
  - lib/retest/program.rb
95
+ - lib/retest/prompt.rb
92
96
  - lib/retest/repository.rb
93
97
  - lib/retest/runners.rb
98
+ - lib/retest/runners/cached_test_file.rb
94
99
  - lib/retest/runners/change_runner.rb
95
100
  - lib/retest/runners/runner.rb
96
101
  - lib/retest/runners/test_runner.rb
97
102
  - lib/retest/runners/variable_runner.rb
98
103
  - lib/retest/setup.rb
99
104
  - lib/retest/sounds.rb
100
- - lib/retest/test_options.rb
101
105
  - lib/retest/version.rb
102
106
  - lib/retest/version_control.rb
103
107
  - lib/retest/version_control/git.rb
@@ -124,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
128
  - !ruby/object:Gem::Version
125
129
  version: '0'
126
130
  requirements: []
127
- rubygems_version: 3.3.7
131
+ rubygems_version: 3.4.6
128
132
  signing_key:
129
133
  specification_version: 4
130
134
  summary: A simple command line tool to watch file change and run its matching spec.
@@ -1,98 +0,0 @@
1
- require 'forwardable'
2
-
3
- module Retest
4
- class TestOptions
5
- def self.for(path, files: [], limit: nil)
6
- new(path, files: files, limit: limit).filtered_results
7
- end
8
-
9
- attr_reader :path, :files
10
-
11
- def initialize(path, files: [], limit: 5)
12
- @path = Path.new(path)
13
- @files = files
14
- @limit = limit || 5
15
- end
16
-
17
- def filtered_results
18
- if path.test?
19
- [path]
20
- elsif namespace_screens.any?
21
- namespace_screens
22
- else
23
- possible_tests
24
- end.map(&:to_s)
25
- end
26
-
27
- private
28
-
29
- def possible_tests
30
- @possible_tests ||= filter_by_string_similarities(path, files)
31
- .last(@limit)
32
- .reverse
33
- end
34
-
35
- def filter_by_string_similarities(path, files)
36
- files.select { |file| path.possible_test?(file) }
37
- .sort_by { |file| [path.similarity_score(file), file] }
38
- end
39
-
40
- def namespace_screens
41
- @namespace_screens ||= path
42
- .reversed_dirnames
43
- .each_with_index
44
- .with_object(possible_tests.map { |file| Path.new(file) }) do |(reference, index), result|
45
- unless [1, 0].include? result.count
46
- result.keep_if { |path| path.reversed_dirnames[index] == reference }
47
- end
48
- end
49
- end
50
-
51
- class Path
52
- extend Forwardable
53
-
54
- def_delegators :pathname, :to_s, :basename, :extname, :dirname
55
-
56
- attr_reader :pathname
57
- def initialize(path)
58
- @pathname = Pathname(path)
59
- end
60
-
61
- def reversed_dirnames
62
- @reversed_dirnames ||= dirname.each_filename.to_a.reverse
63
- end
64
-
65
- def test?
66
- test_regexs.any? { |regex| regex =~ to_s }
67
- end
68
-
69
- def possible_test?(file)
70
- possible_test_regexs.any? { |regex| regex =~ file }
71
- end
72
-
73
- def similarity_score(file)
74
- String::Similarity.levenshtein(to_s, file)
75
- end
76
-
77
- private
78
-
79
- def test_regexs
80
- [
81
- Regexp.new("^(.*\/)?.*_(?:spec|test)#{extname}$"),
82
- Regexp.new("^(.*\/)?(?:spec|test)_.*#{extname}$"),
83
- ]
84
- end
85
-
86
- def possible_test_regexs
87
- [
88
- Regexp.new("^(.*\/)?.*#{filename}_(?:spec|test)#{extname}$"),
89
- Regexp.new("^(.*\/)?.*(?:spec|test)_#{filename}#{extname}$"),
90
- ]
91
- end
92
-
93
- def filename
94
- basename(extname)
95
- end
96
- end
97
- end
98
- end