##################################################################
#                  Licensing Information                         #
#                                                                #
#  The following code is licensed, as standalone code, under     #
#  the Ruby License, unless otherwise directed within the code.  #
#                                                                #
#  For information on the license of this code when distributed  #
#  with and used in conjunction with the other modules in the    #
#  Amp project, please see the root-level LICENSE file.          #
#                                                                #
#  © Michael J. Edgar and Ari Brown, 2009-2010                   #
#                                                                #
##################################################################

require File.join(File.expand_path(File.dirname(__FILE__)), 'testutilities')
require File.expand_path(File.join(File.dirname(__FILE__), "../lib/amp"))

class TestMdiff < AmpTestCase
  include Amp::Diffs::Mercurial

  def test_default_whitespace_clean
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    result = MercurialDiff.whitespace_clean(" hello \n\r \t\t what's \t\n up\t there",
                                            opts)
    expected = " hello \n\r \t\t what's \t\n up\t there"
    assert_equal(expected, result)
  end
  def test_whitespace_clean_ignore_ws
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    opts[:ignore_ws] = true
    result = MercurialDiff.whitespace_clean(" hello \n\r \t\t what's \t\n up\t there",
                                            opts)
    expected = "hello\n\rwhat's\nupthere"
    assert_equal(expected, result)
  end
  def test_whitespace_clean_ignore_ws_amount
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    opts[:ignore_ws_amount] = true
    result = MercurialDiff.whitespace_clean(" hello \n\r \t\t what's \t\n up\t there",
                                            opts)
    expected = " hello\n\r what's\n up there"
    assert_equal(expected, result)
  end
  def test_whitespace_clean_ignore_blank_lines
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    opts[:ignore_blank_lines] = true
    result = MercurialDiff.whitespace_clean(" hello \n\r \t\t what's \t\n up\t there",
                                            opts)
    expected = " hello \r \t\t what's \t up\t there"
    assert_equal(expected, result)
  end
  def test_whitespace_clean_all_ignored
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    opts[:ignore_blank_lines] = opts[:ignore_ws_amount] = opts[:ignore_ws]=true
    result = MercurialDiff.whitespace_clean(" hello \n\r \t\t what's \t\n up\t there",
                                            opts)
    expected = "hello\rwhat'supthere"
    assert_equal(expected, result)
  end
  
  def test_diffline_default
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    result = MercurialDiff.diff_line([1,2], "hello there", "hello mom", opts)
    expected = "diff -r 1 -r 2 hello there\n"
    assert_equal(expected, result)
  end
  def test_diffline_git
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    opts[:git] = true
    result = MercurialDiff.diff_line([1,2], "hello there", "hello mom", opts)
    expected = "diff --git a/hello there b/hello mom\n"
    assert_equal(expected, result)
  end
  
  def test_unified_diff
    opts = MercurialDiff::DEFAULT_OPTIONS.dup
    original_day = Time.local(2009, 3, 30, 9, 45, 15, 123456)
    second_day = Time.local(2009, 4, 2, 3, 17, 53, 654321)
    start_text = "line 1 is long\nline two isn't\n\nwe just had a blank line\ncool or what?\nlol ok last line\n\n\njust kidding"
    end_text = "line 1 is short\nline two isn't\n\n\nwe just had a blank line\ncool or lame?\nlol ok last line\n\njust kidding\nfor serious now"
    expected = "--- a/hello_there.rb\t2009-03-30 09:45:15.123456\n+++ b/hello_there.rb\t2009-04-02 03:17:53.654321\n" +
               "@@ -1,9 +1,10 @@\n-line 1 is long\n+line 1 is short\n line two isn't\n \n+\n we just had a blank line\n" +
               "-cool or what?\n+cool or lame?\n lol ok last line\n \n-\n-just kidding\n\\ No newline at end of file\n+just "+
               "kidding\n+for serious now\n\\ No newline at end of file\n"
    result = MercurialDiff.unified_diff(start_text, original_day, end_text, second_day, "hello_there.rb", "hello_there.rb")
    
    assert_equal expected, result
  end
end
