diff options
author | Christian Halstrick <christian.halstrick@sap.com> | 2012-01-16 10:53:13 -0500 |
---|---|---|
committer | Code Review <codereview-daemon@eclipse.org> | 2012-01-16 10:53:13 -0500 |
commit | a9892fba462e03cec1bfa4fee9525fc9de108a2f (patch) | |
tree | 1c145091d0a80c885730cc897c25ae30e4a1c156 /org.eclipse.jgit.test/tst/org | |
parent | 03b5416a35ad78773fb0a97a98686fec18c0c05e (diff) | |
parent | 76dd9d1d46007fc49639d264631658114f4fbd24 (diff) | |
download | jgit-a9892fba462e03cec1bfa4fee9525fc9de108a2f.tar.gz jgit-a9892fba462e03cec1bfa4fee9525fc9de108a2f.zip |
Merge "Support more of AutoCRLF"
Diffstat (limited to 'org.eclipse.jgit.test/tst/org')
5 files changed, 248 insertions, 3 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java index 632732db8f..632288ec64 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java @@ -111,6 +111,54 @@ public class AddCommandTest extends RepositoryTestCase { } @Test + public void testAddExistingSingleFileWithNewLine() throws IOException, + NoFilepatternException { + File file = new File(db.getWorkTree(), "a.txt"); + FileUtils.createNewFile(file); + PrintWriter writer = new PrintWriter(file); + writer.print("row1\r\nrow2"); + writer.close(); + + Git git = new Git(db); + db.getConfig().setString("core", null, "autocrlf", "false"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\r\nrow2]", + indexState(CONTENT)); + db.getConfig().setString("core", null, "autocrlf", "true"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\nrow2]", + indexState(CONTENT)); + db.getConfig().setString("core", null, "autocrlf", "input"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\nrow2]", + indexState(CONTENT)); + } + + @Test + public void testAddExistingSingleBinaryFile() throws IOException, + NoFilepatternException { + File file = new File(db.getWorkTree(), "a.txt"); + FileUtils.createNewFile(file); + PrintWriter writer = new PrintWriter(file); + writer.print("row1\r\nrow2\u0000"); + writer.close(); + + Git git = new Git(db); + db.getConfig().setString("core", null, "autocrlf", "false"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\r\nrow2\u0000]", + indexState(CONTENT)); + db.getConfig().setString("core", null, "autocrlf", "true"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\r\nrow2\u0000]", + indexState(CONTENT)); + db.getConfig().setString("core", null, "autocrlf", "input"); + git.add().addFilepattern("a.txt").call(); + assertEquals("[a.txt, mode:100644, content:row1\r\nrow2\u0000]", + indexState(CONTENT)); + } + + @Test public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatternException { FileUtils.mkdir(new File(db.getWorkTree(), "sub")); File file = new File(db.getWorkTree(), "sub/a.txt"); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java index 81b6908dc7..20a1acbd99 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java @@ -50,8 +50,10 @@ import java.io.IOException; import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCacheEntry; import org.eclipse.jgit.errors.NoWorkTreeException; +import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.RepositoryTestCase; +import org.eclipse.jgit.lib.StoredConfig; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.Before; import org.junit.Test; @@ -200,4 +202,35 @@ public class PathCheckoutCommandTest extends RepositoryTestCase { r.release(); } } + + public void testCheckoutMixedNewlines() throws Exception { + // "git config core.autocrlf true" + StoredConfig config = git.getRepository().getConfig(); + config.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null, + ConfigConstants.CONFIG_KEY_AUTOCRLF, true); + config.save(); + // edit <FILE1> + File written = writeTrashFile(FILE1, "4\r\n4"); + assertEquals("4\r\n4", read(written)); + // "git add <FILE1>" + git.add().addFilepattern(FILE1).call(); + // "git commit -m 'CRLF'" + git.commit().setMessage("CRLF").call(); + // edit <FILE1> + written = writeTrashFile(FILE1, "4\n4"); + assertEquals("4\n4", read(written)); + // "git add <FILE1>" + git.add().addFilepattern(FILE1).call(); + // "git checkout -- <FILE1> + git.checkout().addPath(FILE1).call(); + // "git status" => clean + Status status = git.status().call(); + assertEquals(0, status.getAdded().size()); + assertEquals(0, status.getChanged().size()); + assertEquals(0, status.getConflicting().size()); + assertEquals(0, status.getMissing().size()); + assertEquals(0, status.getModified().size()); + assertEquals(0, status.getRemoved().size()); + assertEquals(0, status.getUntracked().size()); + } } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java index f06b37c842..fafd745b5a 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java @@ -40,6 +40,7 @@ */ package org.eclipse.jgit.lib; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -879,6 +880,41 @@ public class DirCacheCheckoutTest extends RepositoryTestCase { } @Test + public void testCheckoutOutChangesAutoCRLFfalse() throws IOException { + setupCase(mk("foo"), mkmap("foo/bar", "foo\nbar"), mk("foo")); + checkout(); + assertIndex(mkmap("foo/bar", "foo\nbar")); + assertWorkDir(mkmap("foo/bar", "foo\nbar")); + } + + @Test + public void testCheckoutOutChangesAutoCRLFInput() throws IOException { + setupCase(mk("foo"), mkmap("foo/bar", "foo\nbar"), mk("foo")); + db.getConfig().setString("core", null, "autocrlf", "input"); + checkout(); + assertIndex(mkmap("foo/bar", "foo\nbar")); + assertWorkDir(mkmap("foo/bar", "foo\nbar")); + } + + @Test + public void testCheckoutOutChangesAutoCRLFtrue() throws IOException { + setupCase(mk("foo"), mkmap("foo/bar", "foo\nbar"), mk("foo")); + db.getConfig().setString("core", null, "autocrlf", "true"); + checkout(); + assertIndex(mkmap("foo/bar", "foo\nbar")); + assertWorkDir(mkmap("foo/bar", "foo\r\nbar")); + } + + @Test + public void testCheckoutOutChangesAutoCRLFtrueBinary() throws IOException { + setupCase(mk("foo"), mkmap("foo/bar", "foo\nb\u0000ar"), mk("foo")); + db.getConfig().setString("core", null, "autocrlf", "true"); + checkout(); + assertIndex(mkmap("foo/bar", "foo\nb\u0000ar")); + assertWorkDir(mkmap("foo/bar", "foo\nb\u0000ar")); + } + + @Test public void testCheckoutUncachedChanges() throws IOException { setupCase(mk("foo"), mk("foo"), mk("foo")); writeTrashFile("foo", "otherData"); @@ -931,9 +967,8 @@ public class DirCacheCheckoutTest extends RepositoryTestCase { offset += numRead; } is.close(); - assertTrue("unexpected content for path " + path - + " in workDir. Expected: <" + expectedValue + ">", - Arrays.equals(buffer, i.get(path).getBytes())); + assertArrayEquals("unexpected content for path " + path + + " in workDir. ", buffer, i.get(path).getBytes()); nrFiles++; } } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/AutoCRLFOutputStreamTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/AutoCRLFOutputStreamTest.java new file mode 100644 index 0000000000..b370468f6b --- /dev/null +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/AutoCRLFOutputStreamTest.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2011, Robin Rosenberg + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.eclipse.jgit.util.io; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.junit.Assert; +import org.junit.Test; + +public class AutoCRLFOutputStreamTest { + + @Test + public void test() throws IOException { + assertNoCrLf("", ""); + assertNoCrLf("\r", "\r"); + assertNoCrLf("\r\n", "\n"); + assertNoCrLf("\r\n", "\r\n"); + assertNoCrLf("\r\r", "\r\r"); + assertNoCrLf("\r\n\r", "\n\r"); + assertNoCrLf("\r\n\r\r", "\r\n\r\r"); + assertNoCrLf("\r\n\r\n", "\r\n\r\n"); + assertNoCrLf("\r\n\r\n\r", "\n\r\n\r"); + } + + private void assertNoCrLf(String string, String string2) throws IOException { + assertNoCrLfHelper(string, string2); + // \u00e5 = LATIN SMALL LETTER A WITH RING ABOVE + // the byte value is negative + assertNoCrLfHelper("\u00e5" + string, "\u00e5" + string2); + assertNoCrLfHelper("\u00e5" + string + "\u00e5", "\u00e5" + string2 + + "\u00e5"); + assertNoCrLfHelper(string + "\u00e5", string2 + "\u00e5"); + } + + private void assertNoCrLfHelper(String expect, String input) + throws IOException { + byte[] inbytes = input.getBytes(); + byte[] expectBytes = expect.getBytes(); + for (int i = 0; i < 5; ++i) { + byte[] buf = new byte[i]; + InputStream in = new ByteArrayInputStream(inbytes); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + OutputStream out = new AutoCRLFOutputStream(bos); + if (i > 0) { + int n; + while ((n = in.read(buf)) >= 0) { + out.write(buf, 0, n); + } + } else { + int c; + while ((c = in.read()) != -1) + out.write(c); + } + out.flush(); + in.close(); + out.close(); + byte[] actualBytes = bos.toByteArray(); + Assert.assertEquals("bufsize=" + i, encode(expectBytes), + encode(actualBytes)); + } + } + + String encode(byte[] in) { + StringBuilder str = new StringBuilder(); + for (byte b : in) { + if (b < 32) + str.append(0xFF & b); + else { + str.append("'"); + str.append((char) b); + str.append("'"); + } + str.append(' '); + } + return str.toString(); + } + +} diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/EolCanonicalizingInputStreamTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/EolCanonicalizingInputStreamTest.java index 37660ce720..960ca62411 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/EolCanonicalizingInputStreamTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/EolCanonicalizingInputStreamTest.java @@ -77,6 +77,12 @@ public class EolCanonicalizingInputStreamTest { test(bytes, bytes); } + @Test + public void testEmpty() throws IOException { + final byte[] bytes = asBytes(""); + test(bytes, bytes); + } + private void test(byte[] input, byte[] expected) throws IOException { final InputStream bis1 = new ByteArrayInputStream(input); final InputStream cis1 = new EolCanonicalizingInputStream(bis1); |