convert(object)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def convert(object)
  if object.is_a?(Exception)
    object = AssertExceptionHelper::WrappedException.new(object)
  end
  inspector = Inspector.new(object)
  if use_pp
    begin
      require "pp" unless defined?(PP)
      begin
        return PP.pp(inspector, String.new).chomp
      rescue NameError
      end
    rescue LoadError
      self.use_pp = false
    end
  end
  inspector.inspect
end
             
             
            
           
          
          
         
      
        
          
          
          
            delayed_diff(from, to)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def delayed_diff(from, to)
  delayed_literal do
    from, to = prepare_for_diff(from, to)
    diff = "" if from.nil? or to.nil?
    diff ||= Diff.readable(from, to)
    if /^[-+]/ !~ diff
      diff = ""
    elsif /^[ ?]/ =~ diff or /(?:.*\n){2,}/ =~ diff
      diff = "\n\ndiff:\n#{diff}"
    else
      diff = ""
    end
    if Diff.need_fold?(diff)
      folded_diff = Diff.folded_readable(from, to)
      diff += "\n\nfolded diff:\n#{folded_diff}"
    end
    diff
  end
end
             
             
            
           
          
          
         
      
        
          
          
          
            delayed_literal(&block)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def delayed_literal(&block)
  DelayedLiteral.new(block)
end
             
             
            
           
          
          
         
      
        
          
          
          
            diff_target_string?(string)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def diff_target_string?(string)
  if string.respond_to?(:bytesize)
    string.bytesize < max_diff_target_string_size
  else
    string.size < max_diff_target_string_size
  end
end
             
             
            
           
          
          
         
      
        
          
          
          
            ensure_diffable_string(string)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def ensure_diffable_string(string)
  if string.respond_to?(:encoding) and
      !string.encoding.ascii_compatible?
    string = string.dup.force_encoding("ASCII-8BIT")
  end
  string
end
             
             
            
           
          
          
         
      
        
          
          
          
            literal(value)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def literal(value)
  Literal.new(value)
end
             
             
            
           
          
          
         
      
        
          
          
          
            max_diff_target_string_size()
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def max_diff_target_string_size
  return @@max_diff_target_string_size if @@max_diff_target_string_size
  size = ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"]
  if size
    begin
      size = Integer(size)
    rescue ArgumentError
      size = nil
    end
  end
  size || MAX_DIFF_TARGET_STRING_SIZE
end
             
             
            
           
          
          
         
      
        
          
          
          
            max_diff_target_string_size=(size)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def max_diff_target_string_size=(size)
  @@max_diff_target_string_size = size
end
             
             
            
           
          
          
         
      
        
          
          
          
            maybe_container(value, &formatter)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def maybe_container(value, &formatter)
  MaybeContainer.new(value, &formatter)
end
             
             
            
           
          
          
         
      
        
          
          
          
            new(user_message, template_string, parameters)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def initialize(user_message, template_string, parameters)
  @user_message = user_message
  @template_string = template_string
  @parameters = parameters
end
             
             
            
           
          
          
         
      
        
          
          
          
            prepare_for_diff(from, to)
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def prepare_for_diff(from, to)
  if !from.is_a?(String) or !to.is_a?(String)
    from = convert(from)
    to = convert(to)
  end
  if diff_target_string?(from) and diff_target_string?(to)
    from = ensure_diffable_string(from)
    to = ensure_diffable_string(to)
    [from, to]
  else
    [nil, nil]
  end
end