diff options
Diffstat (limited to 'spec/mspec/lib/mspec/runner/mspec.rb')
-rw-r--r-- | spec/mspec/lib/mspec/runner/mspec.rb | 82 |
1 files changed, 44 insertions, 38 deletions
diff --git a/spec/mspec/lib/mspec/runner/mspec.rb b/spec/mspec/lib/mspec/runner/mspec.rb index 5528f27cf8..0e2496d3d7 100644 --- a/spec/mspec/lib/mspec/runner/mspec.rb +++ b/spec/mspec/lib/mspec/runner/mspec.rb @@ -10,7 +10,6 @@ class MSpecEnv end module MSpec - @exit = nil @abort = nil @start = nil @@ -20,8 +19,8 @@ module MSpec @after = nil @leave = nil @finish = nil - @exclude = nil - @include = nil + @exclude = [] + @include = [] @leave = nil @load = nil @unload = nil @@ -33,13 +32,19 @@ module MSpec @guarded = [] @features = {} @exception = nil - @randomize = nil - @repeat = nil + @randomize = false + @repeat = 1 @expectation = nil @expectations = false - def self.describe(mod, options = nil, &block) - state = ContextState.new mod, options + class << self + attr_reader :file, :include, :exclude + attr_writer :repeat, :randomize + attr_accessor :formatter + end + + def self.describe(description, options = nil, &block) + state = ContextState.new description, options state.parent = current MSpec.register_current state @@ -57,6 +62,10 @@ module MSpec actions :finish end + def self.files_array + @files + end + def self.each_file(&block) if ENV["MSPEC_MULTI"] while file = STDIN.gets @@ -74,7 +83,7 @@ module MSpec # The parent closed the connection without QUIT abort "the parent did not send QUIT" else - return unless files = retrieve(:files) + return unless files = @files shuffle files if randomize? files.each(&block) end @@ -83,10 +92,11 @@ module MSpec def self.files each_file do |file| setup_env - store :file, file + @file = file actions :load protect("loading #{file}") { Kernel.load file } actions :unload + raise "#{file} was executed but did not reset the current example: #{@current}" if @current end end @@ -101,7 +111,7 @@ module MSpec def self.protect(location, &block) begin - @env.instance_eval(&block) + @env.instance_exec(&block) return true rescue SystemExit => e raise e @@ -130,17 +140,17 @@ module MSpec # Sets the toplevel ContextState to +state+. def self.register_current(state) - store :current, state + @current = state end # Sets the toplevel ContextState to +nil+. def self.clear_current - store :current, nil + @current = nil end # Returns the toplevel ContextState. def self.current - retrieve :current + @current end # Stores the shared ContextState keyed by description. @@ -155,17 +165,17 @@ module MSpec # Stores the exit code used by the runner scripts. def self.register_exit(code) - store :exit, code + @exit = code end # Retrieves the stored exit code. def self.exit_code - retrieve(:exit).to_i + @exit.to_i end # Stores the list of files to be evaluated. def self.register_files(files) - store :files, files + @files = files end # Stores one or more substitution patterns for transforming @@ -176,7 +186,7 @@ module MSpec # # See also +tags_file+. def self.register_tags_patterns(patterns) - store :tags_patterns, patterns + @tags_patterns = patterns end # Registers an operating mode. Modes recognized by MSpec: @@ -187,30 +197,30 @@ module MSpec # :report - specs that are guarded are reported # :unguarded - all guards are forced off def self.register_mode(mode) - modes = retrieve :modes + modes = @modes modes << mode unless modes.include? mode end # Clears all registered modes. def self.clear_modes - store :modes, [] + @modes = [] end # Returns +true+ if +mode+ is registered. def self.mode?(mode) - retrieve(:modes).include? mode + @modes.include? mode end def self.enable_feature(feature) - retrieve(:features)[feature] = true + @features[feature] = true end def self.disable_feature(feature) - retrieve(:features)[feature] = false + @features[feature] = false end def self.feature_enabled?(feature) - retrieve(:features)[feature] || false + @features[feature] || false end def self.retrieve(symbol) @@ -259,21 +269,17 @@ module MSpec end end - def self.randomize(flag = true) - @randomize = flag - end - def self.randomize? - @randomize == true - end - - def self.repeat=(times) - @repeat = times + @randomize end def self.repeat - (@repeat || 1).times do + if @repeat == 1 yield + else + @repeat.times do + yield + end end end @@ -289,17 +295,17 @@ module MSpec # Records that an expectation has been encountered in an example. def self.expectation - store :expectations, true + @expectations = true end # Returns true if an expectation has been encountered def self.expectation? - retrieve :expectations + @expectations end # Resets the flag that an expectation has been encountered in an example. def self.clear_expectations - store :expectations, false + @expectations = false end # Transforms a spec filename into a tags filename by applying each @@ -313,9 +319,9 @@ module MSpec # # See also +register_tags_patterns+. def self.tags_file - patterns = retrieve(:tags_patterns) || + patterns = @tags_patterns || [[%r(spec/), 'spec/tags/'], [/_spec.rb$/, '_tags.txt']] - patterns.inject(retrieve(:file).dup) do |file, pattern| + patterns.inject(@file.dup) do |file, pattern| file.gsub(*pattern) end end |