Subject: [PATCH] t0027: Improve test for not-normalized files

From: Torsten Bögershausen <[email-masked]>
Date: Fri, 9 Oct 2015 04:58:42 +0200

When a text file with mixed line endings is commited into the repo,
it is called "not normalized" (or NNO) in t0027.
The existing test case using repoMIX did not fully test all combinations:
(Especially when core.autocrlf = true)
Files with NL are not converted at commit, but at checkout, so a warning
NL->CRLF is given.
Files with CRLF are not converted at all (so no warning will be given),
unless they are marked as "text" or "auto".

Remove repoMIX introduced in commit 8eeab92f02, and replace it with
a combination of NNO tests.

Signed-off-by: Torsten Bögershausen <[email-masked]>
---
 t/t0027-auto-crlf.sh | 191 ++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 157 insertions(+), 34 deletions(-)

diff --git a/t/t0027-auto-crlf.sh b/t/t0027-auto-crlf.sh
index 1a56e5e..b343651 100755
--- a/t/t0027-auto-crlf.sh
+++ b/t/t0027-auto-crlf.sh
@@ -55,6 +55,26 @@ create_gitattributes () {
 	esac
 }
 +create_NNO_files () {
+	lfname=$1
+	crlfname=$2
+	lfmixcrlf=$3
+	lfmixcr=$4
+	crlfnul=$5
+	for crlf in false true input
+	do
+		for attr in "" auto text -text lf crlf
+		do
+			pfx=NNO_${crlf}_attr_${attr} &&
+			cp $lfname    ${pfx}_LF.txt &&
+			cp $crlfname  ${pfx}_CRLF.txt &&
+			cp $lfmixcrlf ${pfx}_CRLF_mix_LF.txt &&
+			cp $lfmixcr   ${pfx}_LF_mix_CR.txt &&
+			cp $crlfnul   ${pfx}_CRLF_nul.txt
+		done
+	done
+}
+
 check_warning () {
 	case "$1" in
 	LF_CRLF) echo "warning: LF will be replaced by CRLF" >"$2".expect ;;
@@ -62,7 +82,7 @@ check_warning () {
 	'')	                                                 >"$2".expect ;;
 	*) echo >&2 "Illegal 1": "$1" ; return false ;;
 	esac
-	grep "will be replaced by" "$2" | sed -e "s/\(.*\) in [^ ]*$/\1/" >"$2".actual
+	grep "will be replaced by" "$2" | sed -e "s/\(.*\) in [^ ]*$/\1/" | uniq
>"$2".actual
 	test_cmp "$2".expect "$2".actual
 }
 @@ -71,19 +91,10 @@ commit_check_warn () {
 	attr=$2
 	lfname=$3
 	crlfname=$4
-	repoMIX=$5
-	lfmixcrlf=$6
-	lfmixcr=$7
-	crlfnul=$8
+	lfmixcrlf=$5
+	lfmixcr=$6
+	crlfnul=$7
 	pfx=crlf_${crlf}_attr_${attr}
-	# Special handling for repoMIX: It should already be in the repo
-	# with CRLF
-	f=repoMIX
-	fname=${pfx}_$f.txt
-	echo >.gitattributes &&
-	cp $f $fname &&
-	git -c core.autocrlf=false add $fname 2>"${pfx}_$f.err" &&
-	git commit -m "repoMIX" &&
 	create_gitattributes "$attr" &&
 	for f in LF CRLF repoMIX LF_mix_CR CRLF_mix_LF LF_nul CRLF_nul
 	do
@@ -99,6 +110,45 @@ commit_check_warn () {
 	check_warning "$crlfnul" ${pfx}_CRLF_nul.err
 }
 +commit_chk_wrnNNO () {
+	crlf=$1
+	attr=$2
+	lfwarn=$3
+	crlfwarn=$4
+	lfmixcrlf=$5
+	lfmixcr=$6
+	crlfnul=$7
+	pfx=NNO_${crlf}_attr_${attr}
+	#Commit files on top of existing file
+	create_gitattributes "$attr" &&
+	for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
+	do
+		fname=${pfx}_$f.txt &&
+		cp $f $fname &&
+		git -c core.autocrlf=$crlf add $fname 2>/dev/null &&
+		git -c core.autocrlf=$crlf commit -m "commit_$fname" $fname >"${pfx}_$f.err" 2>&1
+	done
+
+	test_expect_success "commit NNO files crlf=$crlf attr=$attr LF" '
+		check_warning "$lfwarn" ${pfx}_LF.err
+	'
+	test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF" '
+		check_warning "$crlfwarn" ${pfx}_CRLF.err
+	'
+
+	test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF_mix_LF" '
+		check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
+	'
+
+	test_expect_success "commit NNO files crlf=$crlf attr=$attr LF_mix_cr" '
+		check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
+	'
+
+	test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF_nul" '
+		check_warning "$crlfnul" ${pfx}_CRLF_nul.err
+	'
+}
+
 check_files_in_repo () {
 	crlf=$1
 	attr=$2
@@ -115,6 +165,31 @@ check_files_in_repo () {
 	compare_files $crlfnul ${pfx}CRLF_nul.txt
 }
 +check_in_repo_NNO () {
+	crlf=$1
+	attr=$2
+	lfname=$3
+	crlfname=$4
+	lfmixcrlf=$5
+	lfmixcr=$6
+	crlfnul=$7
+	pfx=NNO_${crlf}_attr_${attr}_
+	test_expect_success "compare_files $lfname ${pfx}LF.txt" '
+		compare_files $lfname ${pfx}LF.txt
+	'
+	test_expect_success "compare_files $crlfname ${pfx}CRLF.txt" '
+		compare_files $crlfname ${pfx}CRLF.txt
+	'
+	test_expect_success "compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt" '
+		compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt
+	'
+	test_expect_success "compare_files $lfmixcr ${pfx}LF_mix_CR.txt" '
+		compare_files $lfmixcr ${pfx}LF_mix_CR.txt
+	'
+	test_expect_success "compare_files $crlfnul ${pfx}CRLF_nul.txt" '
+		compare_files $crlfnul ${pfx}CRLF_nul.txt
+	'
+}
  checkout_files () {
 	eol=$1
@@ -169,7 +244,11 @@ test_expect_success 'setup master' '
 	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
+	printf "line1Q\nline2\nline3" | q_to_nul >LF_nul &&
+	create_NNO_files CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF &&
+	git -c core.autocrlf=false add NNO_*.txt &&
+	git commit -m "mixed line endings" &&
+	test_tick
 '
  @@ -191,46 +270,72 @@ else
 	WAMIX=CRLF_LF
 fi
 -#                         attr   LF        CRLF      repoMIX   CRLFmixLF
LFmixCR   CRLFNUL
+#                         attr   LF        CRLF      CRLFmixLF LFmixCR   CRLFNUL
 test_expect_success 'commit files empty attr' '
-	commit_check_warn false ""     ""        ""        ""        ""        ""
   "" &&
-	commit_check_warn true  ""     "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""
   "" &&
-	commit_check_warn input ""     ""        "CRLF_LF" "CRLF_LF" "CRLF_LF" ""
   ""
+	commit_check_warn false ""     ""        ""        ""        ""        "" &&
+	commit_check_warn true  ""     "LF_CRLF" ""        "LF_CRLF" ""        "" &&
+	commit_check_warn input ""     ""        "CRLF_LF" "CRLF_LF" ""        ""
 '
  test_expect_success 'commit files attr=auto' '
-	commit_check_warn false "auto" "$WILC"   "$WICL"   "$WAMIX"  "$WAMIX"  ""
   "" &&
-	commit_check_warn true  "auto" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""
   "" &&
-	commit_check_warn input "auto" ""        "CRLF_LF" "CRLF_LF" "CRLF_LF" ""
   ""
+	commit_check_warn false "auto" "$WILC"   "$WICL"   "$WAMIX"  ""        "" &&
+	commit_check_warn true  "auto" "LF_CRLF" ""        "LF_CRLF" ""        "" &&
+	commit_check_warn input "auto" ""        "CRLF_LF" "CRLF_LF" ""        ""
 '
  test_expect_success 'commit files attr=text' '
-	commit_check_warn false "text" "$WILC"   "$WICL"   "$WAMIX"  "$WAMIX"  "$WILC"
  "$WICL"   &&
-	commit_check_warn true  "text" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF"
"LF_CRLF" ""        &&
-	commit_check_warn input "text" ""        "CRLF_LF" "CRLF_LF" "CRLF_LF" ""
   "CRLF_LF"
+	commit_check_warn false "text" "$WILC"   "$WICL"   "$WAMIX"  "$WILC"   "$WICL"
  &&
+	commit_check_warn true  "text" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""
   &&
+	commit_check_warn input "text" ""        "CRLF_LF" "CRLF_LF" ""        "CRLF_LF"
 '
  test_expect_success 'commit files attr=-text' '
-	commit_check_warn false "-text" ""       ""        ""        ""        ""
   "" &&
-	commit_check_warn true  "-text" ""       ""        ""        ""        ""
   "" &&
-	commit_check_warn input "-text" ""       ""        ""        ""        ""
   ""
+	commit_check_warn false "-text" ""       ""        ""        ""        "" &&
+	commit_check_warn true  "-text" ""       ""        ""        ""        "" &&
+	commit_check_warn input "-text" ""       ""        ""        ""        ""
 '
  test_expect_success 'commit files attr=lf' '
-	commit_check_warn false "lf"    ""       "CRLF_LF" "CRLF_LF" "CRLF_LF"  ""
   "CRLF_LF" &&
-	commit_check_warn true  "lf"    ""       "CRLF_LF" "CRLF_LF" "CRLF_LF"  ""
   "CRLF_LF" &&
-	commit_check_warn input "lf"    ""       "CRLF_LF" "CRLF_LF" "CRLF_LF"  ""
   "CRLF_LF"
+	commit_check_warn false "lf"    ""       "CRLF_LF" "CRLF_LF"  ""
"CRLF_LF" &&
+	commit_check_warn true  "lf"    ""       "CRLF_LF" "CRLF_LF"  ""
"CRLF_LF" &&
+	commit_check_warn input "lf"    ""       "CRLF_LF" "CRLF_LF"  ""       "CRLF_LF"
 '
  test_expect_success 'commit files attr=crlf' '
-	commit_check_warn false "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF"
"LF_CRLF" "" &&
-	commit_check_warn true  "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF"
"LF_CRLF" "" &&
-	commit_check_warn input "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF"
"LF_CRLF" ""
+	commit_check_warn false "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&
+	commit_check_warn true  "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" "" &&
+	commit_check_warn input "crlf" "LF_CRLF" ""        "LF_CRLF" "LF_CRLF" ""
 '
 +#                       attr   LF        CRLF      CRLFmixLF 	 LF_mix_CR   CRLFNUL
+commit_chk_wrnNNO false ""     ""        ""        ""        	 ""        	 ""
+commit_chk_wrnNNO true  ""     "LF_CRLF" ""        ""        	 ""        	 ""
+commit_chk_wrnNNO input ""     ""        ""        ""        	 ""        	 ""
+
+
+commit_chk_wrnNNO false "auto" "$WILC"   "$WICL"   "$WAMIX"  	 ""        	 ""
+commit_chk_wrnNNO true  "auto" "LF_CRLF" ""        "LF_CRLF" 	 ""        	 ""
+commit_chk_wrnNNO input "auto" ""        "CRLF_LF" "CRLF_LF" 	 ""        	 ""
+
+commit_chk_wrnNNO false "text" "$WILC"   "$WICL"   "$WAMIX"  	 "$WILC"   	 "$WICL"
+commit_chk_wrnNNO true  "text" "LF_CRLF" ""        "LF_CRLF" 	 "LF_CRLF" 	 ""
+commit_chk_wrnNNO input "text" ""        "CRLF_LF" "CRLF_LF" 	 ""        	
"CRLF_LF"
+
+commit_chk_wrnNNO false "-text" ""       ""        ""        	 ""        	 ""
+commit_chk_wrnNNO true  "-text" ""       ""        ""        	 ""        	 ""
+commit_chk_wrnNNO input "-text" ""       ""        ""        	 ""        	 ""
+
+commit_chk_wrnNNO false "lf"    ""       "CRLF_LF" "CRLF_LF" 	  ""       	
"CRLF_LF"
+commit_chk_wrnNNO true  "lf"    ""       "CRLF_LF" "CRLF_LF" 	  ""       	
"CRLF_LF"
+commit_chk_wrnNNO input "lf"    ""       "CRLF_LF" "CRLF_LF" 	  ""       	
"CRLF_LF"
+
+commit_chk_wrnNNO false "crlf" "LF_CRLF" ""        "LF_CRLF" 	 "LF_CRLF" 	 ""
+commit_chk_wrnNNO true  "crlf" "LF_CRLF" ""        "LF_CRLF" 	 "LF_CRLF" 	 ""
+commit_chk_wrnNNO input "crlf" "LF_CRLF" ""        "LF_CRLF" 	 "LF_CRLF" 	 ""
+
 test_expect_success 'create files cleanup' '
 	rm -f *.txt &&
-	git reset --hard
+	git -c core.autocrlf=false reset --hard
 '
  test_expect_success 'commit empty gitattribues' '
@@ -257,6 +362,24 @@ test_expect_success 'commit -text' '
 	check_files_in_repo input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
 '
 +#                       attr    LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLFNUL
+check_in_repo_NNO false ""      LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+check_in_repo_NNO true  ""      LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+check_in_repo_NNO input ""      LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+
+check_in_repo_NNO false "auto"  LF        LF        LF           LF_mix_CR
CRLF_nul
+check_in_repo_NNO true  "auto"  LF        LF        LF           LF_mix_CR
CRLF_nul
+check_in_repo_NNO input "auto"  LF        LF        LF           LF_mix_CR
CRLF_nul
+
+check_in_repo_NNO false "text"  LF        LF        LF           LF_mix_CR 	LF_nul
+check_in_repo_NNO true  "text"  LF        LF        LF           LF_mix_CR 	LF_nul
+check_in_repo_NNO input "text"  LF        LF        LF           LF_mix_CR 	LF_nul
+
+check_in_repo_NNO false "-text" LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+check_in_repo_NNO true  "-text" LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+check_in_repo_NNO input "-text" LF        CRLF      CRLF_mix_LF  LF_mix_CR
CRLF_nul
+
+
 ################################################################################
 # Check how files in the repo are changed when they are checked out
 # How to read the table below:
-- 
2.5.0