mspec 1.5.17 → 1.5.18

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.
Files changed (174) hide show
  1. data/.gitignore +27 -0
  2. data/Gemfile +4 -0
  3. data/README +39 -159
  4. data/Rakefile +4 -44
  5. data/bin/mkspec.bat +1 -0
  6. data/bin/mspec-ci.bat +1 -0
  7. data/bin/mspec-run.bat +1 -0
  8. data/bin/mspec-tag.bat +1 -0
  9. data/bin/mspec.bat +1 -0
  10. data/lib/mspec/commands/mkspec.rb +2 -2
  11. data/lib/mspec/commands/mspec-run.rb +4 -0
  12. data/lib/mspec/commands/mspec.rb +18 -3
  13. data/lib/mspec/guards.rb +1 -0
  14. data/lib/mspec/guards/block_device.rb +22 -0
  15. data/lib/mspec/guards/guard.rb +14 -2
  16. data/lib/mspec/helpers.rb +5 -5
  17. data/lib/mspec/helpers/const_lookup.rb +6 -1
  18. data/lib/mspec/helpers/datetime.rb +28 -0
  19. data/lib/mspec/helpers/ducktype.rb +4 -4
  20. data/lib/mspec/helpers/environment.rb +19 -2
  21. data/lib/mspec/helpers/fs.rb +5 -1
  22. data/lib/mspec/helpers/io.rb +39 -1
  23. data/lib/mspec/helpers/numeric.rb +89 -0
  24. data/lib/mspec/helpers/pack.rb +3 -0
  25. data/lib/mspec/helpers/ruby_exe.rb +53 -15
  26. data/lib/mspec/helpers/singleton_class.rb +7 -0
  27. data/lib/mspec/helpers/stasy.rb +33 -0
  28. data/lib/mspec/helpers/tmp.rb +16 -3
  29. data/lib/mspec/matchers.rb +8 -0
  30. data/lib/mspec/matchers/be_computed_by.rb +37 -0
  31. data/lib/mspec/matchers/be_computed_by_function.rb +35 -0
  32. data/lib/mspec/matchers/be_nan.rb +20 -0
  33. data/lib/mspec/matchers/be_valid_dns_name.rb +25 -0
  34. data/lib/mspec/matchers/have_data.rb +6 -5
  35. data/lib/mspec/matchers/have_private_method.rb +24 -0
  36. data/lib/mspec/matchers/have_singleton_method.rb +24 -0
  37. data/lib/mspec/matchers/infinity.rb +28 -0
  38. data/lib/mspec/matchers/match_yaml.rb +5 -5
  39. data/lib/mspec/matchers/raise_error.rb +5 -3
  40. data/lib/mspec/matchers/signed_zero.rb +28 -0
  41. data/lib/mspec/mocks/mock.rb +15 -9
  42. data/lib/mspec/mocks/object.rb +4 -0
  43. data/lib/mspec/mocks/proxy.rb +26 -1
  44. data/lib/mspec/runner/actions.rb +0 -1
  45. data/lib/mspec/runner/context.rb +18 -16
  46. data/lib/mspec/runner/formatters.rb +2 -0
  47. data/lib/mspec/runner/formatters/dotted.rb +13 -1
  48. data/lib/mspec/runner/formatters/junit.rb +96 -0
  49. data/lib/mspec/runner/formatters/profile.rb +70 -0
  50. data/lib/mspec/runner/mspec.rb +11 -0
  51. data/lib/mspec/runner/shared.rb +1 -1
  52. data/lib/mspec/utils/options.rb +33 -9
  53. data/lib/mspec/utils/ruby_name.rb +1 -1
  54. data/lib/mspec/utils/script.rb +2 -1
  55. data/lib/mspec/version.rb +1 -1
  56. data/mspec.gemspec +40 -0
  57. data/spec/commands/mkspec_spec.rb +4 -3
  58. data/spec/commands/mspec_ci_spec.rb +1 -6
  59. data/spec/commands/mspec_run_spec.rb +1 -6
  60. data/spec/commands/mspec_spec.rb +14 -6
  61. data/spec/commands/mspec_tag_spec.rb +28 -27
  62. data/spec/expectations/expectations_spec.rb +1 -1
  63. data/spec/expectations/should_spec.rb +4 -4
  64. data/spec/guards/background_spec.rb +2 -2
  65. data/spec/guards/block_device_spec.rb +46 -0
  66. data/spec/guards/bug_spec.rb +2 -3
  67. data/spec/guards/compliance_spec.rb +2 -2
  68. data/spec/guards/conflict_spec.rb +2 -2
  69. data/spec/guards/endian_spec.rb +2 -2
  70. data/spec/guards/extensions_spec.rb +2 -2
  71. data/spec/guards/feature_spec.rb +2 -2
  72. data/spec/guards/guard_spec.rb +80 -22
  73. data/spec/guards/noncompliance_spec.rb +2 -2
  74. data/spec/guards/platform_spec.rb +2 -2
  75. data/spec/guards/quarantine_spec.rb +2 -2
  76. data/spec/guards/runner_spec.rb +2 -2
  77. data/spec/guards/specified_spec.rb +2 -2
  78. data/spec/guards/superuser_spec.rb +2 -2
  79. data/spec/guards/support_spec.rb +2 -2
  80. data/spec/guards/tty_spec.rb +2 -2
  81. data/spec/guards/user_spec.rb +2 -2
  82. data/spec/guards/version_spec.rb +2 -2
  83. data/spec/helpers/argv_spec.rb +3 -2
  84. data/spec/helpers/const_lookup_spec.rb +3 -2
  85. data/spec/helpers/datetime_spec.rb +44 -0
  86. data/spec/helpers/ducktype_spec.rb +3 -2
  87. data/spec/helpers/encode_spec.rb +3 -2
  88. data/spec/helpers/enumerator_class_spec.rb +5 -5
  89. data/spec/helpers/environment_spec.rb +15 -3
  90. data/spec/helpers/fixture_spec.rb +3 -2
  91. data/spec/helpers/flunk_spec.rb +4 -3
  92. data/spec/helpers/fs_spec.rb +35 -18
  93. data/spec/helpers/hash_spec.rb +3 -2
  94. data/spec/helpers/io_spec.rb +75 -6
  95. data/spec/helpers/language_version_spec.rb +3 -2
  96. data/spec/helpers/mock_to_path_spec.rb +3 -2
  97. data/spec/helpers/numeric_spec.rb +25 -0
  98. data/spec/helpers/ruby_exe_spec.rb +115 -29
  99. data/spec/helpers/scratch_spec.rb +3 -1
  100. data/spec/helpers/stasy_spec.rb +59 -0
  101. data/spec/helpers/tmp_spec.rb +21 -4
  102. data/spec/matchers/base_spec.rb +2 -2
  103. data/spec/matchers/be_an_instance_of_spec.rb +2 -2
  104. data/spec/matchers/be_ancestor_of_spec.rb +2 -2
  105. data/spec/matchers/be_close_spec.rb +2 -2
  106. data/spec/matchers/be_computed_by_function_spec.rb +36 -0
  107. data/spec/matchers/be_computed_by_spec.rb +42 -0
  108. data/spec/matchers/be_empty_spec.rb +2 -2
  109. data/spec/matchers/be_false_spec.rb +3 -3
  110. data/spec/matchers/be_kind_of_spec.rb +2 -2
  111. data/spec/matchers/be_nan_spec.rb +28 -0
  112. data/spec/matchers/be_nil_spec.rb +3 -3
  113. data/spec/matchers/be_true_spec.rb +3 -3
  114. data/spec/matchers/be_valid_dns_name_spec.rb +50 -0
  115. data/spec/matchers/complain_spec.rb +2 -2
  116. data/spec/matchers/eql_spec.rb +2 -2
  117. data/spec/matchers/equal_element_spec.rb +2 -2
  118. data/spec/matchers/equal_spec.rb +2 -2
  119. data/spec/matchers/equal_utf16_spec.rb +2 -2
  120. data/spec/matchers/have_class_variable_spec.rb +3 -3
  121. data/spec/matchers/have_constant_spec.rb +2 -2
  122. data/spec/matchers/have_data_spec.rb +8 -5
  123. data/spec/matchers/have_instance_method_spec.rb +2 -2
  124. data/spec/matchers/have_instance_variable_spec.rb +3 -3
  125. data/spec/matchers/have_method_spec.rb +2 -2
  126. data/spec/matchers/have_private_instance_method_spec.rb +3 -3
  127. data/spec/matchers/have_private_method_spec.rb +44 -0
  128. data/spec/matchers/have_protected_instance_method_spec.rb +2 -2
  129. data/spec/matchers/have_public_instance_method_spec.rb +2 -2
  130. data/spec/matchers/have_singleton_method_spec.rb +45 -0
  131. data/spec/matchers/include_spec.rb +2 -2
  132. data/spec/matchers/infinity_spec.rb +34 -0
  133. data/spec/matchers/match_yaml_spec.rb +3 -3
  134. data/spec/matchers/output_spec.rb +2 -2
  135. data/spec/matchers/output_to_fd_spec.rb +2 -2
  136. data/spec/matchers/raise_error_spec.rb +24 -3
  137. data/spec/matchers/respond_to_spec.rb +2 -2
  138. data/spec/matchers/signed_zero_spec.rb +32 -0
  139. data/spec/matchers/stringsymboladapter_spec.rb +2 -2
  140. data/spec/mocks/mock_spec.rb +12 -12
  141. data/spec/mocks/proxy_spec.rb +1 -1
  142. data/spec/runner/actions/gdb_spec.rb +1 -1
  143. data/spec/runner/actions/tag_spec.rb +1 -1
  144. data/spec/runner/actions/taglist_spec.rb +1 -1
  145. data/spec/runner/context_spec.rb +27 -27
  146. data/spec/runner/example_spec.rb +1 -1
  147. data/spec/runner/exception_spec.rb +1 -1
  148. data/spec/runner/filters/tag_spec.rb +2 -2
  149. data/spec/runner/formatters/describe_spec.rb +1 -1
  150. data/spec/runner/formatters/dotted_spec.rb +2 -2
  151. data/spec/runner/formatters/html_spec.rb +2 -2
  152. data/spec/runner/formatters/junit_spec.rb +147 -0
  153. data/spec/runner/formatters/unit_spec.rb +2 -2
  154. data/spec/runner/formatters/yaml_spec.rb +3 -3
  155. data/spec/runner/mspec_spec.rb +22 -21
  156. data/spec/runner/shared_spec.rb +9 -1
  157. data/spec/runner/tag_spec.rb +1 -1
  158. data/spec/spec_helper.rb +1 -7
  159. data/spec/utils/name_map_spec.rb +1 -2
  160. data/spec/utils/options_spec.rb +58 -27
  161. data/spec/utils/script_spec.rb +5 -13
  162. data/spec/utils/version_spec.rb +1 -1
  163. metadata +254 -64
  164. data/lib/mspec/helpers/bignum.rb +0 -5
  165. data/lib/mspec/helpers/fmode.rb +0 -15
  166. data/lib/mspec/helpers/infinity.rb +0 -5
  167. data/lib/mspec/helpers/metaclass.rb +0 -7
  168. data/lib/mspec/helpers/nan.rb +0 -5
  169. data/lib/mspec/runner/actions/debug.rb +0 -17
  170. data/spec/helpers/bignum_spec.rb +0 -11
  171. data/spec/helpers/fmode_spec.rb +0 -14
  172. data/spec/helpers/infinity_spec.rb +0 -8
  173. data/spec/helpers/nan_spec.rb +0 -8
  174. data/spec/runner/actions/debug_spec.rb +0 -62
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ pkg
2
+ *.rbc
3
+ *.iml
4
+ *.iws
5
+ *.ipr
6
+ *.sw?
7
+
8
+ .rbx
9
+
10
+ # ctags dir
11
+ /tags
12
+
13
+ *.gem
14
+ .bundle
15
+ .config
16
+ .yardoc
17
+ Gemfile.lock
18
+ InstalledFiles
19
+ _yardoc
20
+ coverage
21
+ doc/
22
+ lib/bundler/man
23
+ rdoc
24
+ spec/reports
25
+ test/tmp
26
+ test/version_tmp
27
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mspec.gemspec
4
+ gemspec
data/README CHANGED
@@ -1,197 +1,77 @@
1
- = Overview
1
+ 1. Overview
2
2
 
3
3
  MSpec is a specialized framework that is syntax-compatible with RSpec for
4
- basic things like +describe+, +it+ blocks and +before+, +after+ actions. MSpec
4
+ basic things like 'describe', 'it' blocks and 'before', 'after' actions. MSpec
5
5
  contains additional features that assist in writing the RubySpecs used by
6
6
  multiple Ruby implementations.
7
7
 
8
8
  MSpec attempts to use the simplest Ruby language features so that beginning
9
- Ruby implementations can run the Ruby specs. So, for example, there is not
10
- great concern given to constant clashes. Namespacing (or module scoping) is
11
- not used because implementing this correctly took a significant amount of work
12
- in Rubinius and it is likely that other implementations would also face
13
- difficulties.
9
+ Ruby implementations can run the Ruby specs.
14
10
 
15
11
  MSpec is not intended as a replacement for RSpec. MSpec attempts to provide a
16
12
  subset of RSpec's features in some cases and a superset in others. It does not
17
- provide all the matchers, for instance. However, MSpec provides several
18
- extensions to facilitate writing the Ruby specs in a manner compatible with
19
- multiple Ruby implementations.
20
-
21
- First, MSpec offers a set of guards to control execution of the specs. These
22
- guards not only enable or disable execution but also annotate the specs with
23
- additional information about why they are run or not run. Second, MSpec
24
- provides a different shared spec implementation specifically designed to ease
25
- writing specs for the numerous aliased methods in Ruby. The MSpec shared spec
26
- implementation should not conflict with RSpec's own shared behavior facility.
27
- Third, MSpec provides various helper methods to simplify some specs, for
28
- example, creating temporary file names. Finally, MSpec has several specialized
29
- runner scripts that includes a configuration facility with a default project
30
- file and user-specific overrides.
31
-
32
- Caveats:
33
-
34
- * Use RSpec to run the MSpec specs. There are no plans currently to make
35
- the MSpec specs runnable by MSpec.
36
- * Don't mock the #hash method as MSpec's Mock implementation uses Hash
37
- internally. This can be replaced if necessary, but at this point there is no
38
- compelling need to do so.
39
-
40
-
41
- == Architecture
42
-
43
-
44
- == Matchers
45
-
46
- Matchers are additional aids for the verification process. The default
47
- is of course to #should or #should_not using the #== operator and its
48
- friends but the matchers add a new set of 'operators' to help in the
49
- task. They reside in `mspec/matchers/`. There are two broad categories,
50
- those that apply to an individual object and those that apply to a
51
- block:
52
-
53
- === Object
54
-
55
- - `base` implements the standard #==, #< #<= #>= #> and #=~ with their
56
- normal semantics for the objects that you invoke them on.
57
-
58
- - `be_ancestor_of` is equivalent to checking `obj.ancestors.include?`.
59
-
60
- - `be_close` is a "delta" for floating-point math. Due to the very
61
- nature of it, floating-point comparisons should never be treated as
62
- exact. By default the tolerance is 0.00003 but it can be altered if
63
- so desired. So `0.23154.should be_close(0.23157)` would succeed
64
- (which is usually close enough for floating point unless you are
65
- doing some scientific computing.)
66
-
67
- - `be_empty` checks `obj.empty?`
68
-
69
- - `be_kind_of` is equivalent to `obj.kind_of?`
70
-
71
- - `include` is `obj.include?`
72
-
73
- === Block
74
-
75
- All of these should be applied to a block created with `lambda` or `proc`:
76
-
77
- - `complain` is probably clearer stated as `lambda {...}.should complain`;
78
- it checks that the block issues a warning. The message can be checked
79
- against either a String or a Regexp.
80
-
81
- - `output` checks that the block produces the given output (stdout as well
82
- as stderr, in that order) matched either to a String or a Regexp. This one
83
- uses overrides so if that is a problem (for e.g. speccing Readline or
84
- something) see below.
85
-
86
- - `output_to_fd` is a lower-level version and actually verifies that output
87
- to a certain file descriptor is correct whether from an in-/output stream
88
- or an actual file. Also can check with either a String or a Regexp.
13
+ provide all the matchers, for instance.
89
14
 
90
- - `raise_error` verifies the exception type (if any) raised by the block it
91
- is associated with. The exception class can be given for finer-grained
92
- control (inheritance works normally so Exception would catch everything.)
15
+ However, MSpec provides several extensions to facilitate writing the Ruby
16
+ specs in a manner compatible with multiple Ruby implementations.
93
17
 
94
- == Nested 'describe' blocks
18
+ 1. MSpec offers a set of guards to control execution of the specs. These
19
+ guards not only enable or disable execution but also annotate the specs
20
+ with additional information about why they are run or not run.
95
21
 
96
- MSpec supports nesting one 'describe' block inside another. The examples in
97
- the nested block are evaluated with all the before/after blocks of all the
98
- containing 'describe' blocks. The following example illustrates this:
22
+ 2. MSpec provides a different shared spec implementation specifically
23
+ designed to ease writing specs for the numerous aliased methods in Ruby.
24
+ The MSpec shared spec implementation should not conflict with RSpec's own
25
+ shared behavior facility.
99
26
 
100
- describe "Some#method" do
101
- before :each do
102
- @obj = 1
103
- end
27
+ 3. MSpec provides various helper methods to simplify some specs, for
28
+ example, creating temporary file names.
104
29
 
105
- describe "when passed String" do
106
- before :each do
107
- @meth = :to_s
108
- end
30
+ 4. MSpec has several specialized runner scripts that includes a
31
+ configuration facility with a default project file and user-specific
32
+ overrides.
109
33
 
110
- it "returns false" do
111
- # when this example is evaluated, @obj = 1 and @meth = :to_s
112
- end
113
- end
114
- end
115
34
 
116
- The output when using the SpecdocFormatter (selected with -fs to the runners)
117
- will be as follows:
35
+ 2. Bundler
118
36
 
119
- Some#method when passed String
120
- - returns false
37
+ A Gemfile is provides. Use Bundler to install gem dependencies. To install
38
+ Bundler, run the following:
121
39
 
40
+ $ gem install bundler
122
41
 
123
- == Shared 'describe' blocks
42
+ To install the gem dependencies with Bundler, run the following:
124
43
 
125
- MSpec supports RSpec-style shared 'describe' blocks. MSpec also provides a
126
- convenience method to assist in writing specs for the numerous aliased methods
127
- that Ruby provides. The following example illustrates shared blocks:
44
+ $ RUBYLIB=lib ruby -S bundle install
128
45
 
129
- describe :someclass_some_method, :shared => true do
130
- it "does something" do
131
- end
132
- end
133
46
 
134
- describe "SomeClass#some_method" do
135
- it_should_behave_like "someclass_some_method"
136
- end
47
+ 3. Running Specs
137
48
 
138
- The first argument to 'describe' for a shared block is an object that
139
- duck-types as a String. The representation of the object must be unique. This
140
- example uses a symbol. This was the convention for the previous facility that
141
- MSpec provided for aliased method (#it_behaves_like). However, this convention
142
- is not set in stone (but the uniqueness requirement is). Note that the
143
- argument to the #it_should_behave_like is a String because at this time RSpec
144
- will not find the shared block by the symbol.
49
+ Use RSpec to run the MSpec specs. There are no plans currently to make the
50
+ MSpec specs runnable by MSpec.
145
51
 
146
- MSpec continues to support the #it_behaves_like convenience method for
147
- specifying aliased methods. The syntax is as follows:
52
+ After installing the gem dependencies, the specs can be run as follows:
148
53
 
149
- it_behaves_like :symbol_matching_shared_describe, :method [, :object]
54
+ $ ruby -S rspec
150
55
 
151
- describe :someclass_some_method, :shared => true do
152
- it "returns true" do
153
- obj.send(@method).should be_true
154
- end
56
+ Or
155
57
 
156
- it "returns something else" do
157
- @object.send(@method).should be_something_else
158
- end
159
- end
58
+ $ ruby -S rake
160
59
 
161
- # example #1
162
- describe "SomeClass#some_method" do
163
- it_behaves_like :someclass_some_method, :other_method
164
- end
60
+ To run an individual spec file, use the following example:
165
61
 
166
- # example #2
167
- describe "SomeOtherClass#some_method" do
168
- it_behaves_like :someclass_some_method, :some_method, OtherClass
169
- end
62
+ $ ruby -S rspec spec/helpers/ruby_exe_spec.rb
170
63
 
171
- The first form above (#1) is used for typical aliases. That is, methods with
172
- different names on the same class that behave identically. The
173
- #it_behaves_like helper creates a before(:all) block that sets @method to
174
- :other_method. The form of the first example block in the shared block
175
- illustrates the typical form of a spec for an aliased method.
176
64
 
177
- The second form above (#2) is used for methods on different classes that are
178
- essentially aliases, even though Ruby does not provide a syntax for specifying
179
- such methods as aliases. Examples are the methods on File, FileTest, and
180
- File::Stat. In this case, the #it_behaves_like helper sets both @method and
181
- @object in the before(:all) block (@method = :some_method, @object =
182
- OtherClass in this example).
65
+ 4. Documentation
183
66
 
184
- For shared specs that fall outside of either of these two narrow categories,
185
- use nested or shared 'describe' blocks as appropriate and use the
186
- #it_should_behave_like method directly.
67
+ See http://rubyspec.org
187
68
 
188
- == Guards
189
69
 
190
- Since Ruby is not completely isolated from its platform or execution environment, the spec files may contain guards: conditions placed around a spec or a set of specs to enable or disable them.
70
+ 5. Source Code
191
71
 
192
- You can find an overview of the current guards and their usage in: http://rubyspec.org/wiki/mspec/Guards .
72
+ See https://github.com/rubyspec/mspec
193
73
 
194
- == Helpers
195
74
 
75
+ 6. License
196
76
 
197
- == Runners
77
+ See the LICENSE in the source code.
data/Rakefile CHANGED
@@ -1,47 +1,7 @@
1
- require 'rubygems'
2
- require 'spec/rake/spectask'
3
- require 'rake/gempackagetask'
1
+ require 'bundler/gem_tasks'
2
+ require 'bundler/setup'
3
+ require 'rspec/core/rake_task'
4
4
 
5
- $:.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
6
- require 'lib/mspec/version'
7
-
8
- Spec::Rake::SpecTask.new
5
+ RSpec::Core::RakeTask.new(:spec)
9
6
 
10
7
  task :default => :spec
11
-
12
-
13
- spec = Gem::Specification.new do |s|
14
- s.name = %q{mspec}
15
- s.version = MSpec::VERSION.to_s
16
-
17
- s.specification_version = 2 if s.respond_to? :specification_version=
18
-
19
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
20
- s.authors = ["Brian Ford"]
21
- s.date = %q{2010-03-13}
22
- s.email = %q{bford@engineyard.com}
23
- s.has_rdoc = true
24
- s.extra_rdoc_files = %w[ README LICENSE ]
25
- s.executables = ["mkspec", "mspec", "mspec-ci", "mspec-run", "mspec-tag"]
26
- s.files = FileList[ '{bin,lib,spec}/**/*.{yaml,txt,rb}', 'Rakefile', *s.extra_rdoc_files ]
27
- s.homepage = %q{http://rubyspec.org}
28
- s.rubyforge_project = 'http://rubyforge.org/projects/mspec'
29
- s.require_paths = ["lib"]
30
- s.rubygems_version = %q{1.3.5}
31
- s.summary = <<EOS
32
- MSpec is a specialized framework that is syntax-compatible
33
- with RSpec for basic things like describe, it blocks and
34
- before, after actions.
35
-
36
- MSpec contains additional features that assist in writing
37
- the RubySpecs used by multiple Ruby implementations. Also,
38
- MSpec attempts to use the simplest Ruby language features
39
- so that beginning Ruby implementations can run it.
40
- EOS
41
-
42
- s.rdoc_options << '--title' << 'MSpec Gem' <<
43
- '--main' << 'README' <<
44
- '--line-numbers'
45
- end
46
-
47
- Rake::GemPackageTask.new(spec){ |pkg| pkg.gem_spec = spec }
data/bin/mkspec.bat ADDED
@@ -0,0 +1 @@
1
+ @"ruby.exe" "%~dpn0" %*
data/bin/mspec-ci.bat ADDED
@@ -0,0 +1 @@
1
+ @"ruby.exe" "%~dpn0" %*
data/bin/mspec-run.bat ADDED
@@ -0,0 +1 @@
1
+ @"ruby.exe" "%~dpn0" %*
data/bin/mspec-tag.bat ADDED
@@ -0,0 +1 @@
1
+ @"ruby.exe" "%~dpn0" %*
data/bin/mspec.bat ADDED
@@ -0,0 +1 @@
1
+ @"ruby.exe" "%~dpn0" %*
@@ -138,8 +138,8 @@ EOS
138
138
  # Determine and return the path of the ruby executable.
139
139
 
140
140
  def ruby
141
- ruby = File.join(Config::CONFIG['bindir'],
142
- Config::CONFIG['ruby_install_name'])
141
+ ruby = File.join(RbConfig::CONFIG['bindir'],
142
+ RbConfig::CONFIG['ruby_install_name'])
143
143
 
144
144
  ruby.gsub! File::SEPARATOR, File::ALT_SEPARATOR if File::ALT_SEPARATOR
145
145
 
@@ -34,6 +34,7 @@ class MSpecRun < MSpecScript
34
34
  options.configure { |f| load f }
35
35
  options.name
36
36
  options.randomize
37
+ options.repeat
37
38
  options.pretend
38
39
  options.background
39
40
  options.interrupt
@@ -68,6 +69,9 @@ class MSpecRun < MSpecScript
68
69
  options.doc "\n $ mspec -g fails path/to/the_file_spec.rb"
69
70
  options.doc "\n 3. To start the debugger before the spec matching 'this crashes'"
70
71
  options.doc "\n $ mspec --spec-debug -S 'this crashes' path/to/the_file_spec.rb"
72
+ options.doc "\n 4. To run some specs matching 'this crashes'"
73
+ options.doc "\n $ mspec -e 'this crashes' path/to/the_file_spec.rb"
74
+
71
75
  options.doc ""
72
76
 
73
77
  patterns = options.parse argv
@@ -6,6 +6,7 @@ require 'mspec/version'
6
6
  require 'mspec/utils/options'
7
7
  require 'mspec/utils/script'
8
8
  require 'mspec/helpers/tmp'
9
+ require 'mspec/runner/actions/filter'
9
10
  require 'mspec/runner/actions/timer'
10
11
 
11
12
 
@@ -17,6 +18,7 @@ class MSpecMain < MSpecScript
17
18
  config[:flags] = []
18
19
  config[:command] = nil
19
20
  config[:options] = []
21
+ config[:launch] = []
20
22
  end
21
23
 
22
24
  def options(argv=ARGV)
@@ -38,17 +40,21 @@ class MSpecMain < MSpecScript
38
40
  options.on("-D", "--gdb", "Run under gdb") do
39
41
  config[:use_gdb] = true
40
42
  end
43
+
41
44
  options.on("-A", "--valgrind", "Run under valgrind") do
42
- config[:flags] << '--valgrind'
45
+ config[:use_valgrind] = true
43
46
  end
47
+
44
48
  options.on("--warnings", "Don't supress warnings") do
45
49
  config[:flags] << '-w'
46
50
  ENV['OUTPUT_WARNINGS'] = '1'
47
51
  end
52
+
48
53
  options.on("-j", "--multi", "Run multiple (possibly parallel) subprocesses") do
49
54
  config[:multi] = true
50
55
  config[:options] << "-fy"
51
56
  end
57
+
52
58
  options.version MSpec::VERSION do
53
59
  if config[:command]
54
60
  config[:options] << "-v"
@@ -57,6 +63,7 @@ class MSpecMain < MSpecScript
57
63
  exit
58
64
  end
59
65
  end
66
+
60
67
  options.help do
61
68
  if config[:command]
62
69
  config[:options] << "-h"
@@ -75,6 +82,7 @@ class MSpecMain < MSpecScript
75
82
  options.doc " ci - Run the known good specs"
76
83
  options.doc " tag - Add or remove tags\n"
77
84
  options.doc " mspec COMMAND -h for more options\n"
85
+ options.doc " example: $ mspec run -h\n"
78
86
 
79
87
  options.on_extra { |o| config[:options] << o }
80
88
  config[:options].concat options.parse(argv)
@@ -140,6 +148,8 @@ class MSpecMain < MSpecScript
140
148
  ENV['RUBY_FLAGS'] = config[:flags].join " "
141
149
 
142
150
  argv = []
151
+
152
+ argv.concat config[:launch]
143
153
  argv.concat config[:flags]
144
154
  argv.concat config[:includes]
145
155
  argv.concat config[:requires]
@@ -150,11 +160,16 @@ class MSpecMain < MSpecScript
150
160
  if config[:multi] and config[:command] == "ci"
151
161
  multi_exec argv
152
162
  else
153
- if config[:use_gdb]
163
+ if config[:use_valgrind]
164
+ more = ["--db-attach=#{config[:use_gdb] ? 'yes' : 'no'}", config[:target]] + argv
165
+ exec "valgrind", *more
166
+ elsif config[:use_gdb]
154
167
  more = ["--args", config[:target]] + argv
155
168
  exec "gdb", *more
156
169
  else
157
- exec config[:target], *argv
170
+ cmd, *rest = config[:target].split(/\s+/)
171
+ argv = rest + argv unless rest.empty?
172
+ exec cmd, *argv
158
173
  end
159
174
  end
160
175
  end