--- /dev/null
+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");
+ }
+ }
+}