Cannot override include at the toplevel in MRI
# File lib/mspec/runner/mspec.rb, line 62 def self.actions(action, *args) actions = retrieve(action) actions.each { |obj| obj.send action, *args } if actions end
Sets the toplevel ContextState to nil.
# File lib/mspec/runner/mspec.rb, line 100 def self.clear_current store :current, nil end
Resets the flag that an expectation has been encountered in an example.
# File lib/mspec/runner/mspec.rb, line 264 def self.clear_expectations store :expectations, false end
Clears all registered modes.
# File lib/mspec/runner/mspec.rb, line 158 def self.clear_modes store :modes, [] end
Returns the toplevel ContextState.
# File lib/mspec/runner/mspec.rb, line 105 def self.current retrieve :current end
Deletes tag from the tag file if it exists. Returns true if the tag is deleted, false otherwise. Deletes the tag file if it is empty.
# File lib/mspec/runner/mspec.rb, line 334 def self.delete_tag(tag) deleted = false pattern = /#{tag.tag}.*#{Regexp.escape(tag.escape(tag.description))}/ file = tags_file if File.exist? file lines = IO.readlines(file) File.open(file, "wb") do |f| lines.each do |line| unless pattern =~ line.chomp f.puts line unless line.empty? else deleted = true end end end File.delete file unless File.size? file end return deleted end
# File lib/mspec/runner/mspec.rb, line 31 def self.describe(mod, options=nil, &block) state = ContextState.new mod, options state.parent = current MSpec.register_current state state.describe(&block) state.process unless state.shared? or current end
# File lib/mspec/runner/mspec.rb, line 171 def self.disable_feature(feature) retrieve(:features)[feature] = false end
# File lib/mspec/runner/mspec.rb, line 167 def self.enable_feature(feature) retrieve(:features)[feature] = true end
Retrieves the stored exit code.
# File lib/mspec/runner/mspec.rb, line 125 def self.exit_code retrieve(:exit).to_i end
Records that an expectation has been encountered in an example.
# File lib/mspec/runner/mspec.rb, line 254 def self.expectation store :expectations, true end
Returns true if an expectation has been encountered
# File lib/mspec/runner/mspec.rb, line 259 def self.expectation? retrieve :expectations end
# File lib/mspec/runner/mspec.rb, line 175 def self.feature_enabled?(feature) retrieve(:features)[feature] || false end
# File lib/mspec/runner/mspec.rb, line 47 def self.files return unless files = retrieve(:files) shuffle files if randomize? files.each do |file| @env = Object.new @env.extend MSpec store :file, file actions :load protect("loading #{file}") { Kernel.load file } actions :unload end end
Guards can be nested, so a stack is necessary to know when we have exited the toplevel guard.
# File lib/mspec/runner/mspec.rb, line 82 def self.guard @guarded << true end
# File lib/mspec/runner/mspec.rb, line 90 def self.guarded? not @guarded.empty? end
# File lib/mspec/matchers/include.rb, line 28 def include(*expected) IncludeMatcher.new(*expected) end
Returns true if mode is registered.
# File lib/mspec/runner/mspec.rb, line 163 def self.mode?(mode) retrieve(:modes).include? mode end
# File lib/mspec/runner/mspec.rb, line 41 def self.process actions :start files actions :finish end
# File lib/mspec/runner/mspec.rb, line 67 def self.protect(location, &block) begin @env.instance_eval(&block) return true rescue SystemExit raise rescue Exception => exc register_exit 1 actions :exception, ExceptionState.new(current && current.state, location, exc) return false end end
# File lib/mspec/runner/mspec.rb, line 225 def self.randomize(flag=true) @randomize = flag end
# File lib/mspec/runner/mspec.rb, line 229 def self.randomize? @randomize == true end
This method is used for registering actions that are run at particular points in the spec cycle:
:start before any specs are run :load before a spec file is loaded :enter before a describe block is run :before before a single spec is run :add while a describe block is adding examples to run later :expectation before a 'should', 'should_receive', etc. :example after an example block is run, passed the block :exception after an exception is rescued :after after a single spec is run :leave after a describe block is run :unload after a spec file is run :finish after all specs are run
Objects registered as actions above should respond to a method of the same name. For example, if an object is registered as a :start action, it should respond to a start method call.
Additionally, there are two “action” lists for filtering specs:
:include return true if the spec should be run :exclude return true if the spec should NOT be run
# File lib/mspec/runner/mspec.rb, line 212 def self.register(symbol, action) unless value = retrieve(symbol) value = store symbol, [] end value << action unless value.include? action end
Sets the toplevel ContextState to state.
# File lib/mspec/runner/mspec.rb, line 95 def self.register_current(state) store :current, state end
Stores the exit code used by the runner scripts.
# File lib/mspec/runner/mspec.rb, line 120 def self.register_exit(code) store :exit, code end
Stores the list of files to be evaluated.
# File lib/mspec/runner/mspec.rb, line 130 def self.register_files(files) store :files, files end
Registers an operating mode. Modes recognized by MSpec:
:pretend - actions execute but specs are not run :verify - specs are run despite guards and the result is verified to match the expectation of the guard :report - specs that are guarded are reported :unguarded - all guards are forced off
# File lib/mspec/runner/mspec.rb, line 152 def self.register_mode(mode) modes = retrieve :modes modes << mode unless modes.include? mode end
# File lib/mspec/runner/mspec.rb, line 237 def self.repeat (@repeat || 1).times do yield end end
# File lib/mspec/runner/mspec.rb, line 233 def self.repeat=(times) @repeat = times end
# File lib/mspec/runner/mspec.rb, line 179 def self.retrieve(symbol) instance_variable_get :"@#{symbol}" end
# File lib/mspec/runner/mspec.rb, line 243 def self.shuffle(ary) return if ary.empty? size = ary.size size.times do |i| r = rand(size - i - 1) ary[i], ary[r] = ary[r], ary[i] end end
# File lib/mspec/runner/mspec.rb, line 183 def self.store(symbol, value) instance_variable_set :"@#{symbol}", value end
# File lib/mspec/runner/mspec.rb, line 86 def self.unguard @guarded.pop end
# File lib/mspec/runner/mspec.rb, line 219 def self.unregister(symbol, action) if value = retrieve(symbol) value.delete action end end
Writes tag to the tag file if it does not already exist. Returns true if the tag is written, false otherwise.
# File lib/mspec/runner/mspec.rb, line 317 def self.write_tag(tag) string = tag.to_s file = tags_file path = File.dirname file FileUtils.mkdir_p path unless File.exist? path if File.exist? file File.open(file, "rb") do |f| f.each_line { |line| return false if line.chomp == string } end end File.open(file, "ab") { |f| f.puts string } return true end
Generated with the Darkfish Rdoc Generator 2.