1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.util.io;
45
46 import static org.junit.Assert.assertEquals;
47
48 import java.io.ByteArrayInputStream;
49 import java.io.IOException;
50 import java.io.InputStream;
51 import java.io.UnsupportedEncodingException;
52
53 import org.junit.Test;
54
55 public class EolCanonicalizingInputStreamTest {
56
57 @Test
58 public void testLF() throws IOException {
59 final byte[] bytes = asBytes("1\n2\n3");
60 test(bytes, bytes, false);
61 }
62
63 @Test
64 public void testCR() throws IOException {
65 final byte[] bytes = asBytes("1\r2\r3");
66 test(bytes, bytes, false);
67 }
68
69 @Test
70 public void testCRLF() throws IOException {
71 test(asBytes("1\r\n2\r\n3"), asBytes("1\n2\n3"), false);
72 }
73
74 @Test
75 public void testLFCR() throws IOException {
76 final byte[] bytes = asBytes("1\n\r2\n\r3");
77 test(bytes, bytes, false);
78 }
79
80 @Test
81 public void testEmpty() throws IOException {
82 final byte[] bytes = asBytes("");
83 test(bytes, bytes, false);
84 }
85
86 @Test
87 public void testBinaryDetect() throws IOException {
88 final byte[] bytes = asBytes("1\r\n2\r\n3\0");
89 test(bytes, bytes, true);
90 }
91
92 @Test
93 public void testBinaryDontDetect() throws IOException {
94 test(asBytes("1\r\n2\r\n3\0"), asBytes("1\n2\n3\0"), false);
95 }
96
97 private static void test(byte[] input, byte[] expected,
98 boolean detectBinary) throws IOException {
99 final InputStream bis1 = new ByteArrayInputStream(input);
100 final InputStream cis1 = new EolCanonicalizingInputStream(bis1, detectBinary);
101 int index1 = 0;
102 for (int b = cis1.read(); b != -1; b = cis1.read()) {
103 assertEquals(expected[index1], (byte) b);
104 index1++;
105 }
106
107 assertEquals(expected.length, index1);
108
109 for (int bufferSize = 1; bufferSize < 10; bufferSize++) {
110 final byte[] buffer = new byte[bufferSize];
111 final InputStream bis2 = new ByteArrayInputStream(input);
112 final InputStream cis2 = new EolCanonicalizingInputStream(bis2, detectBinary);
113
114 int read = 0;
115 for (int readNow = cis2.read(buffer, 0, buffer.length); readNow != -1
116 && read < expected.length; readNow = cis2.read(buffer, 0,
117 buffer.length)) {
118 for (int index2 = 0; index2 < readNow; index2++) {
119 assertEquals(expected[read + index2], buffer[index2]);
120 }
121 read += readNow;
122 }
123
124 assertEquals(expected.length, read);
125 cis2.close();
126 }
127 cis1.close();
128 }
129
130 private static byte[] asBytes(String in) {
131 try {
132 return in.getBytes("UTF-8");
133 } catch (UnsupportedEncodingException ex) {
134 throw new AssertionError();
135 }
136 }
137 }