1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../test_helper'
class TestDiff < Test::Unit::TestCase
def setup
set_file_paths
@git = Git.open(@wdir)
@diff = @git.diff('gitsearch1', 'v2.5')
end
#def test_diff
# g.diff
# assert(1, d.size)
#end
def test_diff_current_vs_head
#test git diff without specifying source/destination commits
update_file(File.join(@wdir,"example.txt"),"FRANCO")
d = @git.diff
patch = d.patch
assert(patch.match(/\+FRANCO/))
end
def test_diff_tags
d = @git.diff('gitsearch1', 'v2.5')
assert_equal(3, d.size)
assert_equal(74, d.lines)
assert_equal(10, d.deletions)
assert_equal(64, d.insertions)
end
# Patch files on diff outputs used to be parsed as
# part of the diff adding invalid modificaction
# to the diff results.
def test_diff_patch
d = @git.diff('diff_over_patches~2', 'diff_over_patches')
assert_equal(1, d.count)
end
def test_diff_path
d = @git.diff('gitsearch1', 'v2.5').path('scott/')
assert_equal(d.from, 'gitsearch1')
assert_equal(d.to, 'v2.5')
assert_equal(2, d.size)
assert_equal(9, d.lines)
assert_equal(9, d.deletions)
assert_equal(0, d.insertions)
end
def test_diff_objects
d = @git.diff('gitsearch1', @git.gtree('v2.5'))
assert_equal(3, d.size)
end
def test_object_diff
d = @git.gtree('v2.5').diff('gitsearch1')
assert_equal(3, d.size)
assert_equal(74, d.lines)
assert_equal(10, d.insertions)
assert_equal(64, d.deletions)
d = @git.gtree('v2.6').diff(@git.gtree('gitsearch1'))
assert_equal(2, d.size)
assert_equal(9, d.lines)
end
def test_diff_stats
s = @diff.stats
assert_equal(3, s[:total][:files])
assert_equal(74, s[:total][:lines])
assert_equal(10, s[:total][:deletions])
assert_equal(64, s[:total][:insertions])
# per file
assert_equal(1, s[:files]["scott/newfile"][:deletions])
end
def test_diff_hashkey_default
assert_equal('5d46068', @diff["scott/newfile"].src)
assert_nil(@diff["scott/newfile"].blob(:dst))
assert(@diff["scott/newfile"].blob(:src).is_a?(Git::Object::Blob))
end
def test_diff_hashkey_min
set_file_paths
git = Git.open(@wdir)
git.config('core.abbrev', 4)
diff = git.diff('gitsearch1', 'v2.5')
assert_equal('5d46', diff["scott/newfile"].src)
assert_nil(diff["scott/newfile"].blob(:dst))
assert(diff["scott/newfile"].blob(:src).is_a?(Git::Object::Blob))
end
def test_diff_hashkey_max
set_file_paths
git = Git.open(@wdir)
git.config('core.abbrev', 40)
diff = git.diff('gitsearch1', 'v2.5')
assert_equal('5d4606820736043f9eed2a6336661d6892c820a5', diff["scott/newfile"].src)
assert_nil(diff["scott/newfile"].blob(:dst))
assert(diff["scott/newfile"].blob(:src).is_a?(Git::Object::Blob))
end
def test_patch
p = @git.diff('v2.8^', 'v2.8').patch
diff = "diff --git a/example.txt b/example.txt\nindex 1f09f2e..8dc79ae 100644\n--- a/example.txt\n+++ b/example.txt\n@@ -1 +1 @@\n-replace with new text\n+replace with new text - diff test"
assert_equal(diff, p)
end
def test_diff_each
files = {}
@diff.each do |d|
files[d.path] = d
end
assert(files['example.txt'])
assert_equal('100644', files['scott/newfile'].mode)
assert_equal('deleted', files['scott/newfile'].type)
assert_equal(160, files['scott/newfile'].patch.size)
end
end
|