mighty_test 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/mighty_test/console.rb +10 -3
- data/lib/mighty_test/version.rb +1 -1
- data/lib/mighty_test/watcher.rb +34 -41
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67f7cd918d844868eef2785d5337b21a23cfb5a77944c6408f01319c948ca0c9
|
4
|
+
data.tar.gz: 51e988bb537870235b93ddcc638bb14c8445b1ad04af6bf832b4690de20c623a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17228cb3ed005b781296855e61081f0724788913276323cbd70a8591aa02dbf792476b82ade4494e52ff4940e78f106a9666f905855e1173e9ed42d76bb32306
|
7
|
+
data.tar.gz: 8a37977044f595aa51530e3d7da4599f62be1bcacadb3e16375168c4815f5550e7e4c9db0dea2997f5bd930c9dfed2c8a0077331d8143d710e0d38a8c6b278db
|
data/README.md
CHANGED
@@ -211,7 +211,7 @@ bin/mt
|
|
211
211
|
bin/mt --no-rg
|
212
212
|
```
|
213
213
|
|
214
|
-
|
214
|
+
<img alt="Screenshot of bin/mt output" width="618" src="https://raw.githubusercontent.com/mattbrictson/mighty_test/main/screenshot.png">
|
215
215
|
|
216
216
|
This functionality is provided by the [minitest-rg](https://github.com/minitest/minitest-rg) plugin, which is included with mighty_test.
|
217
217
|
|
data/lib/mighty_test/console.rb
CHANGED
@@ -16,9 +16,10 @@ module MightyTest
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def wait_for_keypress
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
with_raw_input do
|
20
|
+
sleep if stdin.eof?
|
21
|
+
stdin.getc
|
22
|
+
end
|
22
23
|
end
|
23
24
|
|
24
25
|
def play_sound(name, wait: false)
|
@@ -54,5 +55,11 @@ module MightyTest
|
|
54
55
|
def tty?
|
55
56
|
$stdout.respond_to?(:tty?) && $stdout.tty?
|
56
57
|
end
|
58
|
+
|
59
|
+
def with_raw_input(&)
|
60
|
+
return yield unless stdin.respond_to?(:raw) && tty?
|
61
|
+
|
62
|
+
stdin.raw(intr: true, &)
|
63
|
+
end
|
57
64
|
end
|
58
65
|
end
|
data/lib/mighty_test/version.rb
CHANGED
data/lib/mighty_test/watcher.rb
CHANGED
@@ -1,47 +1,58 @@
|
|
1
1
|
module MightyTest
|
2
|
-
class Watcher
|
2
|
+
class Watcher
|
3
|
+
class ListenerTriggered < StandardError
|
4
|
+
attr_reader :paths
|
5
|
+
|
6
|
+
def initialize(paths)
|
7
|
+
@paths = paths
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
3
12
|
WATCHING_FOR_CHANGES = 'Watching for changes to source and test files. Press "h" for help or "q" to quit.'.freeze
|
4
13
|
|
5
14
|
def initialize(console: Console.new, extra_args: [], file_system: FileSystem.new, system_proc: method(:system))
|
6
|
-
@queue = Thread::Queue.new
|
7
15
|
@console = console
|
8
16
|
@extra_args = extra_args
|
9
17
|
@file_system = file_system
|
10
18
|
@system_proc = system_proc
|
11
19
|
end
|
12
20
|
|
13
|
-
def run(iterations: :indefinitely) # rubocop:disable Metrics/
|
14
|
-
|
15
|
-
|
16
|
-
puts WATCHING_FOR_CHANGES
|
21
|
+
def run(iterations: :indefinitely) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
22
|
+
started = false
|
23
|
+
@foreground_thread = Thread.current
|
17
24
|
|
18
25
|
loop_for(iterations) do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
26
|
+
start_file_system_listener && puts(WATCHING_FOR_CHANGES) unless started
|
27
|
+
started = true
|
28
|
+
|
29
|
+
case console.wait_for_keypress
|
30
|
+
when "\r", "\n"
|
23
31
|
run_all_tests
|
24
|
-
|
32
|
+
when "a"
|
25
33
|
run_all_tests(flags: ["--all"])
|
26
|
-
|
34
|
+
when "d"
|
27
35
|
run_matching_test_files_from_git_diff
|
28
|
-
|
36
|
+
when "h"
|
29
37
|
show_help
|
30
|
-
|
38
|
+
when "q"
|
39
|
+
file_system_listener.stop
|
31
40
|
break
|
32
|
-
else
|
33
|
-
nil
|
34
41
|
end
|
42
|
+
rescue ListenerTriggered => e
|
43
|
+
run_matching_test_files(e.paths)
|
44
|
+
file_system_listener.start if file_system_listener.paused?
|
45
|
+
rescue Interrupt
|
46
|
+
file_system_listener&.stop
|
47
|
+
raise
|
35
48
|
end
|
36
49
|
ensure
|
37
50
|
puts "\nExiting."
|
38
|
-
file_system_listener&.stop
|
39
|
-
keypress_listener&.kill
|
40
51
|
end
|
41
52
|
|
42
53
|
private
|
43
54
|
|
44
|
-
attr_reader :console, :extra_args, :file_system, :file_system_listener, :
|
55
|
+
attr_reader :console, :extra_args, :file_system, :file_system_listener, :system_proc, :foreground_thread
|
45
56
|
|
46
57
|
def show_help
|
47
58
|
console.clear
|
@@ -105,36 +116,18 @@ module MightyTest
|
|
105
116
|
file_system_listener.stop if file_system_listener && !file_system_listener.stopped?
|
106
117
|
|
107
118
|
@file_system_listener = file_system.listen do |modified, added, _removed|
|
119
|
+
paths = [*modified, *added].uniq
|
120
|
+
next if paths.empty?
|
121
|
+
|
108
122
|
# Pause listener so that subsequent changes are queued up while we are running the tests
|
109
123
|
file_system_listener.pause unless file_system_listener.stopped?
|
110
|
-
|
124
|
+
foreground_thread.raise ListenerTriggered.new(paths)
|
111
125
|
end
|
112
126
|
end
|
113
127
|
alias restart_file_system_listener start_file_system_listener
|
114
128
|
|
115
|
-
def start_keypress_listener
|
116
|
-
@keypress_listener = Thread.new do
|
117
|
-
loop do
|
118
|
-
key = console.wait_for_keypress
|
119
|
-
break if key.nil?
|
120
|
-
|
121
|
-
post_event(:keypress, key)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
@keypress_listener.abort_on_exception = true
|
125
|
-
end
|
126
|
-
|
127
129
|
def loop_for(iterations, &)
|
128
130
|
iterations == :indefinitely ? loop(&) : iterations.times(&)
|
129
131
|
end
|
130
|
-
|
131
|
-
def await_next_event
|
132
|
-
file_system_listener.start if file_system_listener.paused?
|
133
|
-
@queue.pop
|
134
|
-
end
|
135
|
-
|
136
|
-
def post_event(*event)
|
137
|
-
@queue << event
|
138
|
-
end
|
139
132
|
end
|
140
133
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mighty_test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Brictson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02
|
11
|
+
date: 2024-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: listen
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
|
-
rubygems_version: 3.5.
|
128
|
+
rubygems_version: 3.5.6
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: A modern Minitest runner for TDD, with watch mode and more
|