File: test_diff.rb

package info (click to toggle)
ruby-git 1.13.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 4,124 kB
  • sloc: ruby: 5,385; sh: 507; perl: 64; makefile: 6
file content (124 lines) | stat: -rw-r--r-- 3,485 bytes parent folder | download
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