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