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 java.io.ByteArrayInputStream;
47 import java.io.ByteArrayOutputStream;
48 import java.io.IOException;
49 import java.io.InputStream;
50
51 import org.junit.Assert;
52 import org.junit.Test;
53
54 public class AutoCRLFInputStreamTest {
55
56 @Test
57 public void test() throws IOException {
58 assertNoCrLf("", "");
59 assertNoCrLf("\r", "\r");
60 assertNoCrLf("\r\n", "\n");
61 assertNoCrLf("\r\n", "\r\n");
62 assertNoCrLf("\r\r", "\r\r");
63 assertNoCrLf("\r\n\r", "\n\r");
64 assertNoCrLf("\r\n\r\r", "\r\n\r\r");
65 assertNoCrLf("\r\n\r\n", "\r\n\r\n");
66 assertNoCrLf("\r\n\r\n\r", "\n\r\n\r");
67 assertNoCrLf("\0\n", "\0\n");
68 }
69
70 @Test
71 public void testBoundary() throws IOException {
72 for (int i = AutoCRLFInputStream.BUFFER_SIZE - 10; i < AutoCRLFInputStream.BUFFER_SIZE + 10; i++) {
73 String s1 = Strings.repeat("a", i);
74 assertNoCrLf(s1, s1);
75 String s2 = Strings.repeat("\0", i);
76 assertNoCrLf(s2, s2);
77 }
78 }
79
80 private void assertNoCrLf(String string, String string2) throws IOException {
81 assertNoCrLfHelper(string, string2);
82
83
84 assertNoCrLfHelper("\u00e5" + string, "\u00e5" + string2);
85 assertNoCrLfHelper("\u00e5" + string + "\u00e5", "\u00e5" + string2
86 + "\u00e5");
87 assertNoCrLfHelper(string + "\u00e5", string2 + "\u00e5");
88 }
89
90 private void assertNoCrLfHelper(String expect, String input)
91 throws IOException {
92 byte[] inbytes = input.getBytes();
93 byte[] expectBytes = expect.getBytes();
94 for (int i = 0; i < 5; ++i) {
95 byte[] buf = new byte[i];
96 ByteArrayInputStream bis = new ByteArrayInputStream(inbytes);
97 InputStream in = new AutoCRLFInputStream(bis, true);
98 ByteArrayOutputStream out = new ByteArrayOutputStream();
99 if (i > 0) {
100 int n;
101 while ((n = in.read(buf)) >= 0) {
102 out.write(buf, 0, n);
103 }
104 } else {
105 int c;
106 while ((c = in.read()) != -1)
107 out.write(c);
108 }
109 out.flush();
110 in.close();
111 out.close();
112 byte[] actualBytes = out.toByteArray();
113 Assert.assertEquals("bufsize=" + i, encode(expectBytes),
114 encode(actualBytes));
115 }
116 }
117
118 String encode(byte[] in) {
119 StringBuilder str = new StringBuilder();
120 for (byte b : in) {
121 if (b < 32)
122 str.append(0xFF & b);
123 else {
124 str.append("'");
125 str.append((char) b);
126 str.append("'");
127 }
128 str.append(' ');
129 }
130 return str.toString();
131 }
132
133 }