f766c4768227b94077c786a5403498bd25c2d18e
   1#!/bin/sh
   2#
   3# Copyright (c) 2012 Zbigniew Jędrzejewski-Szmek
   4#
   5
   6test_description='test --stat output of various commands'
   7
   8. ./test-lib.sh
   9. "$TEST_DIRECTORY"/lib-terminal.sh
  10
  11# 120 character name
  12name=aaaaaaaaaa
  13name=$name$name$name$name$name$name$name$name$name$name$name$name
  14test_expect_success 'preparation' '
  15        >"$name" &&
  16        git add "$name" &&
  17        git commit -m message &&
  18        echo a >"$name" &&
  19        git commit -m message "$name"
  20'
  21
  22while read cmd args
  23do
  24        cat >expect <<-'EOF'
  25         ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |    1 +
  26        EOF
  27        test_expect_success "$cmd: a short graph bar does not extend to the full width" '
  28                git $cmd $args >output &&
  29                grep " | " output >actual &&
  30                test_cmp expect actual
  31        '
  32
  33        cat >expect <<-'EOF'
  34         ...aaaaaaaaaaaaaaaaaaaaaa |    1 +
  35        EOF
  36        test_expect_success "$cmd --stat=width: name is chopped to leave room to the right of a short bar" '
  37                git $cmd $args --stat=40 >output &&
  38                grep " | " output >actual &&
  39                test_cmp expect actual
  40        '
  41
  42        test_expect_success "$cmd --stat-width=width with long name" '
  43                git $cmd $args --stat-width=40 >output &&
  44                grep " | " output >actual &&
  45                test_cmp expect actual
  46        '
  47
  48        cat >expect <<-'EOF'
  49         ...aaaaaaaaaaaaaaaaaaaaaaaaaaa |    1 +
  50        EOF
  51        test_expect_success "$cmd --stat=...,name-width with long name" '
  52                git $cmd $args --stat=60,30 >output &&
  53                grep " | " output >actual &&
  54                test_cmp expect actual
  55        '
  56
  57        test_expect_success "$cmd --stat-name-width with long name" '
  58                git $cmd $args --stat-name-width=30 >output &&
  59                grep " | " output >actual &&
  60                test_cmp expect actual
  61        '
  62done <<\EOF
  63format-patch -1 --stdout
  64diff HEAD^ HEAD --stat
  65show --stat
  66log -1 --stat
  67EOF
  68
  69
  70test_expect_success 'preparation for big change tests' '
  71        >abcd &&
  72        git add abcd &&
  73        git commit -m message &&
  74        i=0 &&
  75        while test $i -lt 1000
  76        do
  77                echo $i && i=$(($i + 1))
  78        done >abcd &&
  79        git commit -m message abcd
  80'
  81
  82cat >expect80 <<'EOF'
  83 abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  84EOF
  85
  86while read verb expect cmd args
  87do
  88        test_expect_success "$cmd $verb COLUMNS (big change)" '
  89                COLUMNS=200 git $cmd $args >output
  90                grep " | " output >actual &&
  91                test_cmp "$expect" actual
  92        '
  93done <<\EOF
  94ignores expect80 format-patch -1 --stdout
  95ignores expect80 diff HEAD^ HEAD --stat
  96ignores expect80 show --stat
  97ignores expect80 log -1 --stat
  98EOF
  99
 100cat >expect <<'EOF'
 101 abcd | 1000 ++++++++++++++++++++++++++
 102EOF
 103while read cmd args
 104do
 105        test_expect_success "$cmd --stat=width with big change" '
 106                git $cmd $args --stat=40 >output
 107                grep " | " output >actual &&
 108                test_cmp expect actual
 109        '
 110
 111        test_expect_success "$cmd --stat-width=width with big change" '
 112                git $cmd $args --stat-width=40 >output
 113                grep " | " output >actual &&
 114                test_cmp expect actual
 115        '
 116done <<\EOF
 117format-patch -1 --stdout
 118diff HEAD^ HEAD --stat
 119show --stat
 120log -1 --stat
 121EOF
 122
 123test_expect_success 'preparation for long filename tests' '
 124        cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
 125        git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
 126        git commit -m message
 127'
 128
 129cat >expect <<'EOF'
 130 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++
 131EOF
 132while read cmd args
 133do
 134        test_expect_success "$cmd --stat=width with big change and long name favors name part" '
 135                git $cmd $args --stat-width=60 >output &&
 136                grep " | " output >actual &&
 137                test_cmp expect actual
 138        '
 139done <<\EOF
 140format-patch -1 --stdout
 141diff HEAD^ HEAD --stat
 142show --stat
 143log -1 --stat
 144EOF
 145
 146cat >expect80 <<'EOF'
 147 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
 148EOF
 149while read verb expect cmd args
 150do
 151        test_expect_success "$cmd $verb COLUMNS (long filename)" '
 152                COLUMNS=200 git $cmd $args >output
 153                grep " | " output >actual &&
 154                test_cmp "$expect" actual
 155        '
 156done <<\EOF
 157ignores expect80 format-patch -1 --stdout
 158ignores expect80 diff HEAD^ HEAD --stat
 159ignores expect80 show --stat
 160ignores expect80 log -1 --stat
 161EOF
 162
 163cat >expect <<'EOF'
 164 abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 165EOF
 166test_expect_success 'merge --stat ignores COLUMNS (big change)' '
 167        git checkout -b branch HEAD^^ &&
 168        COLUMNS=100 git merge --stat --no-ff master^ >output &&
 169        grep " | " output >actual
 170        test_cmp expect actual
 171'
 172
 173cat >expect <<'EOF'
 174 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
 175EOF
 176test_expect_success 'merge --stat ignores COLUMNS (long filename)' '
 177        COLUMNS=100 git merge --stat --no-ff master >output &&
 178        grep " | " output >actual
 179        test_cmp expect actual
 180'
 181
 182test_done