Skip to content

Commit

Permalink
t0027: Tests for core.eol=native, eol=lf, eol=crlf
Browse files Browse the repository at this point in the history
Add test cases for core.eol "native" and "" (unset).
(MINGW uses CRLF, all other systems LF as native line endings)

Add test cases for the attributes "eol=lf" and "eol=crlf"

Other minor changes:
- Use the more portable 'tr' instead of 'od -c' to convert '\n' into 'Q'
  and '\0' into 'N'
- Style fixes for shell functions according to the coding guide lines
- Replace "txtbin" with "attr"

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
tboegi authored and t-b committed Oct 6, 2014
1 parent 2aebb6c commit 4f355f1
Showing 1 changed file with 120 additions and 100 deletions.
220 changes: 120 additions & 100 deletions t/t0027-auto-crlf.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,26 @@ then
test_done
fi


compare_files()
{
od -c <"$1" >"$1".expect &&
od -c <"$2" >"$2".actual &&
compare_files () {
tr '\015\000' QN <"$1" >"$1".expect &&
tr '\015\000' QN <"$2" >"$2".actual &&
test_cmp "$1".expect "$2".actual &&
rm "$1".expect "$2".actual
}

compare_ws_file()
{
compare_ws_file () {
pfx=$1
exp=$2.expect
act=$pfx.actual.$3
od -c <"$2" >"$exp" &&
od -c <"$3" >"$act" &&
tr '\015\000' QN <"$2" >"$exp" &&
tr '\015\000' QN <"$3" >"$act" &&
test_cmp $exp $act &&
rm $exp $act
}

create_gitattributes()
{
txtbin=$1
case "$txtbin" in
create_gitattributes () {
attr=$1
case "$attr" in
auto)
echo "*.txt text=auto" >.gitattributes
;;
Expand All @@ -43,35 +39,43 @@ create_gitattributes()
-text)
echo "*.txt -text" >.gitattributes
;;
*)
crlf)
echo "*.txt eol=crlf" >.gitattributes
;;
lf)
echo "*.txt eol=lf" >.gitattributes
;;
"")
echo >.gitattributes
;;
*)
echo >&2 invalid attribute: $attr
exit 1
;;
esac
}

create_file_in_repo()
{
create_file_in_repo () {
crlf=$1
txtbin=$2
create_gitattributes "$txtbin" &&
attr=$2
create_gitattributes "$attr" &&
for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
do
pfx=crlf_${crlf}_attr_${txtbin}_$f.txt &&
pfx=crlf_${crlf}_attr_${attr}_$f.txt &&
cp $f $pfx && git -c core.autocrlf=$crlf add $pfx
done &&
git commit -m "core.autocrlf $crlf"
}

check_files_in_repo()
{
check_files_in_repo () {
crlf=$1
txtbin=$2
attr=$2
lfname=$3
crlfname=$4
lfmixcrlf=$5
lfmixcr=$6
crlfnul=$7
pfx=crlf_${crlf}_attr_${txtbin}_ &&
pfx=crlf_${crlf}_attr_${attr}_ &&
compare_files $lfname ${pfx}LF.txt &&
compare_files $crlfname ${pfx}CRLF.txt &&
compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt &&
Expand All @@ -80,19 +84,18 @@ check_files_in_repo()
}


check_files_in_ws()
{
check_files_in_ws () {
eol=$1
crlf=$2
txtbin=$3
attr=$3
lfname=$4
crlfname=$5
lfmixcrlf=$6
lfmixcr=$7
crlfnul=$8
create_gitattributes $txtbin &&
create_gitattributes $attr &&
git config core.autocrlf $crlf &&
pfx=eol_${eol}_crlf_${crlf}_attr_${txtbin}_ &&
pfx=eol_${eol}_crlf_${crlf}_attr_${attr}_ &&
src=crlf_false_attr__ &&
for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
do
Expand All @@ -104,42 +107,24 @@ check_files_in_ws()
fi
done


test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=LF" "
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF" "
compare_ws_file $pfx $lfname ${src}LF.txt
"
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF" "
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF" "
compare_ws_file $pfx $crlfname ${src}CRLF.txt
"
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF_mix_LF" "
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_mix_LF" "
compare_ws_file $pfx $lfmixcrlf ${src}CRLF_mix_LF.txt
"
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=LF_mix_CR" "
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
compare_ws_file $pfx $lfmixcr ${src}LF_mix_CR.txt
"
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF_nul" "
test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_nul" "
compare_ws_file $pfx $crlfnul ${src}CRLF_nul.txt
"
}

#######
(
type od >/dev/null &&
printf "line1Q\r\nline2\r\nline3" | q_to_nul >CRLF_nul &&
cat >expect <<-EOF &&
0000000 l i n e 1 \0 \r \n l i n e 2 \r \n l
0000020 i n e 3
0000024
EOF
od -c CRLF_nul | sed -e "s/[ ][ ]*/ /g" -e "s/ *$//" >actual
test_cmp expect actual &&
rm expect actual
) || {
skip_all="od not found or od -c not usable"
exit 0
test_done
}

test_expect_success 'setup master' '
echo >.gitattributes &&
git checkout -b master &&
Expand All @@ -150,9 +135,10 @@ test_expect_success 'setup master' '
printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
printf "line1\nline2\rline3" >LF_mix_CR &&
printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
printf "line1Q\r\nline2\r\nline3" | q_to_nul >CRLF_nul &&
printf "line1Q\nline2\nline3" | q_to_nul >LF_nul
'
# CRLF_nul had been created above


test_expect_success 'create files' '
create_file_in_repo false "" &&
Expand Down Expand Up @@ -201,7 +187,8 @@ test_expect_success 'commit -text' '
################################################################################
# Check how files in the repo are changed when they are checked out
# How to read the table below:
# - check_files_in_ws will check multiple files, see below
# - check_files_in_ws will check multiple files with a combination of settings
# and attributes (core.autocrlf=input is forbidden with core.eol=crlf)
# - parameter $1 : core.eol lf | crlf
# - parameter $2 : core.autocrlf false | true | input
# - parameter $3 : text in .gitattributs "" (empty) | auto | text | -text
Expand All @@ -211,55 +198,88 @@ test_expect_success 'commit -text' '
# - parameter $7 : reference for a file with LF and CR in the repo (does somebody uses this ?)
# - parameter $8 : reference for a file with CRLF and a NUL (should be handled as binary when auto)

check_files_in_ws lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

check_files_in_ws lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

check_files_in_ws lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

check_files_in_ws lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

###########
#core.autocrlf=input is forbidden with core.eol=crlf
check_files_in_ws crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

check_files_in_ws crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul

check_files_in_ws crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

# What we have in the repo:
# ----------------- EOL in repo ----------------
# LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
# settings with checkout:
# core. core. .gitattr
# eol acrlf
# ----------------------------------------------
# What we want to have in the working tree:
if test_have_prereq MINGW
then
check_files_in_ws "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws "" false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul

check_files_in_ws native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws native false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
MIX_CRLF_LF=CRLF
MIX_LF_CR=CRLF_mix_CR
NL=CRLF
else
MIX_CRLF_LF=CRLF_mix_LF
MIX_LF_CR=LF_mix_CR
NL=LF
fi
export CRLF_MIX_LF_CR MIX NL

check_files_in_ws lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
check_files_in_ws "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

check_files_in_ws native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
check_files_in_ws native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
check_files_in_ws native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
check_files_in_ws native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
check_files_in_ws native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul

test_done

0 comments on commit 4f355f1

Please sign in to comment.