Merge branch 'maint-1.6.0' into maint
[git] / t / t3900-i18n-commit.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006 Junio C Hamano
4 #
5
6 test_description='commit and log output encodings'
7
8 . ./test-lib.sh
9
10 compare_with () {
11         git show -s $1 | sed -e '1,/^$/d' -e 's/^    //' >current &&
12         test_cmp current "$2"
13 }
14
15 test_expect_success setup '
16         : >F &&
17         git add F &&
18         T=$(git write-tree) &&
19         C=$(git commit-tree $T <"$TEST_DIRECTORY"/t3900/1-UTF-8.txt) &&
20         git update-ref HEAD $C &&
21         git tag C0
22 '
23
24 test_expect_success 'no encoding header for base case' '
25         E=$(git cat-file commit C0 | sed -ne "s/^encoding //p") &&
26         test z = "z$E"
27 '
28
29 for H in ISO-8859-1 EUCJP ISO-2022-JP
30 do
31         test_expect_success "$H setup" '
32                 git config i18n.commitencoding $H &&
33                 git checkout -b $H C0 &&
34                 echo $H >F &&
35                 git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt
36         '
37 done
38
39 for H in ISO-8859-1 EUCJP ISO-2022-JP
40 do
41         test_expect_success "check encoding header for $H" '
42                 E=$(git cat-file commit '$H' | sed -ne "s/^encoding //p") &&
43                 test "z$E" = "z'$H'"
44         '
45 done
46
47 test_expect_success 'config to remove customization' '
48         git config --unset-all i18n.commitencoding &&
49         if Z=$(git config --get-all i18n.commitencoding)
50         then
51                 echo Oops, should have failed.
52                 false
53         else
54                 test z = "z$Z"
55         fi &&
56         git config i18n.commitencoding utf-8
57 '
58
59 test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '
60         compare_with ISO-8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
61 '
62
63 for H in EUCJP ISO-2022-JP
64 do
65         test_expect_success "$H should be shown in UTF-8 now" '
66                 compare_with '$H' "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
67         '
68 done
69
70 test_expect_success 'config to add customization' '
71         git config --unset-all i18n.commitencoding &&
72         if Z=$(git config --get-all i18n.commitencoding)
73         then
74                 echo Oops, should have failed.
75                 false
76         else
77                 test z = "z$Z"
78         fi
79 '
80
81 for H in ISO-8859-1 EUCJP ISO-2022-JP
82 do
83         test_expect_success "$H should be shown in itself now" '
84                 git config i18n.commitencoding '$H' &&
85                 compare_with '$H' "$TEST_DIRECTORY"/t3900/'$H'.txt
86         '
87 done
88
89 test_expect_success 'config to tweak customization' '
90         git config i18n.logoutputencoding utf-8
91 '
92
93 test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '
94         compare_with ISO-8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
95 '
96
97 for H in EUCJP ISO-2022-JP
98 do
99         test_expect_success "$H should be shown in UTF-8 now" '
100                 compare_with '$H' "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
101         '
102 done
103
104 for J in EUCJP ISO-2022-JP
105 do
106         git config i18n.logoutputencoding $J
107         for H in EUCJP ISO-2022-JP
108         do
109                 test_expect_success "$H should be shown in $J now" '
110                         compare_with '$H' "$TEST_DIRECTORY"/t3900/'$J'.txt
111                 '
112         done
113 done
114
115 for H in ISO-8859-1 EUCJP ISO-2022-JP
116 do
117         test_expect_success "No conversion with $H" '
118                 compare_with "--encoding=none '$H'" "$TEST_DIRECTORY"/t3900/'$H'.txt
119         '
120 done
121
122 test_done