mspec 1.0.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.
- data/LICENSE +22 -0
- data/README +101 -0
- data/Rakefile +44 -0
- data/bin/mkspec +7 -0
- data/bin/mspec +7 -0
- data/bin/mspec-ci +8 -0
- data/bin/mspec-run +8 -0
- data/bin/mspec-tag +8 -0
- data/lib/mspec.rb +6 -0
- data/lib/mspec/commands/mkspec.rb +147 -0
- data/lib/mspec/commands/mspec-ci.rb +71 -0
- data/lib/mspec/commands/mspec-run.rb +80 -0
- data/lib/mspec/commands/mspec-tag.rb +87 -0
- data/lib/mspec/commands/mspec.rb +143 -0
- data/lib/mspec/expectations.rb +2 -0
- data/lib/mspec/expectations/expectations.rb +12 -0
- data/lib/mspec/expectations/should.rb +23 -0
- data/lib/mspec/guards.rb +13 -0
- data/lib/mspec/guards/bug.rb +27 -0
- data/lib/mspec/guards/compliance.rb +18 -0
- data/lib/mspec/guards/conflict.rb +16 -0
- data/lib/mspec/guards/endian.rb +40 -0
- data/lib/mspec/guards/extensions.rb +12 -0
- data/lib/mspec/guards/guard.rb +120 -0
- data/lib/mspec/guards/noncompliance.rb +12 -0
- data/lib/mspec/guards/platform.rb +38 -0
- data/lib/mspec/guards/quarantine.rb +15 -0
- data/lib/mspec/guards/runner.rb +30 -0
- data/lib/mspec/guards/superuser.rb +15 -0
- data/lib/mspec/guards/support.rb +12 -0
- data/lib/mspec/guards/version.rb +40 -0
- data/lib/mspec/helpers.rb +6 -0
- data/lib/mspec/helpers/bignum.rb +5 -0
- data/lib/mspec/helpers/const_lookup.rb +5 -0
- data/lib/mspec/helpers/flunk.rb +5 -0
- data/lib/mspec/helpers/io.rb +13 -0
- data/lib/mspec/helpers/scratch.rb +17 -0
- data/lib/mspec/helpers/tmp.rb +32 -0
- data/lib/mspec/matchers.rb +16 -0
- data/lib/mspec/matchers/base.rb +95 -0
- data/lib/mspec/matchers/be_ancestor_of.rb +24 -0
- data/lib/mspec/matchers/be_close.rb +27 -0
- data/lib/mspec/matchers/be_empty.rb +20 -0
- data/lib/mspec/matchers/be_false.rb +20 -0
- data/lib/mspec/matchers/be_kind_of.rb +24 -0
- data/lib/mspec/matchers/be_nil.rb +20 -0
- data/lib/mspec/matchers/be_true.rb +20 -0
- data/lib/mspec/matchers/complain.rb +56 -0
- data/lib/mspec/matchers/eql.rb +26 -0
- data/lib/mspec/matchers/equal.rb +26 -0
- data/lib/mspec/matchers/equal_utf16.rb +34 -0
- data/lib/mspec/matchers/include.rb +32 -0
- data/lib/mspec/matchers/output.rb +67 -0
- data/lib/mspec/matchers/output_to_fd.rb +71 -0
- data/lib/mspec/matchers/raise_error.rb +48 -0
- data/lib/mspec/mocks.rb +3 -0
- data/lib/mspec/mocks/mock.rb +123 -0
- data/lib/mspec/mocks/object.rb +28 -0
- data/lib/mspec/mocks/proxy.rb +112 -0
- data/lib/mspec/runner.rb +13 -0
- data/lib/mspec/runner/actions.rb +6 -0
- data/lib/mspec/runner/actions/debug.rb +17 -0
- data/lib/mspec/runner/actions/filter.rb +40 -0
- data/lib/mspec/runner/actions/gdb.rb +17 -0
- data/lib/mspec/runner/actions/tag.rb +97 -0
- data/lib/mspec/runner/actions/tally.rb +80 -0
- data/lib/mspec/runner/actions/timer.rb +22 -0
- data/lib/mspec/runner/filters.rb +4 -0
- data/lib/mspec/runner/filters/match.rb +22 -0
- data/lib/mspec/runner/filters/profile.rb +54 -0
- data/lib/mspec/runner/filters/regexp.rb +7 -0
- data/lib/mspec/runner/filters/tag.rb +29 -0
- data/lib/mspec/runner/formatters.rb +7 -0
- data/lib/mspec/runner/formatters/dotted.rb +81 -0
- data/lib/mspec/runner/formatters/html.rb +87 -0
- data/lib/mspec/runner/formatters/specdoc.rb +27 -0
- data/lib/mspec/runner/formatters/spinner.rb +89 -0
- data/lib/mspec/runner/formatters/summary.rb +8 -0
- data/lib/mspec/runner/formatters/unit.rb +25 -0
- data/lib/mspec/runner/formatters/yaml.rb +43 -0
- data/lib/mspec/runner/mspec.rb +232 -0
- data/lib/mspec/runner/object.rb +20 -0
- data/lib/mspec/runner/shared.rb +12 -0
- data/lib/mspec/runner/state.rb +116 -0
- data/lib/mspec/runner/tag.rb +20 -0
- data/lib/mspec/utils/name_map.rb +130 -0
- data/lib/mspec/utils/options.rb +344 -0
- data/lib/mspec/utils/script.rb +77 -0
- data/lib/mspec/version.rb +3 -0
- data/spec/commands/mkspec_spec.rb +321 -0
- data/spec/commands/mspec_ci_spec.rb +139 -0
- data/spec/commands/mspec_run_spec.rb +146 -0
- data/spec/commands/mspec_spec.rb +359 -0
- data/spec/commands/mspec_tag_spec.rb +131 -0
- data/spec/expectations/expectations_spec.rb +16 -0
- data/spec/expectations/should_spec.rb +99 -0
- data/spec/guards/bug_spec.rb +137 -0
- data/spec/guards/compliance_spec.rb +70 -0
- data/spec/guards/conflict_spec.rb +20 -0
- data/spec/guards/endian_spec.rb +42 -0
- data/spec/guards/extensions_spec.rb +36 -0
- data/spec/guards/guard_spec.rb +355 -0
- data/spec/guards/noncompliance_spec.rb +36 -0
- data/spec/guards/platform_spec.rb +84 -0
- data/spec/guards/quarantine_spec.rb +19 -0
- data/spec/guards/runner_spec.rb +75 -0
- data/spec/guards/superuser_spec.rb +22 -0
- data/spec/guards/support_spec.rb +22 -0
- data/spec/guards/version_spec.rb +133 -0
- data/spec/helpers/bignum_spec.rb +11 -0
- data/spec/helpers/const_lookup_spec.rb +19 -0
- data/spec/helpers/flunk_spec.rb +15 -0
- data/spec/helpers/io_spec.rb +34 -0
- data/spec/helpers/scratch_spec.rb +22 -0
- data/spec/helpers/tmp_spec.rb +72 -0
- data/spec/matchers/base_spec.rb +180 -0
- data/spec/matchers/be_ancestor_of_spec.rb +28 -0
- data/spec/matchers/be_close_spec.rb +46 -0
- data/spec/matchers/be_empty_spec.rb +26 -0
- data/spec/matchers/be_false_spec.rb +28 -0
- data/spec/matchers/be_kind_of_spec.rb +29 -0
- data/spec/matchers/be_nil_spec.rb +27 -0
- data/spec/matchers/be_true_spec.rb +28 -0
- data/spec/matchers/complain_spec.rb +52 -0
- data/spec/matchers/eql_spec.rb +33 -0
- data/spec/matchers/equal_spec.rb +33 -0
- data/spec/matchers/equal_utf16_spec.rb +47 -0
- data/spec/matchers/include_spec.rb +37 -0
- data/spec/matchers/output_spec.rb +74 -0
- data/spec/matchers/output_to_fd_spec.rb +33 -0
- data/spec/matchers/raise_error_spec.rb +56 -0
- data/spec/mocks/mock_spec.rb +272 -0
- data/spec/mocks/proxy_spec.rb +259 -0
- data/spec/runner/actions/debug_spec.rb +61 -0
- data/spec/runner/actions/filter_spec.rb +84 -0
- data/spec/runner/actions/gdb_spec.rb +61 -0
- data/spec/runner/actions/tag_spec.rb +253 -0
- data/spec/runner/actions/tally_spec.rb +107 -0
- data/spec/runner/actions/timer_spec.rb +42 -0
- data/spec/runner/filters/a.yaml +4 -0
- data/spec/runner/filters/b.yaml +11 -0
- data/spec/runner/filters/match_spec.rb +44 -0
- data/spec/runner/filters/profile_spec.rb +117 -0
- data/spec/runner/filters/regexp_spec.rb +13 -0
- data/spec/runner/filters/tag_spec.rb +77 -0
- data/spec/runner/formatters/dotted_spec.rb +184 -0
- data/spec/runner/formatters/html_spec.rb +191 -0
- data/spec/runner/formatters/specdoc_spec.rb +57 -0
- data/spec/runner/formatters/spinner_spec.rb +78 -0
- data/spec/runner/formatters/summary_spec.rb +29 -0
- data/spec/runner/formatters/unit_spec.rb +71 -0
- data/spec/runner/formatters/yaml_spec.rb +123 -0
- data/spec/runner/mspec_spec.rb +393 -0
- data/spec/runner/shared_spec.rb +41 -0
- data/spec/runner/state_spec.rb +535 -0
- data/spec/runner/tag_spec.rb +93 -0
- data/spec/runner/tags.txt +3 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/utils/name_map_spec.rb +178 -0
- data/spec/utils/options_spec.rb +862 -0
- data/spec/utils/script_spec.rb +240 -0
- metadata +217 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require 'mspec/runner/tag'
|
|
3
|
+
|
|
4
|
+
describe SpecTag do
|
|
5
|
+
it "accepts an optional string to parse into fields" do
|
|
6
|
+
tag = SpecTag.new "tag(comment):description"
|
|
7
|
+
tag.tag.should == "tag"
|
|
8
|
+
tag.comment.should == "comment"
|
|
9
|
+
tag.description.should == "description"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe SpecTag, "#parse" do
|
|
14
|
+
before :each do
|
|
15
|
+
@tag = SpecTag.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "accepts 'tag(comment):description'" do
|
|
19
|
+
@tag.parse "tag(I'm real):Some#method returns a value"
|
|
20
|
+
@tag.tag.should == "tag"
|
|
21
|
+
@tag.comment.should == "I'm real"
|
|
22
|
+
@tag.description.should == "Some#method returns a value"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "accepts 'tag:description'" do
|
|
26
|
+
@tag.parse "tag:Another#method"
|
|
27
|
+
@tag.tag.should == "tag"
|
|
28
|
+
@tag.comment.should == nil
|
|
29
|
+
@tag.description.should == "Another#method"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "accepts 'tag():description'" do
|
|
33
|
+
@tag.parse "tag():Another#method"
|
|
34
|
+
@tag.tag.should == "tag"
|
|
35
|
+
@tag.comment.should == nil
|
|
36
|
+
@tag.description.should == "Another#method"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "accepts 'tag:'" do
|
|
40
|
+
@tag.parse "tag:"
|
|
41
|
+
@tag.tag.should == "tag"
|
|
42
|
+
@tag.comment.should == nil
|
|
43
|
+
@tag.description.should == ""
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "accepts 'tag(bug:555):Another#method'" do
|
|
47
|
+
@tag.parse "tag(bug:555):Another#method"
|
|
48
|
+
@tag.tag.should == "tag"
|
|
49
|
+
@tag.comment.should == "bug:555"
|
|
50
|
+
@tag.description.should == "Another#method"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "accepts 'tag(http://someplace.com/neato):Another#method'" do
|
|
54
|
+
@tag.parse "tag(http://someplace.com/neato):Another#method"
|
|
55
|
+
@tag.tag.should == "tag"
|
|
56
|
+
@tag.comment.should == "http://someplace.com/neato"
|
|
57
|
+
@tag.description.should == "Another#method"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "ignores '#anything'" do
|
|
61
|
+
@tag.parse "# this could be a comment"
|
|
62
|
+
@tag.tag.should == nil
|
|
63
|
+
@tag.comment.should == nil
|
|
64
|
+
@tag.description.should == nil
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe SpecTag, "#to_s" do
|
|
69
|
+
it "formats itself as 'tag(comment):description'" do
|
|
70
|
+
tag = SpecTag.new("tag(comment):description")
|
|
71
|
+
tag.tag.should == "tag"
|
|
72
|
+
tag.comment.should == "comment"
|
|
73
|
+
tag.description.should == "description"
|
|
74
|
+
tag.to_s.should == "tag(comment):description"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "formats itself as 'tag:description" do
|
|
78
|
+
tag = SpecTag.new("tag:description")
|
|
79
|
+
tag.tag.should == "tag"
|
|
80
|
+
tag.comment.should == nil
|
|
81
|
+
tag.description.should == "description"
|
|
82
|
+
tag.to_s.should == "tag:description"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe SpecTag, "#==" do
|
|
87
|
+
it "returns true if the tags have the same fields" do
|
|
88
|
+
one = SpecTag.new "tag(this):unicorn"
|
|
89
|
+
two = SpecTag.new "tag(this):unicorn"
|
|
90
|
+
one.==(two).should == true
|
|
91
|
+
[one].==([two]).should == true
|
|
92
|
+
end
|
|
93
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
dir_path = File.dirname(__FILE__)
|
|
2
|
+
lib_path = File.expand_path(dir_path + '/../lib')
|
|
3
|
+
bin_path = File.expand_path(dir_path + '/..')
|
|
4
|
+
$:.unshift lib_path unless $:.include? lib_path
|
|
5
|
+
$:.unshift bin_path unless $:.include? bin_path
|
|
6
|
+
|
|
7
|
+
require 'mspec/helpers/io'
|
|
8
|
+
require 'mspec/helpers/scratch'
|
|
9
|
+
|
|
10
|
+
# Remove this when MRI has intelligent warnings
|
|
11
|
+
$VERBOSE = nil unless $VERBOSE
|
|
12
|
+
|
|
13
|
+
module Kernel
|
|
14
|
+
def pretty_inspect
|
|
15
|
+
inspect
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class MOSConfig < Hash
|
|
20
|
+
def initialize
|
|
21
|
+
self[:includes] = []
|
|
22
|
+
self[:requires] = []
|
|
23
|
+
self[:flags] = []
|
|
24
|
+
self[:options] = []
|
|
25
|
+
self[:includes] = []
|
|
26
|
+
self[:excludes] = []
|
|
27
|
+
self[:patterns] = []
|
|
28
|
+
self[:xpatterns] = []
|
|
29
|
+
self[:tags] = []
|
|
30
|
+
self[:xtags] = []
|
|
31
|
+
self[:atags] = []
|
|
32
|
+
self[:astrings] = []
|
|
33
|
+
self[:target] = 'ruby'
|
|
34
|
+
self[:command] = nil
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def new_option
|
|
39
|
+
config = MOSConfig.new
|
|
40
|
+
return MSpecOptions.new(config, "spec"), config
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Just to have an exception name output not be "Exception"
|
|
44
|
+
class MSpecExampleError < Exception
|
|
45
|
+
end
|
|
46
|
+
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require 'mspec/utils/name_map'
|
|
3
|
+
|
|
4
|
+
module NameMapSpecs
|
|
5
|
+
class A
|
|
6
|
+
A = self
|
|
7
|
+
|
|
8
|
+
def self.a; end
|
|
9
|
+
def a; end
|
|
10
|
+
def c; end
|
|
11
|
+
|
|
12
|
+
class B
|
|
13
|
+
def b; end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Error
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Fixnum
|
|
21
|
+
def f; end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.n; end
|
|
25
|
+
def n; end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe NameMap, "#exception?" do
|
|
29
|
+
before :each do
|
|
30
|
+
@map = NameMap.new
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns true if the constant is Errno" do
|
|
34
|
+
@map.exception?("Errno").should == true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "returns true if the constant is a kind of Exception" do
|
|
38
|
+
@map.exception?("Errno::EBADF").should == true
|
|
39
|
+
@map.exception?("LoadError").should == true
|
|
40
|
+
@map.exception?("SystemExit").should == true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "returns false if the constant is not a kind of Exception" do
|
|
44
|
+
@map.exception?("NameMapSpecs::Error").should == false
|
|
45
|
+
@map.exception?("NameMapSpecs").should == false
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "returns false if the constant does not exist" do
|
|
49
|
+
@map.exception?("Nonexistent").should == false
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe NameMap, "#class_or_module" do
|
|
54
|
+
before :each do
|
|
55
|
+
@map = NameMap.new true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "returns the constant specified by the string" do
|
|
59
|
+
@map.class_or_module("NameMapSpecs").should == NameMapSpecs
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "returns the constant specified by the 'A::B' string" do
|
|
63
|
+
@map.class_or_module("NameMapSpecs::A").should == NameMapSpecs::A
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "returns nil if the constant is not a class or module" do
|
|
67
|
+
@map.class_or_module("Float::MAX").should == nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "returns nil if the constant is in the set of excluded constants" do
|
|
71
|
+
excluded = %w[
|
|
72
|
+
MSpecScript
|
|
73
|
+
MkSpec
|
|
74
|
+
DTracer
|
|
75
|
+
NameMap
|
|
76
|
+
OptionParser
|
|
77
|
+
YAML
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
excluded.each do |const|
|
|
81
|
+
@map.class_or_module(const).should == nil
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "returns nil if the constant does not exist" do
|
|
86
|
+
@map.class_or_module("Heaven").should == nil
|
|
87
|
+
@map.class_or_module("Hell").should == nil
|
|
88
|
+
@map.class_or_module("Bush::Brain").should == nil
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe NameMap, "#dir_name" do
|
|
93
|
+
before :each do
|
|
94
|
+
@map = NameMap.new
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "returns a directory name from the base name and constant" do
|
|
98
|
+
@map.dir_name("NameMapSpecs", 'spec/core').should == 'spec/core/namemapspecs'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "returns a directory name from the components in the constants name" do
|
|
102
|
+
@map.dir_name("NameMapSpecs::A", 'spec').should == 'spec/namemapspecs/a'
|
|
103
|
+
@map.dir_name("NameMapSpecs::A::B", 'spec').should == 'spec/namemapspecs/a/b'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "returns a directory name without 'class' for constants like TrueClass" do
|
|
107
|
+
@map.dir_name("TrueClass", 'spec').should == 'spec/true'
|
|
108
|
+
@map.dir_name("FalseClass", 'spec').should == 'spec/false'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "returns 'exception' for the directory name of any Exception subclass" do
|
|
112
|
+
@map.dir_name("SystemExit", 'spec').should == 'spec/exception'
|
|
113
|
+
@map.dir_name("Errno::EBADF", 'spec').should == 'spec/exception'
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "returns 'class' for Class" do
|
|
117
|
+
@map.dir_name("Class", 'spec').should == 'spec/class'
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# These specs do not cover all the mappings, but only describe how the
|
|
122
|
+
# name is derived when the hash item maps to a single value, a hash with
|
|
123
|
+
# a specific item, or a hash with a :default item.
|
|
124
|
+
describe NameMap, "#file_name" do
|
|
125
|
+
before :each do
|
|
126
|
+
@map = NameMap.new
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "returns the name of the spec file based on the constant and method" do
|
|
130
|
+
@map.file_name("[]=", "Array").should == "element_set_spec.rb"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "returns the name of the spec file based on the special entry for the method" do
|
|
134
|
+
@map.file_name("~", "Regexp").should == "match_spec.rb"
|
|
135
|
+
@map.file_name("~", "Fixnum").should == "complement_spec.rb"
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "returns the name of the spec file based on the default entry for the method" do
|
|
139
|
+
@map.file_name("<<", "NameMapSpecs").should == "append_spec.rb"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "uses the last component of the constant to look up the method name" do
|
|
143
|
+
@map.file_name("^", "NameMapSpecs::Fixnum").should == "bit_xor_spec.rb"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe NameMap, "#namespace" do
|
|
148
|
+
before :each do
|
|
149
|
+
@map = NameMap.new
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "prepends the module to the constant name" do
|
|
153
|
+
@map.namespace("SubModule", Fixnum).should == "SubModule::Fixnum"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "does not prepend Object, Class, or Module to the constant name" do
|
|
157
|
+
@map.namespace("Object", Fixnum).should == "Fixnum"
|
|
158
|
+
@map.namespace("Module", Integer).should == "Integer"
|
|
159
|
+
@map.namespace("Class", Float).should == "Float"
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe NameMap, "#map" do
|
|
164
|
+
before :each do
|
|
165
|
+
@map = NameMap.new
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "flattens an object hierarchy into a single Hash" do
|
|
169
|
+
@map.map({}, [NameMapSpecs]).should == {
|
|
170
|
+
"NameMapSpecs." => ["n"],
|
|
171
|
+
"NameMapSpecs#" => ["n"],
|
|
172
|
+
"NameMapSpecs::A." => ["a"],
|
|
173
|
+
"NameMapSpecs::A#" => ["a", "c"],
|
|
174
|
+
"NameMapSpecs::A::B#" => ["b"],
|
|
175
|
+
"NameMapSpecs::Fixnum#" => ["f"]
|
|
176
|
+
}
|
|
177
|
+
end
|
|
178
|
+
end
|
|
@@ -0,0 +1,862 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
require 'mspec/utils/options'
|
|
3
|
+
require 'mspec/version'
|
|
4
|
+
require 'mspec/runner/mspec'
|
|
5
|
+
require 'mspec/runner/formatters'
|
|
6
|
+
|
|
7
|
+
describe MSpecOptions, "#parser" do
|
|
8
|
+
it "returns an OptionParser instance" do
|
|
9
|
+
MSpecOptions.new({}, "spec").parser.should be_kind_of(OptionParser)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "The -B, --config FILE option" do
|
|
14
|
+
before :each do
|
|
15
|
+
@options, @config = new_option
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "is enabled with #add_config { }" do
|
|
19
|
+
@options.should_receive(:on).with("-B", "--config FILE",
|
|
20
|
+
String, an_instance_of(String))
|
|
21
|
+
@options.add_config {}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "calls the passed block" do
|
|
25
|
+
["-B", "--config"].each do |opt|
|
|
26
|
+
ScratchPad.clear
|
|
27
|
+
|
|
28
|
+
@options.add_config { |x| ScratchPad.record x }
|
|
29
|
+
@options.parse [opt, "file"]
|
|
30
|
+
ScratchPad.recorded.should == "file"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "The -n, --name RUBY_NAME option" do
|
|
36
|
+
before :each do
|
|
37
|
+
@verbose, $VERBOSE = $VERBOSE, nil
|
|
38
|
+
@options, @config = new_option
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
after :each do
|
|
42
|
+
$VERBOSE = @verbose
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "is enabled with #add_name" do
|
|
46
|
+
@options.should_receive(:on).with("-n", "--name RUBY_NAME",
|
|
47
|
+
String, an_instance_of(String))
|
|
48
|
+
@options.add_name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "sets RUBY_NAME when invoked" do
|
|
52
|
+
Object.should_receive(:const_set).with(:RUBY_NAME, "name").twice
|
|
53
|
+
@options.add_name
|
|
54
|
+
@options.parse ["-n", "name"]
|
|
55
|
+
@options.parse ["--name", "name"]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "The -t, --target TARGET option" do
|
|
60
|
+
before :each do
|
|
61
|
+
@options, @config = new_option
|
|
62
|
+
@options.add_targets
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "is enabled with #add_targets" do
|
|
66
|
+
@options.stub!(:on)
|
|
67
|
+
@options.should_receive(:on).with("-t", "--target TARGET",
|
|
68
|
+
String, an_instance_of(String))
|
|
69
|
+
@options.add_targets
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "sets the target to 'ruby' and flags to verbose with TARGET 'ruby'" do
|
|
73
|
+
["-t", "--target"].each do |opt|
|
|
74
|
+
@options.parse [opt, "ruby"]
|
|
75
|
+
@config[:target].should == "ruby"
|
|
76
|
+
@config[:flags].should include("-v")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "sets the target to 'ruby19' with TARGET 'r19' or 'ruby19'" do
|
|
81
|
+
["-t", "--target"].each do |opt|
|
|
82
|
+
["r19", "ruby19"].each do |t|
|
|
83
|
+
@options.parse [opt, t]
|
|
84
|
+
@config[:target].should == "ruby19"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "sets the target to 'jruby' with TARGET 'j' or 'jruby'" do
|
|
90
|
+
["-t", "--target"].each do |opt|
|
|
91
|
+
["j", "jruby"].each do |t|
|
|
92
|
+
@options.parse [opt, t]
|
|
93
|
+
@config[:target].should == "jruby"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "sets the target to 'shotgun/rubinius' with TARGET 'x' or 'rubinius'" do
|
|
99
|
+
["-t", "--target"].each do |opt|
|
|
100
|
+
["x", "rubinius"].each do |t|
|
|
101
|
+
@options.parse [opt, t]
|
|
102
|
+
@config[:target].should == "shotgun/rubinius"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "set the target to 'rbx' with TARGET 'rbx'" do
|
|
108
|
+
["-t", "--target"].each do |opt|
|
|
109
|
+
["X", "rbx"].each do |t|
|
|
110
|
+
@options.parse [opt, t]
|
|
111
|
+
@config[:target].should == "rbx"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "sets the target to TARGET" do
|
|
117
|
+
["-t", "--target"].each do |opt|
|
|
118
|
+
@options.parse [opt, "whateva"]
|
|
119
|
+
@config[:target].should == "whateva"
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe "The -T, --target-opt OPT option" do
|
|
125
|
+
before :each do
|
|
126
|
+
@options, @config = new_option
|
|
127
|
+
@options.add_targets
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "is enabled with #add_targets" do
|
|
131
|
+
@options.stub!(:on)
|
|
132
|
+
@options.should_receive(:on).with("-T", "--target-opt OPT",
|
|
133
|
+
String, an_instance_of(String))
|
|
134
|
+
@options.add_targets
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "adds OPT to flags" do
|
|
138
|
+
["-T", "--target-opt"].each do |opt|
|
|
139
|
+
@config[:flags].delete "--whateva"
|
|
140
|
+
@options.parse [opt, "--whateva"]
|
|
141
|
+
@config[:flags].should include("--whateva")
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
describe "The -I, --include DIR option" do
|
|
147
|
+
before :each do
|
|
148
|
+
@options, @config = new_option
|
|
149
|
+
@options.add_targets
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "is enabled with #add_targets" do
|
|
153
|
+
@options.stub!(:on)
|
|
154
|
+
@options.should_receive(:on).with("-I", "--include DIR",
|
|
155
|
+
String, an_instance_of(String))
|
|
156
|
+
@options.add_targets
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "add DIR to the includes list" do
|
|
160
|
+
["-I", "--include"].each do |opt|
|
|
161
|
+
@config[:includes].delete "-Ipackage"
|
|
162
|
+
@options.parse [opt, "package"]
|
|
163
|
+
@config[:includes].should include("-Ipackage")
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
describe "The -r, --require LIBRARY option" do
|
|
169
|
+
before :each do
|
|
170
|
+
@options, @config = new_option
|
|
171
|
+
@options.add_targets
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "is enabled with #add_targets" do
|
|
175
|
+
@options.stub!(:on)
|
|
176
|
+
@options.should_receive(:on).with("-r", "--require LIBRARY",
|
|
177
|
+
String, an_instance_of(String))
|
|
178
|
+
@options.add_targets
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "adds LIBRARY to the requires list" do
|
|
182
|
+
["-r", "--require"].each do |opt|
|
|
183
|
+
@config[:requires].delete "-rlibrick"
|
|
184
|
+
@options.parse [opt, "librick"]
|
|
185
|
+
@config[:requires].should include("-rlibrick")
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
describe "The -X, --tags-dir DIR option" do
|
|
191
|
+
before :each do
|
|
192
|
+
@options, @config = new_option
|
|
193
|
+
@options.add_tags_dir
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "is enabled with #add_tags_dir" do
|
|
197
|
+
@options.should_receive(:on).with("-X", "--tags-dir DIR",
|
|
198
|
+
String, an_instance_of(String))
|
|
199
|
+
@options.add_tags_dir
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it "sets the tags directory to DIR" do
|
|
203
|
+
["-X", "--tags-dir"].each do |opt|
|
|
204
|
+
@config[:tags_dir] = nil
|
|
205
|
+
@options.parse [opt, "tags"]
|
|
206
|
+
@config[:tags_dir].should == "tags"
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
describe "The -f, --format FORMAT option" do
|
|
212
|
+
before :each do
|
|
213
|
+
@options, @config = new_option
|
|
214
|
+
@options.add_formatters
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "is enabled with #add_formatters" do
|
|
218
|
+
@options.stub!(:on)
|
|
219
|
+
@options.should_receive(:on).with("-f", "--format FORMAT",
|
|
220
|
+
String, an_instance_of(String))
|
|
221
|
+
@options.add_formatters
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it "sets the SpecdocFormatter with FORMAT 's' or 'specdoc'" do
|
|
225
|
+
["-f", "--format"].each do |opt|
|
|
226
|
+
["s", "specdoc"].each do |f|
|
|
227
|
+
@config[:formatter] = nil
|
|
228
|
+
@options.parse [opt, f]
|
|
229
|
+
@config[:formatter].should == SpecdocFormatter
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "sets the HtmlFormatter with FORMAT 'h' or 'html'" do
|
|
235
|
+
["-f", "--format"].each do |opt|
|
|
236
|
+
["h", "html"].each do |f|
|
|
237
|
+
@config[:formatter] = nil
|
|
238
|
+
@options.parse [opt, f]
|
|
239
|
+
@config[:formatter].should == HtmlFormatter
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "sets the DottedFormatter with FORMAT 'd', 'dot' or 'dotted'" do
|
|
245
|
+
["-f", "--format"].each do |opt|
|
|
246
|
+
["d", "dot", "dotted"].each do |f|
|
|
247
|
+
@config[:formatter] = nil
|
|
248
|
+
@options.parse [opt, f]
|
|
249
|
+
@config[:formatter].should == DottedFormatter
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
it "sets the UnitdiffFormatter with FORMAT 'u', 'unit', or 'unitdiff'" do
|
|
255
|
+
["-f", "--format"].each do |opt|
|
|
256
|
+
["u", "unit", "unitdiff"].each do |f|
|
|
257
|
+
@config[:formatter] = nil
|
|
258
|
+
@options.parse [opt, f]
|
|
259
|
+
@config[:formatter].should == UnitdiffFormatter
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "sets the SummaryFormatter with FORMAT 'm' or 'summary'" do
|
|
265
|
+
["-f", "--format"].each do |opt|
|
|
266
|
+
["m", "summary"].each do |f|
|
|
267
|
+
@config[:formatter] = nil
|
|
268
|
+
@options.parse [opt, f]
|
|
269
|
+
@config[:formatter].should == SummaryFormatter
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
it "sets the SpinnerFormatter with FORMAT 'a', '*', or 'spin'" do
|
|
275
|
+
["-f", "--format"].each do |opt|
|
|
276
|
+
["a", "*", "spin"].each do |f|
|
|
277
|
+
@config[:formatter] = nil
|
|
278
|
+
@options.parse [opt, f]
|
|
279
|
+
@config[:formatter].should == SpinnerFormatter
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe "The -o, --output FILE option" do
|
|
286
|
+
before :each do
|
|
287
|
+
@options, @config = new_option
|
|
288
|
+
@options.add_formatters
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
it "is enabled with #add_formatters" do
|
|
292
|
+
@options.stub!(:on)
|
|
293
|
+
@options.should_receive(:on).with("-o", "--output FILE",
|
|
294
|
+
String, an_instance_of(String))
|
|
295
|
+
@options.add_formatters
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
it "sets the output to FILE" do
|
|
299
|
+
["-o", "--output"].each do |opt|
|
|
300
|
+
@config[:output] = nil
|
|
301
|
+
@options.parse [opt, "some/file"]
|
|
302
|
+
@config[:output].should == "some/file"
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
describe "The -e, --example STR" do
|
|
308
|
+
before :each do
|
|
309
|
+
@options, @config = new_option
|
|
310
|
+
@options.add_filters
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
it "is enabled with #add_filters" do
|
|
314
|
+
@options.stub!(:on)
|
|
315
|
+
@options.should_receive(:on).with("-e", "--example STR",
|
|
316
|
+
String, an_instance_of(String))
|
|
317
|
+
@options.add_filters
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
it "adds STR to the includes list" do
|
|
321
|
+
["-e", "--example"].each do |opt|
|
|
322
|
+
@config[:includes] = []
|
|
323
|
+
@options.parse [opt, "this spec"]
|
|
324
|
+
@config[:includes].should include("this spec")
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
describe "The -E, --exclude STR" do
|
|
330
|
+
before :each do
|
|
331
|
+
@options, @config = new_option
|
|
332
|
+
@options.add_filters
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
it "is enabled with #add_filters" do
|
|
336
|
+
@options.stub!(:on)
|
|
337
|
+
@options.should_receive(:on).with("-E", "--exclude STR",
|
|
338
|
+
String, an_instance_of(String))
|
|
339
|
+
@options.add_filters
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
it "adds STR to the excludes list" do
|
|
343
|
+
["-E", "--exclude"].each do |opt|
|
|
344
|
+
@config[:excludes] = []
|
|
345
|
+
@options.parse [opt, "this spec"]
|
|
346
|
+
@config[:excludes].should include("this spec")
|
|
347
|
+
end
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
describe "The -p, --pattern PATTERN" do
|
|
352
|
+
before :each do
|
|
353
|
+
@options, @config = new_option
|
|
354
|
+
@options.add_filters
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
it "is enabled with #add_filters" do
|
|
358
|
+
@options.stub!(:on)
|
|
359
|
+
@options.should_receive(:on).with("-p", "--pattern PATTERN",
|
|
360
|
+
Regexp, an_instance_of(String))
|
|
361
|
+
@options.add_filters
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "adds PATTERN to the included patterns list" do
|
|
365
|
+
["-p", "--pattern"].each do |opt|
|
|
366
|
+
@config[:patterns] = []
|
|
367
|
+
@options.parse [opt, "this spec"]
|
|
368
|
+
@config[:patterns].should include(/this spec/)
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
describe "The -P, --excl-pattern PATTERN" do
|
|
374
|
+
before :each do
|
|
375
|
+
@options, @config = new_option
|
|
376
|
+
@options.add_filters
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
it "is enabled with #add_filters" do
|
|
380
|
+
@options.stub!(:on)
|
|
381
|
+
@options.should_receive(:on).with("-P", "--excl-pattern PATTERN",
|
|
382
|
+
Regexp, an_instance_of(String))
|
|
383
|
+
@options.add_filters
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it "adds PATTERN to the excluded patterns list" do
|
|
387
|
+
["-P", "--excl-pattern"].each do |opt|
|
|
388
|
+
@config[:xpatterns] = []
|
|
389
|
+
@options.parse [opt, "this spec"]
|
|
390
|
+
@config[:xpatterns].should include(/this spec/)
|
|
391
|
+
end
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
describe "The -g, --tag TAG" do
|
|
396
|
+
before :each do
|
|
397
|
+
@options, @config = new_option
|
|
398
|
+
@options.add_filters
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
it "is enabled with #add_filters" do
|
|
402
|
+
@options.stub!(:on)
|
|
403
|
+
@options.should_receive(:on).with("-g", "--tag TAG",
|
|
404
|
+
String, an_instance_of(String))
|
|
405
|
+
@options.add_filters
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
it "adds TAG to the included tags list" do
|
|
409
|
+
["-g", "--tag"].each do |opt|
|
|
410
|
+
@config[:tags] = []
|
|
411
|
+
@options.parse [opt, "this spec"]
|
|
412
|
+
@config[:tags].should include("this spec")
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
describe "The -G, --excl-tag TAG" do
|
|
418
|
+
before :each do
|
|
419
|
+
@options, @config = new_option
|
|
420
|
+
@options.add_filters
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
it "is enabled with #add_filters" do
|
|
424
|
+
@options.stub!(:on)
|
|
425
|
+
@options.should_receive(:on).with("-G", "--excl-tag TAG",
|
|
426
|
+
String, an_instance_of(String))
|
|
427
|
+
@options.add_filters
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
it "adds TAG to the excluded tags list" do
|
|
431
|
+
["-G", "--excl-tag"].each do |opt|
|
|
432
|
+
@config[:xtags] = []
|
|
433
|
+
@options.parse [opt, "this spec"]
|
|
434
|
+
@config[:xtags].should include("this spec")
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
describe "The -w, --profile FILE option" do
|
|
440
|
+
before :each do
|
|
441
|
+
@options, @config = new_option
|
|
442
|
+
@options.add_filters
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
it "is enabled with #add_filters" do
|
|
446
|
+
@options.stub!(:on)
|
|
447
|
+
@options.should_receive(:on).with("-w", "--profile FILE",
|
|
448
|
+
String, an_instance_of(String))
|
|
449
|
+
@options.add_filters
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
it "adds FILE to the included profiles list" do
|
|
453
|
+
["-w", "--profile"].each do |opt|
|
|
454
|
+
@config[:profiles] = []
|
|
455
|
+
@options.parse [opt, "spec/profiles/rails.yaml"]
|
|
456
|
+
@config[:profiles].should include("spec/profiles/rails.yaml")
|
|
457
|
+
end
|
|
458
|
+
end
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
describe "The -W, --excl-profile FILE option" do
|
|
462
|
+
before :each do
|
|
463
|
+
@options, @config = new_option
|
|
464
|
+
@options.add_filters
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it "is enabled with #add_filters" do
|
|
468
|
+
@options.stub!(:on)
|
|
469
|
+
@options.should_receive(:on).with("-W", "--excl-profile FILE",
|
|
470
|
+
String, an_instance_of(String))
|
|
471
|
+
@options.add_filters
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
it "adds FILE to the excluded profiles list" do
|
|
475
|
+
["-W", "--excl-profile"].each do |opt|
|
|
476
|
+
@config[:xprofiles] = []
|
|
477
|
+
@options.parse [opt, "spec/profiles/rails.yaml"]
|
|
478
|
+
@config[:xprofiles].should include("spec/profiles/rails.yaml")
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
|
|
483
|
+
describe "The -Z", "--dry-run option" do
|
|
484
|
+
before :each do
|
|
485
|
+
@options, @config = new_option
|
|
486
|
+
@options.add_pretend
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it "is enabled with #add_pretend" do
|
|
490
|
+
@options.should_receive(:on).with("-Z", "--dry-run", an_instance_of(String))
|
|
491
|
+
@options.add_pretend
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
it "registers the MSpec pretend mode" do
|
|
495
|
+
MSpec.should_receive(:register_mode).with(:pretend).twice
|
|
496
|
+
["-Z", "--dry-run"].each do |opt|
|
|
497
|
+
@options.parse opt
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
describe "The -H, --random option" do
|
|
503
|
+
before :each do
|
|
504
|
+
@options, @config = new_option
|
|
505
|
+
@options.add_randomize
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
it "is enabled with #add_randomize" do
|
|
509
|
+
@options.should_receive(:on).with("-H", "--random", an_instance_of(String))
|
|
510
|
+
@options.add_randomize
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
it "registers the MSpec randomize mode" do
|
|
514
|
+
MSpec.should_receive(:randomize).twice
|
|
515
|
+
["-H", "--random"].each do |opt|
|
|
516
|
+
@options.parse opt
|
|
517
|
+
end
|
|
518
|
+
end
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
describe "The -V, --verbose option" do
|
|
522
|
+
before :each do
|
|
523
|
+
@options, @config = new_option
|
|
524
|
+
@options.add_verbose
|
|
525
|
+
end
|
|
526
|
+
|
|
527
|
+
it "is enabled with #add_verbose" do
|
|
528
|
+
@options.stub!(:on)
|
|
529
|
+
@options.should_receive(:on).with("-V", "--verbose", an_instance_of(String))
|
|
530
|
+
@options.add_verbose
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
it "registers a verbose output object with MSpec" do
|
|
534
|
+
MSpec.should_receive(:register).with(:start, anything()).twice
|
|
535
|
+
MSpec.should_receive(:register).with(:load, anything()).twice
|
|
536
|
+
["-V", "--verbose"].each do |opt|
|
|
537
|
+
@options.parse opt
|
|
538
|
+
end
|
|
539
|
+
end
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
describe "The -m, --marker MARKER option" do
|
|
543
|
+
before :each do
|
|
544
|
+
@options, @config = new_option
|
|
545
|
+
@options.add_verbose
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
it "is enabled with #add_verbose" do
|
|
549
|
+
@options.stub!(:on)
|
|
550
|
+
@options.should_receive(:on).with("-m", "--marker MARKER",
|
|
551
|
+
String, an_instance_of(String))
|
|
552
|
+
@options.add_verbose
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
it "registers a marker output object with MSpec" do
|
|
556
|
+
MSpec.should_receive(:register).with(:load, anything()).twice
|
|
557
|
+
["-m", "--marker"].each do |opt|
|
|
558
|
+
@options.parse [opt, ","]
|
|
559
|
+
end
|
|
560
|
+
end
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
describe "The --int-spec option" do
|
|
564
|
+
before :each do
|
|
565
|
+
@options, @config = new_option
|
|
566
|
+
@options.add_interrupt
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
it "is enabled with #add_interrupt" do
|
|
570
|
+
@options.should_receive(:on).with("--int-spec", an_instance_of(String))
|
|
571
|
+
@options.add_interrupt
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
it "sets the abort config option to false to only abort the running spec with ^C" do
|
|
575
|
+
@config[:abort] = true
|
|
576
|
+
@options.parse "--int-spec"
|
|
577
|
+
@config[:abort].should == false
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
describe "The -Y, --verify option" do
|
|
582
|
+
before :each do
|
|
583
|
+
@options, @config = new_option
|
|
584
|
+
@options.add_verify
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
it "is enabled with #add_interrupt" do
|
|
588
|
+
@options.stub!(:on)
|
|
589
|
+
@options.should_receive(:on).with("-Y", "--verify", an_instance_of(String))
|
|
590
|
+
@options.add_verify
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
it "sets the MSpec mode to :verify" do
|
|
594
|
+
MSpec.should_receive(:set_mode).with(:verify).twice
|
|
595
|
+
["-Y", "--verify"].each do |m|
|
|
596
|
+
@options.parse m
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
describe "The -O, --report option" do
|
|
602
|
+
before :each do
|
|
603
|
+
@options, @config = new_option
|
|
604
|
+
@options.add_verify
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
it "is enabled with #add_interrupt" do
|
|
608
|
+
@options.stub!(:on)
|
|
609
|
+
@options.should_receive(:on).with("-O", "--report", an_instance_of(String))
|
|
610
|
+
@options.add_verify
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
it "sets the MSpec mode to :report" do
|
|
614
|
+
MSpec.should_receive(:set_mode).with(:report).twice
|
|
615
|
+
["-O", "--report"].each do |m|
|
|
616
|
+
@options.parse m
|
|
617
|
+
end
|
|
618
|
+
end
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
describe "The -N, --add TAG option" do
|
|
622
|
+
before :each do
|
|
623
|
+
@options, @config = new_option
|
|
624
|
+
@options.add_tagging
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
it "is enabled with #add_tagging" do
|
|
628
|
+
@options.stub!(:on)
|
|
629
|
+
@options.should_receive(:on).with("-N", "--add TAG",
|
|
630
|
+
String, an_instance_of(String))
|
|
631
|
+
@options.add_tagging
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
it "sets the mode to :add and sets the tag to TAG" do
|
|
635
|
+
["-N", "--add"].each do |opt|
|
|
636
|
+
@config[:tagger] = nil
|
|
637
|
+
@config[:tag] = nil
|
|
638
|
+
@options.parse [opt, "taggit"]
|
|
639
|
+
@config[:tagger].should == :add
|
|
640
|
+
@config[:tag].should == "taggit:"
|
|
641
|
+
end
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
describe "The -R, --del TAG option" do
|
|
646
|
+
before :each do
|
|
647
|
+
@options, @config = new_option
|
|
648
|
+
@options.add_tagging
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
it "is enabled with #add_tagging" do
|
|
652
|
+
@options.stub!(:on)
|
|
653
|
+
@options.should_receive(:on).with("-R", "--del TAG",
|
|
654
|
+
String, an_instance_of(String))
|
|
655
|
+
@options.add_tagging
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
it "it sets the mode to :del, the tag to TAG, and the outcome to :pass" do
|
|
659
|
+
["-R", "--del"].each do |opt|
|
|
660
|
+
@config[:tagger] = nil
|
|
661
|
+
@config[:tag] = nil
|
|
662
|
+
@config[:outcome] = nil
|
|
663
|
+
@options.parse [opt, "taggit"]
|
|
664
|
+
@config[:tagger].should == :del
|
|
665
|
+
@config[:tag].should == "taggit:"
|
|
666
|
+
@config[:outcome].should == :pass
|
|
667
|
+
end
|
|
668
|
+
end
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
describe "The -Q, --pass option" do
|
|
672
|
+
before :each do
|
|
673
|
+
@options, @config = new_option
|
|
674
|
+
@options.add_tagging
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
it "is enabled with #add_tagging" do
|
|
678
|
+
@options.stub!(:on)
|
|
679
|
+
@options.should_receive(:on).with("-Q", "--pass", an_instance_of(String))
|
|
680
|
+
@options.add_tagging
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
it "sets the outcome to :pass" do
|
|
684
|
+
["-Q", "--pass"].each do |opt|
|
|
685
|
+
@config[:outcome] = nil
|
|
686
|
+
@options.parse opt
|
|
687
|
+
@config[:outcome].should == :pass
|
|
688
|
+
end
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
describe "The -F, --fail option" do
|
|
693
|
+
before :each do
|
|
694
|
+
@options, @config = new_option
|
|
695
|
+
@options.add_tagging
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
it "is enabled with #add_tagging" do
|
|
699
|
+
@options.stub!(:on)
|
|
700
|
+
@options.should_receive(:on).with("-F", "--fail", an_instance_of(String))
|
|
701
|
+
@options.add_tagging
|
|
702
|
+
end
|
|
703
|
+
|
|
704
|
+
it "sets the outcome to :fail" do
|
|
705
|
+
["-F", "--fail"].each do |opt|
|
|
706
|
+
@config[:outcome] = nil
|
|
707
|
+
@options.parse opt
|
|
708
|
+
@config[:outcome].should == :fail
|
|
709
|
+
end
|
|
710
|
+
end
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
describe "The -L, --all option" do
|
|
714
|
+
before :each do
|
|
715
|
+
@options, @config = new_option
|
|
716
|
+
@options.add_tagging
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
it "is enabled with #add_tagging" do
|
|
720
|
+
@options.stub!(:on)
|
|
721
|
+
@options.should_receive(:on).with("-L", "--all", an_instance_of(String))
|
|
722
|
+
@options.add_tagging
|
|
723
|
+
end
|
|
724
|
+
|
|
725
|
+
it "sets the outcome to :all" do
|
|
726
|
+
["-L", "--all"].each do |opt|
|
|
727
|
+
@config[:outcome] = nil
|
|
728
|
+
@options.parse opt
|
|
729
|
+
@config[:outcome].should == :all
|
|
730
|
+
end
|
|
731
|
+
end
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
describe "The -K, --action-tag TAG option" do
|
|
735
|
+
before :each do
|
|
736
|
+
@options, @config = new_option
|
|
737
|
+
@options.add_action_filters
|
|
738
|
+
end
|
|
739
|
+
|
|
740
|
+
it "is enabled with #add_action_filters" do
|
|
741
|
+
@options.stub!(:on)
|
|
742
|
+
@options.should_receive(:on).with("-K", "--action-tag TAG",
|
|
743
|
+
String, an_instance_of(String))
|
|
744
|
+
@options.add_action_filters
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
it "adds TAG to the list of tags that trigger actions" do
|
|
748
|
+
["-K", "--action-tag"].each do |opt|
|
|
749
|
+
@config[:atags] = []
|
|
750
|
+
@options.parse [opt, "action-tag"]
|
|
751
|
+
@config[:atags].should include("action-tag")
|
|
752
|
+
end
|
|
753
|
+
end
|
|
754
|
+
end
|
|
755
|
+
|
|
756
|
+
describe "The -S, --action-string STR option" do
|
|
757
|
+
before :each do
|
|
758
|
+
@options, @config = new_option
|
|
759
|
+
@options.add_action_filters
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
it "is enabled with #add_action_filters" do
|
|
763
|
+
@options.stub!(:on)
|
|
764
|
+
@options.should_receive(:on).with("-S", "--action-string STR",
|
|
765
|
+
String, an_instance_of(String))
|
|
766
|
+
@options.add_action_filters
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
it "adds STR to the list of spec descriptions that trigger actions" do
|
|
770
|
+
["-S", "--action-string"].each do |opt|
|
|
771
|
+
@config[:astrings] = []
|
|
772
|
+
@options.parse [opt, "action-str"]
|
|
773
|
+
@config[:astrings].should include("action-str")
|
|
774
|
+
end
|
|
775
|
+
end
|
|
776
|
+
end
|
|
777
|
+
|
|
778
|
+
describe "The --spec-debug option" do
|
|
779
|
+
before :each do
|
|
780
|
+
@options, @config = new_option
|
|
781
|
+
@options.add_actions
|
|
782
|
+
end
|
|
783
|
+
|
|
784
|
+
it "is enabled with #add_actions" do
|
|
785
|
+
@options.stub!(:on)
|
|
786
|
+
@options.should_receive(:on).with("--spec-debug", an_instance_of(String))
|
|
787
|
+
@options.add_actions
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
it "enables the triggering the ruby debugger" do
|
|
791
|
+
@options.add_action_filters
|
|
792
|
+
@options.parse ["-S", "some spec"]
|
|
793
|
+
|
|
794
|
+
@config[:debugger] = nil
|
|
795
|
+
@options.parse "--spec-debug"
|
|
796
|
+
@config[:debugger].should == true
|
|
797
|
+
end
|
|
798
|
+
end
|
|
799
|
+
|
|
800
|
+
describe "The --spec-gdb option" do
|
|
801
|
+
before :each do
|
|
802
|
+
@options, @config = new_option
|
|
803
|
+
@options.add_actions
|
|
804
|
+
end
|
|
805
|
+
|
|
806
|
+
it "is enabled with #add_actions" do
|
|
807
|
+
@options.stub!(:on)
|
|
808
|
+
@options.should_receive(:on).with("--spec-gdb", an_instance_of(String))
|
|
809
|
+
@options.add_actions
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
it "enables triggering the gdb debugger" do
|
|
813
|
+
@options.add_action_filters
|
|
814
|
+
@options.parse ["-S", "some spec"]
|
|
815
|
+
|
|
816
|
+
@config[:gdb] = nil
|
|
817
|
+
@options.parse "--spec-gdb"
|
|
818
|
+
@config[:gdb].should == true
|
|
819
|
+
end
|
|
820
|
+
end
|
|
821
|
+
|
|
822
|
+
describe "The -v, --version option" do
|
|
823
|
+
before :each do
|
|
824
|
+
@options, @config = new_option
|
|
825
|
+
@options.add_version
|
|
826
|
+
end
|
|
827
|
+
|
|
828
|
+
it "is enabled with #add_version" do
|
|
829
|
+
@options.stub!(:on)
|
|
830
|
+
@options.should_receive(:on).with("-v", "--version", an_instance_of(String))
|
|
831
|
+
@options.add_version
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
it "prints the version and exits" do
|
|
835
|
+
@options.should_receive(:puts).twice
|
|
836
|
+
@options.should_receive(:exit).twice
|
|
837
|
+
["-v", "--version"].each do |opt|
|
|
838
|
+
@options.parse opt
|
|
839
|
+
end
|
|
840
|
+
end
|
|
841
|
+
end
|
|
842
|
+
|
|
843
|
+
describe "The -h, --help option" do
|
|
844
|
+
before :each do
|
|
845
|
+
@options, @config = new_option
|
|
846
|
+
@options.add_help
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
it "is enabled with #add_help" do
|
|
850
|
+
@options.stub!(:on)
|
|
851
|
+
@options.should_receive(:on).with("-h", "--help", an_instance_of(String))
|
|
852
|
+
@options.add_help
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
it "prints help and exits" do
|
|
856
|
+
@options.should_receive(:puts).twice
|
|
857
|
+
@options.should_receive(:exit).twice
|
|
858
|
+
["-h", "--help"].each do |opt|
|
|
859
|
+
@options.parse opt
|
|
860
|
+
end
|
|
861
|
+
end
|
|
862
|
+
end
|