   add: (mock_method) ->
     @_list.push(mock_method)
 
+  # returns [ "an error re method1()", "another error re method1()", "an error re method2()", ... ]
   find_errors: ->
-    errors = []
-    errors = errors.concat( mock_method.expectations.find_errors(mock_method.method_name) ) for mock_method in @_list
-    errors
+    @_list.reduce ( (errors, mock_method) -> errors.concat(mock_method.find_errors()) ), []
 
   restore_original_methods: ->
     mock_method.restore_original_method() for mock_method in @_list

    @_throws = error
    @

  # is this expectation the same as this other one
  equals: (other) ->
    @matches(other._args...)

  # does this expectation have these args
  matches: (args...) ->
    ( @_args.length == args.length ) and
      ( @_args.every ( element, i ) -> element == args[ i ] )

        if @_list[outer].equals( @_list[inner] )
          fail(messages.DuplicateExpectation, method_name, @_list[outer]._args)

  # returns [ "an error re method1()", "another error re method1()", ... ]
  find_errors: (method_name) ->                           # method_name is for error messages; TODO: is there a better way?
    format(messages.ExpectationNeverCalled, method_name, expectation._args) for expectation in @_list when ! expectation._called

