retest 1.4.0 → 1.5.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: 5c5dc87b26d27197158d859e17e179f9dc0b00ec2280dfefff165da388c77eb6
4
- data.tar.gz: cffbfbf72ea1b51e7f63e288fba08727498ec582192536a54ad9d2b47f04d1d2
3
+ metadata.gz: ce75120a1212540c1e510e4fd3d28e505f68d79e4e557b48e34cfda769d35613
4
+ data.tar.gz: ff2a3cc3644ce392adb38d8a87ffea711bbc6baaeb20f70099b2c0771cce3cf6
5
5
  SHA512:
6
- metadata.gz: ad4051278ba14ff9f7284de5f8f643bdec7512864bb330aac803f6e3c672cc24f5584eb4b26be9f4a2b533a229fd5366a0eece8b4aa53eb816ff3e9c6575f200
7
- data.tar.gz: 3b52308adcef24e6098f40ee07d55848f39104838c4db404394ee33a8ffe38466478cd18f347aa73b3a0072fc0c263592a9eecf1ed98e459345be160c02ed30f
6
+ metadata.gz: 6741101b8345dfcba37002b1265d6ed5170c8b82eccc8a143b20a7fb77d196f05b9c4b4af142a7fed62952aa5251769523243c997884334cc8a3d484f93f3207
7
+ data.tar.gz: 3c4f2484eb2400a47d35c22a33f6db47ede1e0fc401dccdede644114f90bc2765f1e1e6df5b2fea7e761d77983a863f2c917cfb5afd71ffabd89e884f1ad85c6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (1.4.0)
4
+ retest (1.5.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
data/bin/debug CHANGED
@@ -15,7 +15,7 @@ end
15
15
 
16
16
  repository = Retest::Repository.new(files: Retest::VersionControl.files)
17
17
  command = Retest::Command.for_options(options)
18
- runner = Retest::Runner.for(command.to_s)
18
+ runner = Retest::Runners.runner_for(command.to_s)
19
19
 
20
20
  program = Retest::Program.new(
21
21
  extension: options.extension,
data/exe/retest CHANGED
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  repository = Retest::Repository.new(files: Retest::VersionControl.files)
15
15
  command = Retest::Command.for_options(options)
16
- runner = Retest::Runner.for(command.to_s)
16
+ runner = Retest::Runners.runner_for(command.to_s)
17
17
 
18
18
  program = Retest::Program.new(
19
19
  extension: options.extension,
@@ -13,8 +13,8 @@ module Retest
13
13
  root_command
14
14
  end
15
15
 
16
- def run_all(*files, runner:)
17
- runner.run files.join(' ')
16
+ def format_batch(*files)
17
+ files.join(' ')
18
18
  end
19
19
 
20
20
  private
@@ -13,8 +13,8 @@ module Retest
13
13
  root_command
14
14
  end
15
15
 
16
- def run_all(*files, runner:)
17
- runner.run files.size > 1 ? "\"{#{files.join(',')}}\"" : files.first
16
+ def format_batch(*files)
17
+ files.size > 1 ? "\"{#{files.join(',')}}\"" : files.first
18
18
  end
19
19
 
20
20
  private
@@ -13,8 +13,8 @@ module Retest
13
13
  root_command
14
14
  end
15
15
 
16
- def run_all(*files, runner:)
17
- runner.run files.join(' ')
16
+ def format_batch(*files)
17
+ files.join(' ')
18
18
  end
19
19
 
20
20
  private
@@ -8,9 +8,8 @@ module Retest
8
8
  @all = all
9
9
  end
10
10
 
11
- def run_all(*files, runner:)
12
- paths = files.map { |file| "require './#{file}';" }.join
13
- runner.run %Q{-e "#{paths}"}
11
+ def format_batch(*files)
12
+ %Q{-e "#{files.map { |file| "require './#{file}';" }.join}"}
14
13
  end
15
14
 
16
15
  def to_s
@@ -22,7 +22,7 @@ module Retest
22
22
  test_files.each { |test_file| puts " - #{test_file}" }
23
23
 
24
24
  puts "Running tests..."
25
- command.run_all *test_files, runner: runner
25
+ runner.run_all_tests command.format_batch(test_files)
26
26
  end
27
27
 
28
28
  private
@@ -30,20 +30,15 @@ module Retest
30
30
  def build
31
31
  Listen.to('.', only: extension, relative: true) do |modified, added, removed|
32
32
  begin
33
- repository.add(added)
34
- repository.remove(removed)
35
- runner.remove(removed)
33
+ repository.sync(added: added, removed: removed)
34
+ runner.sync(added: added, removed: removed)
36
35
  system('clear 2>/dev/null') || system('cls 2>/dev/null')
37
36
 
38
- runner.run test_file_to_run(modified + added)
37
+ runner.run (modified + added).first, repository: repository
39
38
  rescue => e
40
39
  puts "Something went wrong: #{e.message}"
41
40
  end
42
41
  end
43
42
  end
44
-
45
- def test_file_to_run(changed_files)
46
- repository.find_test changed_files.first if runner.matching?
47
- end
48
43
  end
49
44
  end
@@ -26,6 +26,11 @@ module Retest
26
26
  .sort
27
27
  end
28
28
 
29
+ def sync(added:, removed:)
30
+ add(added)
31
+ remove(removed)
32
+ end
33
+
29
34
  def add(added)
30
35
  return if added&.empty?
31
36
 
@@ -56,7 +61,7 @@ module Retest
56
61
  end
57
62
 
58
63
  def ask_question(tests)
59
- output_stream.puts <<~QUESTION
64
+ output_stream.puts(<<~QUESTION)
60
65
  We found few tests matching: #{@path}
61
66
  #{list_options(tests)}
62
67
 
@@ -0,0 +1,17 @@
1
+ module Retest
2
+ module Runners
3
+ class ChangeRunner < Runner
4
+ def run(changed_file = nil, repository: nil)
5
+ if changed_file
6
+ puts "Changed File Selected: #{changed_file}"
7
+ system command.gsub('<changed>', changed_file)
8
+ else
9
+ puts <<~ERROR
10
+ 404 - Test File Not Found
11
+ Retest could not find a changed file to run.
12
+ ERROR
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module Retest
2
+ module Runners
3
+ class Runner
4
+ attr_accessor :command
5
+ def initialize(command)
6
+ @command = command
7
+ end
8
+
9
+ def ==(obj)
10
+ command == obj.command && obj.class == self.class
11
+ end
12
+
13
+ def run(changed_file = nil, repository: nil)
14
+ system command
15
+ end
16
+
17
+ def run_all_tests(tests_string)
18
+ puts "Test File Selected: #{tests_string}"
19
+ system command.gsub('<test>', tests_string)
20
+ end
21
+
22
+ def sync(added:, removed:)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,25 +1,6 @@
1
1
  module Retest
2
- class Runner
3
- def self.for(test_command)
4
- if test_command.include? '<test>'
5
- VariableRunner
6
- else
7
- HardcodedRunner
8
- end.new test_command
9
- end
10
-
11
- class VariableRunner
12
- attr_reader :command
13
-
14
- def initialize(command)
15
- @command = command
16
- @cached_test_file = nil
17
- end
18
-
19
- def ==(obj)
20
- command == obj.command && obj.class == self.class
21
- end
22
-
2
+ module Runners
3
+ class TestRunner < Runner
23
4
  def cached_test_file
24
5
  @cached_test_file
25
6
  end
@@ -28,8 +9,8 @@ module Retest
28
9
  @cached_test_file = value || @cached_test_file
29
10
  end
30
11
 
31
- def run(test_file = nil)
32
- self.cached_test_file = test_file
12
+ def run(changed_file, repository:)
13
+ self.cached_test_file = repository.find_test(changed_file)
33
14
 
34
15
  if cached_test_file
35
16
  puts "Test File Selected: #{cached_test_file}"
@@ -42,6 +23,12 @@ module Retest
42
23
  end
43
24
  end
44
25
 
26
+ def sync(added:, removed:)
27
+ remove(removed)
28
+ end
29
+
30
+ private
31
+
45
32
  def remove(purged)
46
33
  return if purged.empty?
47
34
 
@@ -52,35 +39,9 @@ module Retest
52
39
  end
53
40
  end
54
41
 
55
- def unmatching?
56
- !matching?
57
- end
58
-
59
- def matching?
60
- true
61
- end
62
-
63
- private
64
-
65
42
  def purge_cache
66
43
  @cached_test_file = nil
67
44
  end
68
45
  end
69
-
70
- HardcodedRunner = Struct.new(:command) do
71
- def run(_ = nil)
72
- system command
73
- end
74
-
75
- def remove(_ = nil); end
76
-
77
- def unmatching?
78
- !matching?
79
- end
80
-
81
- def matching?
82
- false
83
- end
84
- end
85
46
  end
86
- end
47
+ end
@@ -0,0 +1,57 @@
1
+ module Retest
2
+ module Runners
3
+ 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
11
+
12
+ def run(changed_file, repository:)
13
+ self.cached_test_file = repository.find_test(changed_file)
14
+
15
+ return print_test_file_not_found unless cached_test_file
16
+
17
+ puts(<<~FILES)
18
+ Files Selected:
19
+ - file: #{changed_file}
20
+ - test: #{cached_test_file}
21
+
22
+ FILES
23
+
24
+ system command
25
+ .gsub('<test>', cached_test_file)
26
+ .gsub('<changed>', changed_file)
27
+ end
28
+
29
+ def sync(added:, removed:)
30
+ remove(removed)
31
+ end
32
+
33
+ private
34
+
35
+ def print_test_file_not_found
36
+ puts <<~ERROR
37
+ 404 - Test File Not Found
38
+ Retest could not find a matching test file to run.
39
+ ERROR
40
+ 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
+ end
56
+ end
57
+ end
@@ -0,0 +1,22 @@
1
+ require_relative 'runners/runner'
2
+ require_relative 'runners/test_runner'
3
+ require_relative 'runners/change_runner'
4
+ require_relative 'runners/variable_runner'
5
+
6
+ module Retest
7
+ module Runners
8
+ module_function
9
+
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
19
+ end.new command
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "1.4.0"
2
+ VERSION = "1.5.0"
3
3
  end
data/lib/retest.rb CHANGED
@@ -2,7 +2,7 @@ require 'listen'
2
2
  require 'string/similarity'
3
3
 
4
4
  require "retest/version"
5
- require "retest/runner"
5
+ require "retest/runners"
6
6
  require "retest/repository"
7
7
  require "retest/test_options"
8
8
  require "retest/options"
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.4.0
4
+ version: 1.5.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: 2021-10-07 00:00:00.000000000 Z
11
+ date: 2021-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -90,7 +90,11 @@ files:
90
90
  - lib/retest/options.rb
91
91
  - lib/retest/program.rb
92
92
  - lib/retest/repository.rb
93
- - lib/retest/runner.rb
93
+ - lib/retest/runners.rb
94
+ - lib/retest/runners/change_runner.rb
95
+ - lib/retest/runners/runner.rb
96
+ - lib/retest/runners/test_runner.rb
97
+ - lib/retest/runners/variable_runner.rb
94
98
  - lib/retest/setup.rb
95
99
  - lib/retest/test_options.rb
96
100
  - lib/retest/version.rb