JAL-1270 main methods converted to JUnit
[jalview.git] / test / com / stevesoft / pat / RegexWriterTest.java
diff --git a/test/com/stevesoft/pat/RegexWriterTest.java b/test/com/stevesoft/pat/RegexWriterTest.java
new file mode 100644 (file)
index 0000000..d91502e
--- /dev/null
@@ -0,0 +1,73 @@
+package com.stevesoft.pat;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+import org.junit.Test;
+
+/**
+ * Test class refactored from RegexWriter main method
+ */
+public class RegexWriterTest
+{
+
+  /**
+   * Asserts that the result of performing 'replaceAll' on the input using the
+   * regular expression is the same as the output of a RegexWriter, constructed
+   * from the regular expression, writing out each character of the input
+   * string.
+   * 
+   * @param re
+   *          a regular expression
+   * @param inp
+   *          an input string
+   * @throws Exception
+   */
+  void test(String re, String inp) throws IOException
+  {
+    StringWriter sw = new StringWriter();
+    Regex rex = Regex.perlCode(re);
+    String res1 = rex.replaceAll(inp);
+    RegexWriter rw = new RegexWriter(rex, sw);
+    for (int i = 0; i < inp.length(); i++)
+    {
+      rw.write(inp.charAt(i));
+    }
+    rw.close();
+    String res2 = sw.toString();
+    if (!res1.equals(res2))
+    {
+      System.out.println("re=" + re);
+      System.out.println("inp=" + inp);
+      System.out.println("res1=" + res1);
+      System.out.println("res2=" + res2);
+      assertEquals(res1, res2);
+    }
+  }
+
+  @Test
+  public void testWrite() throws IOException
+  {
+    for (int n = 1; n <= 1; n++)
+    {
+      test("s/x/y/", "-----x123456789");
+      test("s/x/y/", "x123456789");
+      test("s/x/y/", "-----x");
+      test("s/x.*?x/y/", ".xx..x..x...x...x....x....x");
+      test("s/x.*x/[$&]/", "--x........x--xx");
+      test("s/x.*x/[$&]/", "--x........x------");
+      test("s/.$/a/m", "bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbbbbbbbbbbbb");
+      test("s/.$/a/", "123");
+      test("s/.$/a/", "bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb");
+      test("s/^./a/", "bb\nbbb\nbbbb\nbbbbb\nbbbbbb\nbb");
+      test("s/$/a/", "bbb");
+      test("s/^/a/", "bbb");
+      test("s/^/a/", "");
+      test("s{.*}{N}", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
+      test("s/.{0,7}/y/", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+      test("s/x/$&/", "xxx");
+    }
+  }
+}