guard-haskell 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.travis.yml +3 -0
- data/CHANGELOG.md +10 -1
- data/lib/guard/haskell/repl.rb +7 -7
- data/lib/guard/haskell/templates/Guardfile +5 -1
- data/lib/guard/haskell/version.rb +1 -1
- data/lib/guard/haskell.rb +5 -6
- data/spec/guard/haskell/repl_spec.rb +24 -0
- data/spec/guard/haskell_spec.rb +11 -11
- data/spec/run-files/missing-preprocessor.error +9 -0
- data/spec/run-files/preprocessor-phase-failed.error +5 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTlhNDgyMGFhYTJhZDQxMjQyNjhlMWQxMmMwMTE5YzljYzY4NzNhYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDk2ZjBjMjI0MjdiMDJkMDM5ZDY4ZTg2Y2VjNTk5MWQ3ZmE2ODM5MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MWNhODA4OWM5NDU3ZGJmNzUyYjVmMTUzMWU2Mjc3YmQxMTgyYzkzZjUxMTA5
|
10
|
+
ZTk4Y2FiYTc3YWQwYmIzNTMyOGNhYTdhMTQ3ODZiZjY4M2RkZTE4OWNiODNj
|
11
|
+
NzA0MTliMDgyZDVmMzI3MGRjODE1ZDkwMDNlOTFlYTdkOGMwOTU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWExZTU3Mjg0ZDVkODJjMzQzYzg2NzYwYjM3YmE4Y2QwOTg5MThiMjBjMTk3
|
14
|
+
MTJmMDNkZTc5ZmE4MWE0ZThlMzhjZTI5NThkMzcwNDMxY2MyOTIyNzVlYjM1
|
15
|
+
YWM5YjFmYmVlYzFiNzI1MzM1YTBlM2Y2ODJhZGM1N2U1YzNhYjY=
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
1.6.0
|
2
|
+
=====
|
3
|
+
|
4
|
+
* Handle Haskell pre-processor phase failures
|
5
|
+
|
6
|
+
* Handle missing Haskell pre-processor failures
|
7
|
+
|
8
|
+
* More extensible Guardfile template
|
9
|
+
|
1
10
|
1.5.0
|
2
11
|
=====
|
3
12
|
|
@@ -13,7 +22,7 @@
|
|
13
22
|
=====
|
14
23
|
|
15
24
|
* Ignore user cabal package database if sandbox is found
|
16
|
-
* Catch CPP failures (previously
|
25
|
+
* Catch CPP failures (previously didn't work because of the typo)
|
17
26
|
* Add `focus_on_fail` option
|
18
27
|
|
19
28
|
1.2.0
|
data/lib/guard/haskell/repl.rb
CHANGED
@@ -3,11 +3,6 @@ require 'open3'
|
|
3
3
|
class ::Guard::Haskell::Repl
|
4
4
|
attr_reader :stdin, :listener, :thread, :result
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
@running = false
|
8
|
-
@result = :success
|
9
|
-
end
|
10
|
-
|
11
6
|
def self.test(str)
|
12
7
|
case str
|
13
8
|
when /\d+ examples?, 0 failures/,
|
@@ -19,13 +14,18 @@ class ::Guard::Haskell::Repl
|
|
19
14
|
/\*{3} Exception:/,
|
20
15
|
/cannot find object file for module/,
|
21
16
|
/phase `C pre-processor' failed/,
|
17
|
+
/phase `Haskell pre-processor' failed/,
|
22
18
|
/GHCi runtime linker: fatal error:/,
|
23
|
-
/During interactive linking, GHCi couldn't find the following symbol
|
19
|
+
/During interactive linking, GHCi couldn't find the following symbol:/,
|
20
|
+
/ghc: could not execute:/
|
24
21
|
:compile_failure
|
25
22
|
end
|
26
23
|
end
|
27
24
|
|
28
|
-
def
|
25
|
+
def initialize(ghci_options, sandbox_glob)
|
26
|
+
@running = false
|
27
|
+
@result = :success
|
28
|
+
|
29
29
|
cmd = ["ghci"]
|
30
30
|
|
31
31
|
Dir["*"].each { |d| cmd << "-i#{d}" if File.directory?(d) }
|
data/lib/guard/haskell.rb
CHANGED
@@ -22,7 +22,8 @@ module ::Guard
|
|
22
22
|
|
23
23
|
require 'guard/haskell/repl'
|
24
24
|
|
25
|
-
|
25
|
+
attr_accessor :opts, :repl
|
26
|
+
attr_reader :targets, :last_run
|
26
27
|
|
27
28
|
Options = Struct.new(
|
28
29
|
:top_spec,
|
@@ -44,14 +45,12 @@ module ::Guard
|
|
44
45
|
|
45
46
|
def initialize(user_options = {})
|
46
47
|
super
|
47
|
-
|
48
|
-
@last_run = :success # try to prove it wasn't :-)
|
49
|
-
@opts = Options.new(*DEFAULT_OPTIONS.merge(user_options).values)
|
50
|
-
@repl = Repl.new
|
48
|
+
self.opts = Options.new(*DEFAULT_OPTIONS.merge(user_options).values)
|
51
49
|
end
|
52
50
|
|
53
51
|
def start
|
54
|
-
|
52
|
+
@last_run = :success # try to prove it wasn't :-)
|
53
|
+
self.repl = Repl.new(opts.ghci_options, opts.sandbox_glob)
|
55
54
|
repl.init(opts.top_spec)
|
56
55
|
|
57
56
|
@targets = ::Set.new(::Dir.glob("**/*.{hs,lhs}"))
|
@@ -95,6 +95,10 @@ describe ::Guard::Haskell::Repl do
|
|
95
95
|
expect(::Guard::Haskell::Repl.test("phase `C pre-processor' failed")).to eq(:compile_failure)
|
96
96
|
end
|
97
97
|
|
98
|
+
it "handles Haskell pre-processor errors" do
|
99
|
+
expect(::Guard::Haskell::Repl.test("phase `Haskell pre-processor' failed")).to eq(:compile_failure)
|
100
|
+
end
|
101
|
+
|
98
102
|
it "handles runtime linker errors" do
|
99
103
|
expect(::Guard::Haskell::Repl.test("GHCi runtime linker: fatal error:")).to eq(:compile_failure)
|
100
104
|
end
|
@@ -173,6 +177,26 @@ describe ::Guard::Haskell::Repl do
|
|
173
177
|
expect(repl.instance_variable_get(:@running)).to eq(false)
|
174
178
|
expect(repl.instance_variable_get(:@result)).to eq(:compile_failure)
|
175
179
|
end
|
180
|
+
|
181
|
+
it "handles preprocessor phase failures" do
|
182
|
+
in_stream = ::File.open(run_file["preprocessor-phase-failed.error"])
|
183
|
+
repl.instance_variable_set(:@running, true)
|
184
|
+
|
185
|
+
repl.send(:listen, in_stream, dev_null)
|
186
|
+
|
187
|
+
expect(repl.instance_variable_get(:@running)).to eq(false)
|
188
|
+
expect(repl.instance_variable_get(:@result)).to eq(:compile_failure)
|
189
|
+
end
|
190
|
+
|
191
|
+
it "handles missing preprocessor error" do
|
192
|
+
in_stream = ::File.open(run_file["missing-preprocessor.error"])
|
193
|
+
repl.instance_variable_set(:@running, true)
|
194
|
+
|
195
|
+
repl.send(:listen, in_stream, dev_null)
|
196
|
+
|
197
|
+
expect(repl.instance_variable_get(:@running)).to eq(false)
|
198
|
+
expect(repl.instance_variable_get(:@result)).to eq(:compile_failure)
|
199
|
+
end
|
176
200
|
end
|
177
201
|
end
|
178
202
|
|
data/spec/guard/haskell_spec.rb
CHANGED
@@ -33,12 +33,16 @@ describe "monkey patching" do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
class ::Guard::Haskell::Repl
|
37
|
+
def initialize(*args)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
36
41
|
describe ::Guard::Haskell do
|
37
42
|
let(:guard) { ::Guard::Haskell.new }
|
38
43
|
|
39
44
|
before :each do
|
40
45
|
::Guard.stub(:add_group)
|
41
|
-
::Guard::Haskell::Repl.any_instance.stub(:start)
|
42
46
|
::Guard::Haskell::Repl.any_instance.stub(:init)
|
43
47
|
end
|
44
48
|
|
@@ -127,10 +131,10 @@ describe ::Guard::Haskell do
|
|
127
131
|
it "reruns failing examples if last run was a runtime failure and @focus_on_fail is set" do
|
128
132
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:reload_and_rerun)
|
129
133
|
expect_any_instance_of(::Guard::Haskell::Repl).not_to receive(:reload_and_run_matching).with("Foo")
|
130
|
-
guard.instance_variable_set(:@last_run, :runtime_failure)
|
131
|
-
guard.opts.focus_on_fail = true
|
132
134
|
|
135
|
+
guard.opts.focus_on_fail = true
|
133
136
|
guard.start
|
137
|
+
guard.instance_variable_set(:@last_run, :runtime_failure)
|
134
138
|
guard.run("Foo")
|
135
139
|
end
|
136
140
|
|
@@ -149,7 +153,6 @@ describe ::Guard::Haskell do
|
|
149
153
|
it "checks success after run" do
|
150
154
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:reload_and_run_matching)
|
151
155
|
expect(guard).to receive(:success?)
|
152
|
-
guard.instance_variable_set(:@last_run, :success)
|
153
156
|
|
154
157
|
guard.start
|
155
158
|
guard.run_all
|
@@ -161,9 +164,9 @@ describe ::Guard::Haskell do
|
|
161
164
|
::Guard::Haskell::Repl.any_instance.stub(:result) { received }
|
162
165
|
expect_any_instance_of(::Guard::Haskell::Repl).to receive(:result)
|
163
166
|
yield
|
164
|
-
guard.instance_variable_set(:@last_run, before)
|
165
167
|
|
166
168
|
guard.start
|
169
|
+
guard.instance_variable_set(:@last_run, before)
|
167
170
|
guard.success?
|
168
171
|
expect(guard.instance_variable_get(:@last_run)).to eq(after)
|
169
172
|
end
|
@@ -224,33 +227,30 @@ describe ::Guard::Haskell do
|
|
224
227
|
|
225
228
|
it "does not run all specs on success after failure by default" do
|
226
229
|
::Guard::Haskell::Repl.any_instance.stub(:success?) { true }
|
227
|
-
guard.instance_variable_set(:@last_run, :failure)
|
228
|
-
|
229
230
|
expect(guard).not_to receive(:run_all)
|
230
231
|
|
231
232
|
guard.start
|
233
|
+
guard.instance_variable_set(:@last_run, :failure)
|
232
234
|
guard.success?
|
233
235
|
end
|
234
236
|
|
235
237
|
it "runs all examples on success after runtime failure with :all_on_pass option" do
|
236
238
|
::Guard::Haskell::Repl.any_instance.stub(:result) { :success }
|
237
239
|
custom_guard = ::Guard::Haskell.new(all_on_pass: true)
|
238
|
-
custom_guard.instance_variable_set(:@last_run, :runtime_failure)
|
239
|
-
|
240
240
|
expect(custom_guard).to receive(:run_all)
|
241
241
|
|
242
242
|
custom_guard.start
|
243
|
+
custom_guard.instance_variable_set(:@last_run, :runtime_failure)
|
243
244
|
custom_guard.success?
|
244
245
|
end
|
245
246
|
|
246
247
|
it "runs all examples on success after compile time failure with :all_on_pass option" do
|
247
248
|
::Guard::Haskell::Repl.any_instance.stub(:result) { :success }
|
248
249
|
custom_guard = ::Guard::Haskell.new(all_on_pass: true)
|
249
|
-
custom_guard.instance_variable_set(:@last_run, :compile_failure)
|
250
|
-
|
251
250
|
expect(custom_guard).to receive(:run_all)
|
252
251
|
|
253
252
|
custom_guard.start
|
253
|
+
custom_guard.instance_variable_set(:@last_run, :compile_failure)
|
254
254
|
custom_guard.success?
|
255
255
|
end
|
256
256
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Cabal sandboxes found:
|
2
|
+
.cabal-sandbox/x86_64-linux-ghc-7.6.3-packages.conf.d
|
3
|
+
Cabal sandbox used:
|
4
|
+
.cabal-sandbox/x86_64-linux-ghc-7.6.3-packages.conf.d
|
5
|
+
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
|
6
|
+
Loading package ghc-prim ... linking ... done.
|
7
|
+
Loading package integer-gmp ... linking ... done.
|
8
|
+
Loading package base ... linking ... done.
|
9
|
+
ghc: could not execute: hspec-disco
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-haskell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matvey Aksenov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: guard
|
@@ -117,6 +117,8 @@ files:
|
|
117
117
|
- spec/guard/haskell_spec.rb
|
118
118
|
- spec/run-files/cpp-exception.error
|
119
119
|
- spec/run-files/hspec-exception.error
|
120
|
+
- spec/run-files/missing-preprocessor.error
|
121
|
+
- spec/run-files/preprocessor-phase-failed.error
|
120
122
|
- spec/run-files/runtime-linker-cannot-find-object-file.error
|
121
123
|
- spec/run-files/runtime-linker-couldn't-find-symbol.error
|
122
124
|
- spec/run-files/runtime-linker-duplicate-definition-for-symbol.error
|
@@ -152,6 +154,8 @@ test_files:
|
|
152
154
|
- spec/guard/haskell_spec.rb
|
153
155
|
- spec/run-files/cpp-exception.error
|
154
156
|
- spec/run-files/hspec-exception.error
|
157
|
+
- spec/run-files/missing-preprocessor.error
|
158
|
+
- spec/run-files/preprocessor-phase-failed.error
|
155
159
|
- spec/run-files/runtime-linker-cannot-find-object-file.error
|
156
160
|
- spec/run-files/runtime-linker-couldn't-find-symbol.error
|
157
161
|
- spec/run-files/runtime-linker-duplicate-definition-for-symbol.error
|