mighty_test 0.1.0 → 0.2.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 +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
|