954c16f0acf8e190cc968911cef59ebf586c607f
   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
  86cat >expect200 <<'EOF'
  87 abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  88EOF
  89
  90while read verb expect cmd args
  91do
  92        test_expect_success "$cmd $verb COLUMNS (big change)" '
  93                COLUMNS=200 git $cmd $args >output
  94                grep " | " output >actual &&
  95                test_cmp "$expect" actual
  96        '
  97done <<\EOF
  98ignores expect80 format-patch -1 --stdout
  99respects expect200 diff HEAD^ HEAD --stat
 100respects expect200 show --stat
 101respects expect200 log -1 --stat
 102EOF
 103
 104cat >expect <<'EOF'
 105 abcd | 1000 ++++++++++++++++++++++++++
 106EOF
 107while read cmd args
 108do
 109        test_expect_success "$cmd --stat=width with big change" '
 110                git $cmd $args --stat=40 >output
 111                grep " | " output >actual &&
 112                test_cmp expect actual
 113        '
 114
 115        test_expect_success "$cmd --stat-width=width with big change" '
 116                git $cmd $args --stat-width=40 >output
 117                grep " | " output >actual &&
 118                test_cmp expect actual
 119        '
 120done <<\EOF
 121format-patch -1 --stdout
 122diff HEAD^ HEAD --stat
 123show --stat
 124log -1 --stat
 125EOF
 126
 127test_expect_success 'preparation for long filename tests' '
 128        cp abcd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
 129        git add aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
 130        git commit -m message
 131'
 132
 133cat >expect <<'EOF'
 134 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++
 135EOF
 136while read cmd args
 137do
 138        test_expect_success "$cmd --stat=width with big change and long name favors name part" '
 139                git $cmd $args --stat-width=60 >output &&
 140                grep " | " output >actual &&
 141                test_cmp expect actual
 142        '
 143done <<\EOF
 144format-patch -1 --stdout
 145diff HEAD^ HEAD --stat
 146show --stat
 147log -1 --stat
 148EOF
 149
 150cat >expect80 <<'EOF'
 151 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++
 152EOF
 153cat >expect200 <<'EOF'
 154 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 155EOF
 156while read verb expect cmd args
 157do
 158        test_expect_success "$cmd $verb COLUMNS (long filename)" '
 159                COLUMNS=200 git $cmd $args >output
 160                grep " | " output >actual &&
 161                test_cmp "$expect" actual
 162        '
 163done <<\EOF
 164ignores expect80 format-patch -1 --stdout
 165respects expect200 diff HEAD^ HEAD --stat
 166respects expect200 show --stat
 167respects expect200 log -1 --stat
 168EOF
 169
 170cat >expect <<'EOF'
 171 abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 172EOF
 173test_expect_success 'merge --stat respects COLUMNS (big change)' '
 174        git checkout -b branch HEAD^^ &&
 175        COLUMNS=100 git merge --stat --no-ff master^ >output &&
 176        grep " | " output >actual
 177        test_cmp expect actual
 178'
 179
 180cat >expect <<'EOF'
 181 ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++++++++++++++++++++++
 182EOF
 183test_expect_success 'merge --stat respects COLUMNS (long filename)' '
 184        COLUMNS=100 git merge --stat --no-ff master >output &&
 185        grep " | " output >actual
 186        test_cmp expect actual
 187'
 188
 189test_done