module Spec
  module Expectations
    module Should
      
      class Not < Base #:nodoc:
        def initialize(target)
          @target = target
          @be_seen = false
        end

        deprecated do
          #Gone for 0.9
          def be(expected = :___no_arg)
            @be_seen = true
            return self if (expected == :___no_arg)
            fail_with_message(default_message("should not be", expected)) if (@target.equal?(expected))
          end

          #Gone for 0.9
          def have(expected_number=nil)
            NotHave.new(@target, :exactly, expected_number)
          end

          #Gone for 0.9
          def change(receiver, message)
            NotChange.new(@target, receiver, message)
          end
  
          #Gone for 0.9
          def raise(exception=Exception, message=nil)
            begin
              @target.call
            rescue exception => e
              return unless message.nil? || e.message == message || (message.is_a?(Regexp) && e.message =~ message)
              if e.kind_of?(exception)
                failure_message = "expected no "
                failure_message << exception.to_s
                unless message.nil?
                  failure_message << " with "
                  failure_message << "message matching " if message.is_a?(Regexp)
                  failure_message << message.inspect
                end
                failure_message << ", got " << e.inspect
                fail_with_message(failure_message)
              end
            rescue
              true
            end
          end
    
          #Gone for 0.9
          def throw(symbol=:___this_is_a_symbol_that_will_likely_never_occur___)
            begin
              catch symbol do
                @target.call
                return true
              end
              fail_with_message("expected #{symbol.inspect} not to be thrown, but it was")
            rescue NameError
              true
            end
          end

          def __delegate_method_missing_to_target original_sym, actual_sym, *args
            ::Spec::Matchers.generated_description = "should not #{original_sym} #{args[0].inspect}"
            return unless @target.__send__(actual_sym, *args)
            fail_with_message(default_message("not #{original_sym}", args[0]))
          end
        end
      end

    end
  end
end


syntax highlighted by Code2HTML, v. 0.9.1