View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
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  }