require'rspec/core/hooks'require'rspec/core/example_group_subject'require'rspec/core/let'require'rspec/core/metadata'moduleRspecmoduleCoreclassExampleGroupextendHooksincludeExampleGroupSubjectincludeLetattr_accessor:running_exampledefself.inherited(klass)Rspec::Core::Runner.autorunRspec::Core.world.example_groups<<klassenddefself.extended_modules#:nodoc:ancestors=class<<self;ancestorsendancestors.select{|mod|mod.class==Module}-[Object,Kernel]enddefself.example(desc=nil,options={},&block)options.update(:pending=>true)unlessblockoptions.update(:caller=>caller)examples<<Rspec::Core::Example.new(self,desc,options,block)enddefself.alias_example_to(new_alias,extra_options={})new_alias=<<-END_RUBY
def self.#{new_alias}(desc=nil, options={}, &block)
updated_options = options.update(:caller => caller)
updated_options.update(:pending => true) unless block
updated_options.update(#{extra_options.inspect})
examples << Rspec::Core::Example.new(self, desc, updated_options, block)
end
END_RUBYmodule_eval(new_alias,__FILE__,__LINE__)endalias_example_to:italias_example_to:specifyalias_example_to:focused,:focused=>truealias_example_to:pending,:pending=>truedefself.it_should_behave_like(*names)names.eachdo|name|beginmodule_eval&Rspec::Core.world.shared_example_groups[name]rescueArgumentErrorraise"Could not find shared example group named #{name.inspect}"endendenddefself.examples@_examples||=[]enddefself.examples_to_run@_examples_to_run||=[]enddefself.superclass_metadataself.superclass.respond_to?(:metadata)?self.superclass.metadata:nilenddefself.configuration@configurationenddefself.set_it_up(*args)@configuration=args.shift@metadata=Rspec::Core::Metadata.new(superclass_metadata).process(*args)configuration.find_modules(self).eachdo|include_or_extend,mod,opts|ifinclude_or_extend==:extendsend(:extend,mod)unlessextended_modules.include?(mod)elsesend(:include,mod)unlessincluded_modules.include?(mod)endendenddefself.metadata@metadataenddefself.display_namemetadata[:example_group][:description]enddefself.descriptionmetadata[:example_group][:description]enddefself.describesmetadata[:example_group][:describes]enddefself.file_pathmetadata[:example_group][:file_path]enddefself.describe(*args,&example_group_block)raise(ArgumentError,"No arguments given. You must a least supply a type or description")ifargs.empty?raise(ArgumentError,"You must supply a block when calling describe")ifexample_group_block.nil?@_subclass_count||=0@_subclass_count+=1const_set("Nested_#{@_subclass_count}",_build(Class.new(self),caller,args,&example_group_block))enddefself.create(*args,&example_group_block)_build(dup,caller,args,&example_group_block)enddefself._build(klass,given_caller,args,&example_group_block)args<<{}unlessargs.last.is_a?(Hash)args.last.update(:example_group_block=>example_group_block,:caller=>given_caller)args.unshiftRspec.configurationunlessargs.first.is_a?(Rspec::Core::Configuration)klass.set_it_up(*args)klass.module_eval(&example_group_block)ifexample_group_blockklassendclass<<selfalias_method:context,:describeenddefself.ancestors(superclass_last=false)classes=[]current_class=selfwhilecurrent_class<Rspec::Core::ExampleGroupsuperclass_last?classes<<current_class:classes.unshift(current_class)current_class=current_class.superclassendclassesenddefself.before_ancestors@_before_ancestors||=ancestorsenddefself.after_ancestors@_after_ancestors||=ancestors(true)enddefself.before_all_ivars@before_all_ivars||={}enddefself.eval_before_alls(running_example)ifsuperclass.respond_to?(:before_all_ivars)superclass.before_all_ivars.each{|ivar,val|running_example.instance_variable_set(ivar,val)}endconfiguration.find_hook(:before,:all,self).each{|blk|running_example.instance_eval(&blk)}before_alls.each{|blk|running_example.instance_eval(&blk)}running_example.instance_variables.each{|ivar|before_all_ivars[ivar]=running_example.instance_variable_get(ivar)}enddefself.eval_before_eachs(running_example)configuration.find_hook(:before,:each,self).each{|blk|running_example.instance_eval(&blk)}before_ancestors.each{|ancestor|ancestor.before_eachs.each{|blk|running_example.instance_eval(&blk)}}enddefself.eval_after_alls(running_example)after_alls.each{|blk|running_example.instance_eval(&blk)}configuration.find_hook(:after,:all,self).each{|blk|running_example.instance_eval(&blk)}before_all_ivars.keys.each{|ivar|before_all_ivars[ivar]=running_example.instance_variable_get(ivar)}enddefself.eval_after_eachs(running_example)after_ancestors.each{|ancestor|ancestor.after_eachs.each{|blk|running_example.instance_eval(&blk)}}configuration.find_hook(:after,:each,self).each{|blk|running_example.instance_eval(&blk)}enddefself.run(reporter)example_group_instance=newreporter.add_example_group(self)eval_before_alls(example_group_instance)success=run_examples(example_group_instance,reporter)eval_after_alls(example_group_instance)successend# Runs all examples, returning true only if all of them passdefself.run_examples(example_world,reporter)examples_to_run.mapdo|ex|result=ex.run(example_world,reporter)example_world.__reset__before_all_ivars.each{|k,v|example_world.instance_variable_set(k,v)}resultend.all?enddefself.to_sself==Rspec::Core::ExampleGroup?'Rspec::Core::ExampleGroup':nameenddefself.all_apply?(filters)metadata.all_apply?(filters)enddefdescribed_classself.class.describesenddef__reset__instance_variables.each{|ivar|remove_instance_variable(ivar)}__memoized.clearendendendend