retest 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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