1#!/bin/sh
2#
3# Copyright (c) 2012 Torsten Bögershausen
4#
5
6test_description='utf-8 decomposed (nfd) converted to precomposed (nfc)'
7
8. ./test-lib.sh
9
10Adiarnfc=`printf '\303\204'`
11Adiarnfd=`printf 'A\314\210'`
12
13# check if the feature is compiled in
14mkdir junk &&
15>junk/"$Adiarnfc" &&
16case "$(cd junk && echo *)" in
17 "$Adiarnfd")
18 test_nfd=1
19 ;;
20 *) ;;
21esac
22rm -rf junk
23
24
25if test "$test_nfd"
26then
27 # create more utf-8 variables
28 Odiarnfc=`printf '\303\226'`
29 Odiarnfd=`printf 'O\314\210'`
30 AEligatu=`printf '\303\206'`
31 Invalidu=`printf '\303\377'`
32
33
34 #Create a string with 255 bytes (decomposed)
35 Alongd=$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd$Adiarnfd #21 Byte
36 Alongd=$Alongd$Alongd$Alongd #63 Byte
37 Alongd=$Alongd$Alongd$Alongd$Alongd$Adiarnfd #255 Byte
38
39 #Create a string with 254 bytes (precomposed)
40 Alongc=$AEligatu$AEligatu$AEligatu$AEligatu$AEligatu #10 Byte
41 Alongc=$Alongc$Alongc$Alongc$Alongc$Alongc #50 Byte
42 Alongc=$Alongc$Alongc$Alongc$Alongc$Alongc #250 Byte
43 Alongc=$Alongc$AEligatu$AEligatu #254 Byte
44
45 test_expect_success "detect if nfd needed" '
46 precomposeunicode=`git config core.precomposeunicode` &&
47 test "$precomposeunicode" = false &&
48 git config core.precomposeunicode true
49 '
50 test_expect_success "setup" '
51 >x &&
52 git add x &&
53 git commit -m "1st commit" &&
54 git rm x &&
55 git commit -m "rm x"
56 '
57 test_expect_success "setup case mac" '
58 git checkout -b mac_os
59 '
60 # This will test nfd2nfc in readdir()
61 test_expect_success "add file Adiarnfc" '
62 echo f.Adiarnfc >f.$Adiarnfc &&
63 git add f.$Adiarnfc &&
64 git commit -m "add f.$Adiarnfc"
65 '
66 # This will test nfd2nfc in git stage()
67 test_expect_success "stage file d.Adiarnfd/f.Adiarnfd" '
68 mkdir d.$Adiarnfd &&
69 echo d.$Adiarnfd/f.$Adiarnfd >d.$Adiarnfd/f.$Adiarnfd &&
70 git stage d.$Adiarnfd/f.$Adiarnfd &&
71 git commit -m "add d.$Adiarnfd/f.$Adiarnfd"
72 '
73 test_expect_success "add link Adiarnfc" '
74 ln -s d.$Adiarnfd/f.$Adiarnfd l.$Adiarnfc &&
75 git add l.$Adiarnfc &&
76 git commit -m "add l.Adiarnfc"
77 '
78 # This will test git log
79 test_expect_success "git log f.Adiar" '
80 git log f.$Adiarnfc > f.Adiarnfc.log &&
81 git log f.$Adiarnfd > f.Adiarnfd.log &&
82 test -s f.Adiarnfc.log &&
83 test -s f.Adiarnfd.log &&
84 test_cmp f.Adiarnfc.log f.Adiarnfd.log &&
85 rm f.Adiarnfc.log f.Adiarnfd.log
86 '
87 # This will test git ls-files
88 test_expect_success "git lsfiles f.Adiar" '
89 git ls-files f.$Adiarnfc > f.Adiarnfc.log &&
90 git ls-files f.$Adiarnfd > f.Adiarnfd.log &&
91 test -s f.Adiarnfc.log &&
92 test -s f.Adiarnfd.log &&
93 test_cmp f.Adiarnfc.log f.Adiarnfd.log &&
94 rm f.Adiarnfc.log f.Adiarnfd.log
95 '
96 # This will test git mv
97 test_expect_success "git mv" '
98 git mv f.$Adiarnfd f.$Odiarnfc &&
99 git mv d.$Adiarnfd d.$Odiarnfc &&
100 git mv l.$Adiarnfd l.$Odiarnfc &&
101 git commit -m "mv Adiarnfd Odiarnfc"
102 '
103 # Files can be checked out as nfc
104 # And the link has been corrected from nfd to nfc
105 test_expect_success "git checkout nfc" '
106 rm f.$Odiarnfc &&
107 git checkout f.$Odiarnfc
108 '
109 # Make it possible to checkout files with their NFD names
110 test_expect_success "git checkout file nfd" '
111 rm -f f.* &&
112 git checkout f.$Odiarnfd
113 '
114 # Make it possible to checkout links with their NFD names
115 test_expect_success "git checkout link nfd" '
116 rm l.* &&
117 git checkout l.$Odiarnfd
118 '
119 test_expect_success "setup case mac2" '
120 git checkout master &&
121 git reset --hard &&
122 git checkout -b mac_os_2
123 '
124 # This will test nfd2nfc in git commit
125 test_expect_success "commit file d2.Adiarnfd/f.Adiarnfd" '
126 mkdir d2.$Adiarnfd &&
127 echo d2.$Adiarnfd/f.$Adiarnfd >d2.$Adiarnfd/f.$Adiarnfd &&
128 git add d2.$Adiarnfd/f.$Adiarnfd &&
129 git commit -m "add d2.$Adiarnfd/f.$Adiarnfd" -- d2.$Adiarnfd/f.$Adiarnfd
130 '
131 test_expect_success "setup for long decomposed filename" '
132 git checkout master &&
133 git reset --hard &&
134 git checkout -b mac_os_long_nfd_fn
135 '
136 test_expect_success "Add long decomposed filename" '
137 echo longd >$Alongd &&
138 git add * &&
139 git commit -m "Long filename"
140 '
141 test_expect_success "setup for long precomposed filename" '
142 git checkout master &&
143 git reset --hard &&
144 git checkout -b mac_os_long_nfc_fn
145 '
146 test_expect_success "Add long precomposed filename" '
147 echo longc >$Alongc &&
148 git add * &&
149 git commit -m "Long filename"
150 '
151 # Test if the global core.precomposeunicode stops autosensing
152 # Must be the last test case
153 test_expect_success "respect git config --global core.precomposeunicode" '
154 git config --global core.precomposeunicode true &&
155 rm -rf .git &&
156 git init &&
157 precomposeunicode=`git config core.precomposeunicode` &&
158 test "$precomposeunicode" = "true"
159 '
160else
161 say "Skipping nfc/nfd tests"
162fi
163
164test_done