Mercurial > public > mercurial-scm > hg
diff tests/test-eol.t @ 12419:f6a91fcd189a
tests: unify test-eol
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 26 Sep 2010 13:41:32 -0500 |
parents | tests/test-eol@0bb67503ad4b |
children | 7439ea4146f8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-eol.t Sun Sep 26 13:41:32 2010 -0500 @@ -0,0 +1,385 @@ +Test EOL extension + + $ cat > $HGRCPATH <<EOF + > [diff] + > git = True + > EOF + +Set up helpers + + $ cat > switch-eol.py <<EOF + > import sys + > try: + > import os, msvcrt + > msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) + > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + > except ImportError: + > pass + > (old, new) = sys.argv[1] == 'LF' and ('\n', '\r\n') or ('\r\n', '\n') + > print "%% switching encoding from %r to %r" % (old, new) + > for path in sys.argv[2:]: + > data = file(path, 'rb').read() + > data = data.replace(old, new) + > file(path, 'wb').write(data) + > EOF + + $ seteol () { + > if [ $1 = "LF" ]; then + > EOL='\n' + > else + > EOL='\r\n' + > fi + > } + + $ makerepo () { + > seteol $1 + > echo "% setup $1 repository" + > hg init repo + > cd repo + > cat > .hgeol <<EOF + > [repository] + > native = $1 + > [patterns] + > mixed.txt = BIN + > **.txt = native + > EOF + > printf "first${EOL}second${EOL}third${EOL}" > a.txt + > hg commit --addremove -m 'checkin' + > echo + > cd .. + > } + + $ dotest () { + > seteol $1 + > echo "% hg clone repo repo-$1" + > hg clone --noupdate repo repo-$1 + > cd repo-$1 + > cat > .hg/hgrc <<EOF + > [extensions] + > eol = + > [eol] + > native = $1 + > EOF + > hg update + > echo '% printrepr.py a.txt' + > python $TESTDIR/printrepr.py < a.txt + > echo '% hg cat a.txt' + > hg cat a.txt | python $TESTDIR/printrepr.py + > printf "fourth${EOL}" >> a.txt + > echo '% printrepr.py a.txt' + > python $TESTDIR/printrepr.py < a.txt + > hg diff | python $TESTDIR/printrepr.py + > python ../switch-eol.py $1 a.txt + > echo '% hg diff only reports a single changed line:' + > hg diff | python $TESTDIR/printrepr.py + > echo "% reverting back to $1 format" + > hg revert a.txt + > python $TESTDIR/printrepr.py < a.txt + > printf "first\r\nsecond\n" > mixed.txt + > hg add mixed.txt + > echo "% hg commit of inconsistent .txt file marked as binary (should work)" + > hg commit -m 'binary file' + > echo "% hg commit of inconsistent .txt file marked as native (should fail)" + > printf "first\nsecond\r\nthird\nfourth\r\n" > a.txt + > hg commit -m 'inconsistent file' + > echo "% hg commit --config eol.only-consistent=False (should work)" + > hg commit --config eol.only-consistent=False -m 'inconsistent file' + > echo "% hg commit of binary .txt file marked as native (binary files always okay)" + > printf "first${EOL}\0${EOL}third${EOL}" > a.txt + > hg commit -m 'binary file' + > cd .. + > rm -r repo-$1 + > } + + $ makemixedrepo () { + > echo + > echo "# setup $1 repository" + > hg init mixed + > cd mixed + > printf "foo\r\nbar\r\nbaz\r\n" > win.txt + > printf "foo\nbar\nbaz\n" > unix.txt + > #printf "foo\r\nbar\nbaz\r\n" > mixed.txt + > hg commit --addremove -m 'created mixed files' + > echo "# setting repository-native EOLs to $1" + > cat > .hgeol <<EOF + > [repository] + > native = $1 + > [patterns] + > **.txt = native + > EOF + > hg commit --addremove -m 'added .hgeol' + > cd .. + > } + + $ testmixed () { + > echo + > echo "% hg clone mixed mixed-$1" + > hg clone mixed mixed-$1 + > cd mixed-$1 + > echo '% hg status (eol extension not yet activated)' + > hg status + > cat > .hg/hgrc <<EOF + > [extensions] + > eol = + > [eol] + > native = $1 + > EOF + > echo '% hg status (eol activated)' + > hg status + > echo '% hg commit' + > hg commit -m 'synchronized EOLs' + > echo '% hg status' + > hg status + > cd .. + > rm -r mixed-$1 + > } + +Basic tests + + $ makerepo LF + % setup LF repository + adding .hgeol + adding a.txt + + $ dotest LF + % hg clone repo repo-LF + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + % printrepr.py a.txt + first + second + third + % hg cat a.txt + first + second + third + % printrepr.py a.txt + first + second + third + fourth + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first + second + third + +fourth + % switching encoding from '\n' to '\r\n' + % hg diff only reports a single changed line: + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first + second + third + +fourth + % reverting back to LF format + first + second + third + % hg commit of inconsistent .txt file marked as binary (should work) + % hg commit of inconsistent .txt file marked as native (should fail) + abort: inconsistent newline style in a.txt + + % hg commit --config eol.only-consistent=False (should work) + % hg commit of binary .txt file marked as native (binary files always okay) + $ dotest CRLF + % hg clone repo repo-CRLF + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + % printrepr.py a.txt + first\r + second\r + third\r + % hg cat a.txt + first + second + third + % printrepr.py a.txt + first\r + second\r + third\r + fourth\r + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first + second + third + +fourth + % switching encoding from '\r\n' to '\n' + % hg diff only reports a single changed line: + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first + second + third + +fourth + % reverting back to CRLF format + first\r + second\r + third\r + % hg commit of inconsistent .txt file marked as binary (should work) + % hg commit of inconsistent .txt file marked as native (should fail) + abort: inconsistent newline style in a.txt + + % hg commit --config eol.only-consistent=False (should work) + % hg commit of binary .txt file marked as native (binary files always okay) + $ rm -r repo + $ makerepo CRLF + % setup CRLF repository + adding .hgeol + adding a.txt + + $ dotest LF + % hg clone repo repo-LF + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + % printrepr.py a.txt + first + second + third + % hg cat a.txt + first\r + second\r + third\r + % printrepr.py a.txt + first + second + third + fourth + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first\r + second\r + third\r + +fourth\r + % switching encoding from '\n' to '\r\n' + % hg diff only reports a single changed line: + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first\r + second\r + third\r + +fourth\r + % reverting back to LF format + first + second + third + % hg commit of inconsistent .txt file marked as binary (should work) + % hg commit of inconsistent .txt file marked as native (should fail) + abort: inconsistent newline style in a.txt + + % hg commit --config eol.only-consistent=False (should work) + % hg commit of binary .txt file marked as native (binary files always okay) + $ dotest CRLF + % hg clone repo repo-CRLF + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + % printrepr.py a.txt + first\r + second\r + third\r + % hg cat a.txt + first\r + second\r + third\r + % printrepr.py a.txt + first\r + second\r + third\r + fourth\r + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first\r + second\r + third\r + +fourth\r + % switching encoding from '\r\n' to '\n' + % hg diff only reports a single changed line: + diff --git a/a.txt b/a.txt + --- a/a.txt + +++ b/a.txt + @@ -1,3 +1,4 @@ + first\r + second\r + third\r + +fourth\r + % reverting back to CRLF format + first\r + second\r + third\r + % hg commit of inconsistent .txt file marked as binary (should work) + % hg commit of inconsistent .txt file marked as native (should fail) + abort: inconsistent newline style in a.txt + + % hg commit --config eol.only-consistent=False (should work) + % hg commit of binary .txt file marked as native (binary files always okay) + $ rm -r repo + +Mixed tests + + $ makemixedrepo LF + + # setup LF repository + adding unix.txt + adding win.txt + # setting repository-native EOLs to LF + adding .hgeol + $ testmixed LF + + % hg clone mixed mixed-LF + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + % hg status (eol extension not yet activated) + % hg status (eol activated) + M win.txt + % hg commit + % hg status + $ testmixed CRLF + + % hg clone mixed mixed-CRLF + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + % hg status (eol extension not yet activated) + % hg status (eol activated) + M win.txt + % hg commit + % hg status + $ rm -r mixed + $ makemixedrepo CRLF + + # setup CRLF repository + adding unix.txt + adding win.txt + # setting repository-native EOLs to CRLF + adding .hgeol + $ testmixed LF + + % hg clone mixed mixed-LF + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + % hg status (eol extension not yet activated) + % hg status (eol activated) + M unix.txt + % hg commit + % hg status + $ testmixed CRLF + + % hg clone mixed mixed-CRLF + updating to branch default + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + % hg status (eol extension not yet activated) + % hg status (eol activated) + M unix.txt + % hg commit + % hg status + $ rm -r mixed