moduleRSpecmoduleCoreclassExampleGroupextendHooksincludeSubjectincludeLetincludePendingattr_accessor:running_exampledefself.worldRSpec.worldenddefself.inherited(klass)RSpec::Core::Runner.autorunworld.example_groups<<klassifklass.superclass==ExampleGroupendclass<<selfdefself.delegate_to_metadata(*names)names.eachdo|name|define_methodnamedometadata[:example_group][name]endendenddelegate_to_metadata:description,:describes,:file_pathalias_method:display_name,:descriptionenddefself.define_example_method(name,extra_options={})module_eval(<<-END_RUBY,__FILE__,__LINE__)
def self.#{name}(desc=nil, options={}, &block)
options.update(:pending => true) unless block
options.update(:caller => caller)
options.update(#{extra_options.inspect})
examples << RSpec::Core::Example.new(self, desc, options, block)
examples.last
end
END_RUBYenddefine_example_method:exampleclass<<selfalias_method:alias_example_to,:define_example_methodendalias_example_to:italias_example_to:its,:attribute_of_subject=>truealias_example_to:specifyalias_example_to:focused,:focused=>truealias_example_to:pending,:pending=>truedefself.it_should_behave_like(*names)names.eachdo|name|beginmodule_eval&RSpec.world.shared_example_groups[name]rescueArgumentErrorraise"Could not find shared example group named #{name.inspect}"endendenddefself.examples@examples||=[]enddefself.filtered_examplesworld.filtered_examples[self]enddefself.descendant_filtered_examplesfiltered_examples+children.collect{|c|c.descendant_filtered_examples}enddefself.metadata@metadataenddefself.superclass_metadataself.superclass.respond_to?(:metadata)?self.superclass.metadata:nilenddefself.describe(*args,&example_group_block)@_subclass_count||=0@_subclass_count+=1args<<{}unlessargs.last.is_a?(Hash)args.last.update(:example_group_block=>example_group_block)args.last.update(:caller=>caller)# TODO 2010-05-05: Because we don't know if const_set is thread-safechild=const_set("Nested_#{@_subclass_count}",subclass(self,args,&example_group_block))children<<childchildendclass<<selfalias_method:context,:describeenddefself.subclass(parent,args,&example_group_block)subclass=Class.new(parent)subclass.set_it_up(*args)subclass.module_eval(&example_group_block)ifexample_group_blocksubclassenddefself.children@children||=[]enddefself.descendants[self]+children.collect{|c|c.descendants}.flattenenddefself.ancestors@_ancestors||=super().select{|a|a<RSpec::Core::ExampleGroup}enddefself.set_it_up(*args)@metadata=RSpec::Core::Metadata.new(superclass_metadata).process(*args)world.find_modules(self).eachdo|include_or_extend,mod,opts|send(include_or_extend,mod)unlessmixins[include_or_extend].include?(mod)endenddefself.before_all_ivars@before_all_ivars||={}enddefself.eval_before_alls(running_example)returnifdescendant_filtered_examples.empty?superclass.before_all_ivars.each{|ivar,val|running_example.instance_variable_set(ivar,val)}world.run_hook(:before,:all,self,running_example)untilbefore_alls.empty?running_example.instance_eval&before_alls.shiftendrunning_example.instance_variables.each{|ivar|before_all_ivars[ivar]=running_example.instance_variable_get(ivar)}enddefself.eval_before_eachs(running_example)world.run_hook(:before,:each,self,running_example)ancestors.reverse.each{|ancestor|ancestor.before_eachs.each{|blk|running_example.instance_eval(&blk)}}enddefself.eval_after_eachs(running_example)ancestors.each{|ancestor|ancestor.after_eachs.reverse.each{|blk|running_example.instance_eval(&blk)}}world.run_hook(:after,:each,self,running_example)enddefself.eval_after_alls(running_example)returnifdescendant_filtered_examples.empty?before_all_ivars.each{|ivar,val|running_example.instance_variable_set(ivar,val)}ancestors.eachdo|ancestor|untilancestor.after_alls.empty?running_example.instance_eval&ancestor.after_alls.popendendworld.run_hook(:after,:all,self,running_example)enddefself.run(reporter)example_group_instance=newreporter.add_example_group(self)begineval_before_alls(example_group_instance)result_for_this_group=run_examples(example_group_instance,reporter)results_for_descendants=children.map{|child|child.run(reporter)}result_for_this_group&&(children.empty??true:results_for_descendants)ensureeval_after_alls(example_group_instance)endenddefself.run_examples(instance,reporter)filtered_examples.mapdo|example|beginset_ivars(instance,before_all_ivars)example.run(instance,reporter)ensureclear_ivars(instance)clear_memoized(instance)endend.all?enddefself.to_sself==RSpec::Core::ExampleGroup?'RSpec::Core::ExampleGroup':nameenddefself.all_apply?(filters)metadata.all_apply?(filters)enddefself.declaration_line_numbers[metadata[:example_group][:line_number]]+examples.collect{|e|e.metadata[:line_number]}+children.collect{|c|c.declaration_line_numbers}.flattenenddefself.top_level_descriptionancestors.last.descriptionenddefself.set_ivars(instance,ivars)ivars.each{|name,value|instance.instance_variable_set(name,value)}enddefself.clear_ivars(instance)instance.instance_variables.each{|ivar|instance.send(:remove_instance_variable,ivar)}enddefself.clear_memoized(instance)instance.__memoized.clearenddefdescribed_classself.class.describesendprivatedefself.extended_modules#:nodoc:@extended_modules||=ancestors.select{|mod|mod.class==Module}-[Object,Kernel]enddefself.mixins@mixins||={:include=>included_modules,:extend=>extended_modules}endendendend