aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org
diff options
context:
space:
mode:
authorChristian Halstrick <christian.halstrick@sap.com>2012-01-16 10:53:13 -0500
committerCode Review <codereview-daemon@eclipse.org>2012-01-16 10:53:13 -0500
commita9892fba462e03cec1bfa4fee9525fc9de108a2f (patch)
tree1c145091d0a80c885730cc897c25ae30e4a1c156 /org.eclipse.jgit.test/tst/org
parent03b5416a35ad78773fb0a97a98686fec18c0c05e (diff)
parent76dd9d1d46007fc49639d264631658114f4fbd24 (diff)
downloadjgit-a9892fba462e03cec1bfa4fee9525fc9de108a2f.tar.gz
jgit-a9892fba462e03cec1bfa4fee9525fc9de108a2f.zip
Merge "Support more of AutoCRLF"
Diffstat (limited to 'org.eclipse.jgit.test/tst/org')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java48
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java33
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java41
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/AutoCRLFOutputStreamTest.java123
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/EolCanonicalizingInputStreamTest.java6
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);