package com.stevesoft.pat; import static org.testng.AssertJUnit.assertEquals; import java.io.IOException; import java.io.StringWriter; import org.testng.annotations.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"); } } }