mspec 1.5.5 → 1.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mspec/commands/mspec-ci.rb +3 -0
- data/lib/mspec/commands/mspec-run.rb +3 -0
- data/lib/mspec/guards.rb +1 -0
- data/lib/mspec/guards/background.rb +19 -0
- data/lib/mspec/guards/tty.rb +2 -4
- data/lib/mspec/helpers/ruby_exe.rb +4 -4
- data/lib/mspec/utils/options.rb +20 -0
- data/lib/mspec/utils/script.rb +28 -5
- data/lib/mspec/version.rb +1 -1
- data/spec/commands/mspec_ci_spec.rb +15 -0
- data/spec/commands/mspec_run_spec.rb +15 -0
- data/spec/guards/background_spec.rb +21 -0
- data/spec/utils/options_spec.rb +55 -0
- data/spec/utils/script_spec.rb +28 -0
- metadata +3 -1
@@ -18,9 +18,12 @@ class MSpecCI < MSpecScript
|
|
18
18
|
options.doc " 4. When to perform it?"
|
19
19
|
|
20
20
|
options.doc "\n How to run the specs"
|
21
|
+
options.chdir
|
22
|
+
options.prefix
|
21
23
|
options.configure { |f| load f }
|
22
24
|
options.name
|
23
25
|
options.pretend
|
26
|
+
options.background
|
24
27
|
options.unguarded
|
25
28
|
options.interrupt
|
26
29
|
|
@@ -28,10 +28,13 @@ class MSpecRun < MSpecScript
|
|
28
28
|
options.filters
|
29
29
|
|
30
30
|
options.doc "\n How to modify the execution"
|
31
|
+
options.chdir
|
32
|
+
options.prefix
|
31
33
|
options.configure { |f| load f }
|
32
34
|
options.name
|
33
35
|
options.randomize
|
34
36
|
options.pretend
|
37
|
+
options.background
|
35
38
|
options.unguarded
|
36
39
|
options.interrupt
|
37
40
|
|
data/lib/mspec/guards.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mspec/guards/guard'
|
2
|
+
|
3
|
+
# Some specs, notably those for Readline, will block under certain
|
4
|
+
# circumstances when run as background or subprocesses. Use this guard for
|
5
|
+
# such specs.
|
6
|
+
|
7
|
+
class BackgroundGuard < SpecGuard
|
8
|
+
def match?
|
9
|
+
MSpec.mode? :background
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Object
|
14
|
+
def process_is_foreground
|
15
|
+
g = BackgroundGuard.new
|
16
|
+
yield if g.yield? true
|
17
|
+
g.unregister
|
18
|
+
end
|
19
|
+
end
|
data/lib/mspec/guards/tty.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mspec/guards/guard'
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# pretend to be a TTY. See the IOStub helper. That helper needs combined with
|
6
|
-
# the output_to_fd helper.
|
3
|
+
# If a spec depends on STDOUT being a tty, use this guard. For specs that may
|
4
|
+
# block if run as a background process, see BackgroundGuard.
|
7
5
|
|
8
6
|
class TTYGuard < SpecGuard
|
9
7
|
def match?
|
@@ -91,14 +91,14 @@ class Object
|
|
91
91
|
|
92
92
|
def resolve_ruby_exe
|
93
93
|
[:env, :engine, :name, :install_name].each do |option|
|
94
|
-
|
94
|
+
next unless cmd = ruby_exe_options(option)
|
95
|
+
exe = cmd.split.first
|
95
96
|
|
96
97
|
# It has been reported that File.executable is not reliable
|
97
98
|
# on Windows platforms (see commit 56bc555c). So, we check the
|
98
99
|
# platform.
|
99
|
-
if exe and File.
|
100
|
-
|
101
|
-
return exe
|
100
|
+
if File.exists?(exe) and (SpecGuard.windows? or File.executable?(exe))
|
101
|
+
return cmd
|
102
102
|
end
|
103
103
|
end
|
104
104
|
nil
|
data/lib/mspec/utils/options.rb
CHANGED
@@ -327,6 +327,19 @@ class MSpecOptions
|
|
327
327
|
end
|
328
328
|
end
|
329
329
|
|
330
|
+
def chdir
|
331
|
+
on("-C", "--chdir", "DIR",
|
332
|
+
"Change the working directory to DIR before running specs") do |d|
|
333
|
+
Dir.chdir d
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
def prefix
|
338
|
+
on("--prefix", "STR", "Prepend STR when resolving spec file names") do |p|
|
339
|
+
config[:prefix] = p
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
330
343
|
def pretend
|
331
344
|
on("-Z", "--dry-run",
|
332
345
|
"Invoke formatters and other actions, but don't execute the specs") do
|
@@ -334,6 +347,13 @@ class MSpecOptions
|
|
334
347
|
end
|
335
348
|
end
|
336
349
|
|
350
|
+
def background
|
351
|
+
on("--background",
|
352
|
+
"Enable guard for specs that may hang in background processes") do
|
353
|
+
MSpec.register_mode :background
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
337
357
|
def unguarded
|
338
358
|
on("--unguarded", "Turn off all guards") do
|
339
359
|
MSpec.register_mode :unguarded
|
data/lib/mspec/utils/script.rb
CHANGED
@@ -25,6 +25,18 @@ class MSpecScript
|
|
25
25
|
config[key] = value
|
26
26
|
end
|
27
27
|
|
28
|
+
# Gets the value of +key+ from the config object. Simplifies
|
29
|
+
# getting values in a config file:
|
30
|
+
#
|
31
|
+
# class MSpecScript
|
32
|
+
# set :a, 1
|
33
|
+
# set :b, 2
|
34
|
+
# set :c, get(:a) + get(:b)
|
35
|
+
# end
|
36
|
+
def self.get(key)
|
37
|
+
config[key]
|
38
|
+
end
|
39
|
+
|
28
40
|
def initialize
|
29
41
|
config[:formatter] = nil
|
30
42
|
config[:includes] = []
|
@@ -140,19 +152,30 @@ class MSpecScript
|
|
140
152
|
patterns.each do |pattern|
|
141
153
|
expanded = File.expand_path(pattern)
|
142
154
|
return [pattern] if File.file?(expanded)
|
143
|
-
|
155
|
+
|
156
|
+
specs = File.join pattern, "/**/*_spec.rb"
|
157
|
+
return Dir[specs].sort if File.directory?(expanded)
|
144
158
|
end
|
145
159
|
|
146
160
|
Dir[partial]
|
147
161
|
end
|
148
162
|
|
149
|
-
# Resolves each entry in +list+ to a set of files.
|
150
|
-
#
|
151
|
-
#
|
163
|
+
# Resolves each entry in +list+ to a set of files.
|
164
|
+
#
|
165
|
+
# If the entry has a leading '^' character, the list of files
|
166
|
+
# is subtracted from the list of files accumulated to that point.
|
167
|
+
#
|
168
|
+
# If the entry has a leading ':' character, the corresponding
|
169
|
+
# key is looked up in the config object and the entries in the
|
170
|
+
# value retrieved are processed through #entries.
|
152
171
|
def files(list)
|
153
172
|
list.inject([]) do |files, item|
|
154
|
-
|
173
|
+
case item[0]
|
174
|
+
when ?^
|
155
175
|
files -= entries(item[1..-1])
|
176
|
+
when ?:
|
177
|
+
key = item[1..-1].to_sym
|
178
|
+
files += files(Array(config[key]))
|
156
179
|
else
|
157
180
|
files += entries(item)
|
158
181
|
end
|
data/lib/mspec/version.rb
CHANGED
@@ -13,6 +13,16 @@ describe MSpecCI, "#options" do
|
|
13
13
|
@script.stub!(:files).and_return([])
|
14
14
|
end
|
15
15
|
|
16
|
+
it "enables the chdir option" do
|
17
|
+
@options.should_receive(:chdir)
|
18
|
+
@script.options
|
19
|
+
end
|
20
|
+
|
21
|
+
it "enables the prefix option" do
|
22
|
+
@options.should_receive(:prefix)
|
23
|
+
@script.options
|
24
|
+
end
|
25
|
+
|
16
26
|
it "enables the config option" do
|
17
27
|
@options.should_receive(:configure)
|
18
28
|
@script.options
|
@@ -33,6 +43,11 @@ describe MSpecCI, "#options" do
|
|
33
43
|
@script.options
|
34
44
|
end
|
35
45
|
|
46
|
+
it "enables the background option" do
|
47
|
+
@options.should_receive(:background)
|
48
|
+
@script.options
|
49
|
+
end
|
50
|
+
|
36
51
|
it "enables the unguarded option" do
|
37
52
|
@options.should_receive(:unguarded)
|
38
53
|
@script.options
|
@@ -33,6 +33,16 @@ describe MSpecRun, "#options" do
|
|
33
33
|
@script.options @argv
|
34
34
|
end
|
35
35
|
|
36
|
+
it "enables the chdir option" do
|
37
|
+
@options.should_receive(:chdir)
|
38
|
+
@script.options @argv
|
39
|
+
end
|
40
|
+
|
41
|
+
it "enables the prefix option" do
|
42
|
+
@options.should_receive(:prefix)
|
43
|
+
@script.options @argv
|
44
|
+
end
|
45
|
+
|
36
46
|
it "enables the configure option" do
|
37
47
|
@options.should_receive(:configure)
|
38
48
|
@script.options @argv
|
@@ -58,6 +68,11 @@ describe MSpecRun, "#options" do
|
|
58
68
|
@script.options @argv
|
59
69
|
end
|
60
70
|
|
71
|
+
it "enables the background option" do
|
72
|
+
@options.should_receive(:background)
|
73
|
+
@script.options @argv
|
74
|
+
end
|
75
|
+
|
61
76
|
it "enables the unguarded option" do
|
62
77
|
@options.should_receive(:unguarded)
|
63
78
|
@script.options @argv
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'mspec/guards/background'
|
3
|
+
|
4
|
+
describe Object, "#process_is_foreground" do
|
5
|
+
before :each do
|
6
|
+
MSpec.clear_modes
|
7
|
+
ScratchPad.clear
|
8
|
+
end
|
9
|
+
|
10
|
+
it "yields if MSpec.mode?(:background) is false" do
|
11
|
+
MSpec.mode?(:background).should be_false
|
12
|
+
process_is_foreground { ScratchPad.record :yield }
|
13
|
+
ScratchPad.recorded.should == :yield
|
14
|
+
end
|
15
|
+
|
16
|
+
it "does not yield if MSpec.mode?(:background) is true" do
|
17
|
+
MSpec.register_mode :background
|
18
|
+
process_is_foreground { ScratchPad.record :yield }
|
19
|
+
ScratchPad.recorded.should_not == :yield
|
20
|
+
end
|
21
|
+
end
|
data/spec/utils/options_spec.rb
CHANGED
@@ -467,6 +467,44 @@ describe "The -B, --config FILE option" do
|
|
467
467
|
end
|
468
468
|
end
|
469
469
|
|
470
|
+
describe "The -C, --chdir DIR option" do
|
471
|
+
before :each do
|
472
|
+
@options, @config = new_option
|
473
|
+
@options.chdir
|
474
|
+
end
|
475
|
+
|
476
|
+
it "is enabled with #chdir" do
|
477
|
+
@options.should_receive(:on).with("-C", "--chdir", "DIR",
|
478
|
+
an_instance_of(String))
|
479
|
+
@options.chdir
|
480
|
+
end
|
481
|
+
|
482
|
+
it "changes the working directory to DIR" do
|
483
|
+
Dir.should_receive(:chdir).with("dir").twice
|
484
|
+
["-C", "--chdir"].each do |opt|
|
485
|
+
@options.parse [opt, "dir"]
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
describe "The --prefix STR option" do
|
491
|
+
before :each do
|
492
|
+
@options, @config = new_option
|
493
|
+
end
|
494
|
+
|
495
|
+
it "is enabled with #prefix" do
|
496
|
+
@options.should_receive(:on).with("--prefix", "STR",
|
497
|
+
an_instance_of(String))
|
498
|
+
@options.prefix
|
499
|
+
end
|
500
|
+
|
501
|
+
it "sets the prefix config value" do
|
502
|
+
@options.prefix
|
503
|
+
@options.parse ["--prefix", "some/dir"]
|
504
|
+
@config[:prefix].should == "some/dir"
|
505
|
+
end
|
506
|
+
end
|
507
|
+
|
470
508
|
describe "The -n, --name RUBY_NAME option" do
|
471
509
|
before :each do
|
472
510
|
@verbose, $VERBOSE = $VERBOSE, nil
|
@@ -942,6 +980,23 @@ describe "The -Z, --dry-run option" do
|
|
942
980
|
end
|
943
981
|
end
|
944
982
|
|
983
|
+
describe "The --background option" do
|
984
|
+
before :each do
|
985
|
+
@options, @config = new_option
|
986
|
+
end
|
987
|
+
|
988
|
+
it "is enabled with #background" do
|
989
|
+
@options.should_receive(:on).with("--background", an_instance_of(String))
|
990
|
+
@options.background
|
991
|
+
end
|
992
|
+
|
993
|
+
it "registers the MSpec background mode" do
|
994
|
+
MSpec.should_receive(:register_mode).with(:background)
|
995
|
+
@options.background
|
996
|
+
@options.parse "--background"
|
997
|
+
end
|
998
|
+
end
|
999
|
+
|
945
1000
|
describe "The --unguarded option" do
|
946
1001
|
before :each do
|
947
1002
|
@options, @config = new_option
|
data/spec/utils/script_spec.rb
CHANGED
@@ -19,6 +19,13 @@ describe MSpecScript, ".set" do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
describe MSpecScript, ".get" do
|
23
|
+
it "gets the config hash value for a key" do
|
24
|
+
MSpecScript.set :a, 10
|
25
|
+
MSpecScript.get(:a).should == 10
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
22
29
|
describe MSpecScript, "#config" do
|
23
30
|
it "returns the MSpecScript config hash" do
|
24
31
|
MSpecScript.set :b, 5
|
@@ -380,3 +387,24 @@ describe MSpecScript, "#files" do
|
|
380
387
|
@script.files(["^a", "a", "b"]).should == ["file1", "file2"]
|
381
388
|
end
|
382
389
|
end
|
390
|
+
|
391
|
+
describe MSpecScript, "#files" do
|
392
|
+
before :each do
|
393
|
+
MSpecScript.set :files, ["file1", "file2"]
|
394
|
+
|
395
|
+
@script = MSpecScript.new
|
396
|
+
end
|
397
|
+
|
398
|
+
after :each do
|
399
|
+
MSpecScript.config.delete :files
|
400
|
+
end
|
401
|
+
|
402
|
+
it "looks up items with leading ':' in the config object" do
|
403
|
+
@script.should_receive(:entries).and_return(["file1"], ["file2"])
|
404
|
+
@script.files(":files").should == ["file1", "file2"]
|
405
|
+
end
|
406
|
+
|
407
|
+
it "returns an empty list if the config key is not set" do
|
408
|
+
@script.files(":all_files").should == []
|
409
|
+
end
|
410
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Ford
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- lib/mspec/expectations/expectations.rb
|
36
36
|
- lib/mspec/expectations/should.rb
|
37
37
|
- lib/mspec/expectations.rb
|
38
|
+
- lib/mspec/guards/background.rb
|
38
39
|
- lib/mspec/guards/bug.rb
|
39
40
|
- lib/mspec/guards/compliance.rb
|
40
41
|
- lib/mspec/guards/conflict.rb
|
@@ -140,6 +141,7 @@ files:
|
|
140
141
|
- spec/commands/mspec_tag_spec.rb
|
141
142
|
- spec/expectations/expectations_spec.rb
|
142
143
|
- spec/expectations/should_spec.rb
|
144
|
+
- spec/guards/background_spec.rb
|
143
145
|
- spec/guards/bug_spec.rb
|
144
146
|
- spec/guards/compliance_spec.rb
|
145
147
|
- spec/guards/conflict_spec.rb
|