1
2
3
4 package net.sourceforge.pmd.lang.cpp;
5
6 import static org.junit.Assert.assertEquals;
7
8 import java.io.IOException;
9 import java.io.StringReader;
10
11 import org.junit.Test;
12
13 public class ContinuationReaderTest {
14 @Test
15 public void testHappyPath() throws IOException {
16 assertEquals("empty", "", filter(""));
17 assertEquals("anything", "anything", filter("anything"));
18
19 assertEquals("partial: BS", "\\", filter("\\"));
20 assertEquals("partial: BS LF", "\\\r", filter("\\\r"));
21 assertEquals("full: BS CR", "", filter("\\\n"));
22 assertEquals("full: BS LF CR", "", filter("\\\r\n"));
23
24 assertEquals("partial: BS: prefix", "prefix\\", filter("prefix\\"));
25 assertEquals("partial: BS LF: prefix", "prefix\\\r", filter("prefix\\\r"));
26 assertEquals("full: BS CR: prefix", "prefix", filter("prefix\\\n"));
27 assertEquals("full: BS LF CR: prefix", "prefix", filter("prefix\\\r\n"));
28
29 assertEquals("partial: BS: suffix", "\\suffix", filter("\\suffix"));
30 assertEquals("partial: BS LF: suffix", "\\\rsuffix", filter("\\\rsuffix"));
31 assertEquals("full: BS CR: suffix", "suffix", filter("\\\nsuffix"));
32 assertEquals("full: BS LF CR: suffix", "suffix", filter("\\\r\nsuffix"));
33
34 assertEquals("partial: BS: prefix, suffix", "prefix\\suffix", filter("prefix\\suffix"));
35 assertEquals("partial: BS LF: prefix, suffix", "prefix\\\rsuffix", filter("prefix\\\rsuffix"));
36 assertEquals("full: BS CR: prefix, suffix", "prefixsuffix", filter("prefix\\\nsuffix"));
37 assertEquals("full: BS LF CR: prefix, suffix", "prefixsuffix", filter("prefix\\\r\nsuffix"));
38
39 assertEquals("complex mixed", "abc", filter("a\\\r\nb\\\n\\\n\\\r\nc"));
40 }
41
42 private static String filter(String s) throws IOException {
43 ContinuationReader reader = new ContinuationReader(new StringReader(s));
44 try {
45 StringBuilder buf = new StringBuilder();
46 int c;
47 while ((c = reader.read()) >= 0) {
48 buf.append((char) c);
49 }
50 return buf.toString();
51 } finally {
52 reader.close();
53 }
54 }
55 }