moduleSpecmoduleMocksclassBaseExpectationattr_reader:symattr_writer:expected_received_count,:method_block,:expected_fromprotected:expected_received_count=,:method_block=,:expected_from=attr_accessor:error_generatorprotected:error_generator,:error_generator=definitialize(error_generator,expectation_ordering,expected_from,sym,method_block,expected_received_count=1,opts={})@error_generator=error_generator@error_generator.opts=opts@expected_from=expected_from@sym=sym@method_block=method_block@return_block=nil@actual_received_count=0@expected_received_count=expected_received_count@args_expectation=ArgumentExpectation.new([ArgumentConstraints::AnyArgsConstraint.new])@consecutive=false@exception_to_raise=nil@symbol_to_throw=nil@order_group=expectation_ordering@at_least=nil@at_most=nil@args_to_yield=[]enddefbuild_child(expected_from,method_block,expected_received_count,opts={})child=clonechild.expected_from=expected_fromchild.method_block=method_blockchild.expected_received_count=expected_received_countnew_gen=error_generator.clonenew_gen.opts=optschild.error_generator=new_genchild.clone_args_to_yield@args_to_yieldchildenddeferror_generator_opts=(opts={})@error_generator.opts=optsendprotected:error_generator_opts=defexpected_args@args_expectation.argsenddefand_return(*values,&return_block)Kernel::raiseAmbiguousReturnErrorunless@method_block.nil?casevalues.sizewhen0thenvalue=nilwhen1thenvalue=values[0]elsevalue=values@consecutive=true@expected_received_count=values.sizeif!ignoring_args?&&@expected_received_count<values.sizeend@return_block=block_given??return_block:lambda{value}# Ruby 1.9 - see where this is used below@ignore_args=!block_given?end# :call-seq:# and_raise()# and_raise(Exception) #any exception class# and_raise(exception) #any exception object## == Warning## When you pass an exception class, the MessageExpectation will# raise an instance of it, creating it with +new+. If the exception# class initializer requires any parameters, you must pass in an# instance and not the class.defand_raise(exception=Exception)@exception_to_raise=exceptionenddefand_throw(symbol)@symbol_to_throw=symbolenddefand_yield(*args)if@args_to_yield_were_cloned@args_to_yield.clear@args_to_yield_were_cloned=falseend@args_to_yield<<argsselfenddefmatches(sym,args)@sym==symand@args_expectation.args_match?(args)enddefinvoke(args,block)if@expected_received_count==0@failed_fast=true@actual_received_count+=1@error_generator.raise_expectation_error@sym,@expected_received_count,@actual_received_count,*argsend@order_group.handle_order_constraintselfbeginKernel::raise@exception_to_raiseunless@exception_to_raise.nil?Kernel::throw@symbol_to_throwunless@symbol_to_throw.nil?if!@method_block.nil?default_return_val=invoke_method_block(args)elsif@args_to_yield.size>0default_return_val=invoke_with_yield(block)elsedefault_return_val=nilendif@consecutivereturninvoke_consecutive_return_block(args,block)elsif@return_blockreturninvoke_return_block(args,block)elsereturndefault_return_valendensure@actual_received_count+=1endenddefcalled_max_times?@expected_received_count!=:any&&@expected_received_count>0&&@actual_received_count>=@expected_received_countendprotecteddefinvoke_method_block(args)begin@method_block.call(*args)rescue=>detail@error_generator.raise_block_failed_error@sym,detail.messageendenddefinvoke_with_yield(block)ifblock.nil?@error_generator.raise_missing_block_error@args_to_yieldendvalue=nil@args_to_yield.eachdo|args_to_yield_this_time|ifblock.arity>-1&&args_to_yield_this_time.length!=block.arity@error_generator.raise_wrong_arity_errorargs_to_yield_this_time,block.arityendvalue=block.call(*args_to_yield_this_time)endvalueenddefinvoke_consecutive_return_block(args,block)args<<blockunlessblock.nil?value=@return_block.call(*args)index=[@actual_received_count,value.size-1].minvalue[index]enddefinvoke_return_block(args,block)args<<blockunlessblock.nil?# Ruby 1.9 - when we set @return_block to return values# regardless of arguments, any arguments will result in# a "wrong number of arguments" errorif@ignore_args@return_block.call()else@return_block.call(*args)endenddefclone_args_to_yield(args)@args_to_yield=args.clone@args_to_yield_were_cloned=trueenddeffailed_fast?@failed_fastendendclassMessageExpectation<BaseExpectationdefmatches_name_but_not_args(sym,args)@sym==symandnot@args_expectation.args_match?(args)enddefverify_messages_receivedreturnifexpected_messages_received?||failed_fast?generate_errorrescueSpec::Mocks::MockExpectationError=>errorerror.backtrace.insert(0,@expected_from)Kernel::raiseerrorenddefexpected_messages_received?ignoring_args?||matches_exact_count?||matches_at_least_count?||matches_at_most_count?enddefignoring_args?@expected_received_count==:anyenddefmatches_at_least_count?@at_least&&@actual_received_count>=@expected_received_countenddefmatches_at_most_count?@at_most&&@actual_received_count<=@expected_received_countenddefmatches_exact_count?@expected_received_count==@actual_received_countenddefsimilar_messages@similar_messages||=[]enddefadvise(args,block)similar_messages<<argsenddefgenerate_errorifsimilar_messages.empty?@error_generator.raise_expectation_error(@sym,@expected_received_count,@actual_received_count,*@args_expectation.args)else@error_generator.raise_unexpected_message_args_error(self,*@similar_messages.first)endenddefwith(*args,&block)@args_expectation=ArgumentExpectation.new(args,&block)selfenddefexactly(n)set_expected_received_count:exactly,nselfenddefat_least(n)set_expected_received_count:at_least,nselfenddefat_most(n)set_expected_received_count:at_most,nselfenddeftimes(&block)@method_block=blockifblockselfenddefany_number_of_times(&block)@method_block=blockifblock@expected_received_count=:anyselfenddefnever@expected_received_count=0selfenddefonce(&block)@method_block=blockifblock@expected_received_count=1selfenddeftwice(&block)@method_block=blockifblock@expected_received_count=2selfenddefordered(&block)@method_block=blockifblock@order_group.register(self)@ordered=trueselfenddefnegative_expectation_for?(sym)returnfalseendprotecteddefset_expected_received_count(relativity,n)@at_least=(relativity==:at_least)@at_most=(relativity==:at_most)@expected_received_count=casenwhenNumericnwhen:once1when:twice2endendendclassNegativeMessageExpectation<MessageExpectationdefinitialize(message,expectation_ordering,expected_from,sym,method_block)super(message,expectation_ordering,expected_from,sym,method_block,0)enddefnegative_expectation_for?(sym)return@sym==symendendendend