package edu.stanford.nlp.trees.tregex.tsurgeon; import junit.framework.TestCase; import java.util.regex.Pattern; import java.util.regex.Matcher; /** * Test the regex patterns in RelabelNode. The operation itself will * be tested in TsurgeonTest. * * @author John Bauer */ public class RelabelNodeTest extends TestCase { public void testRegexPattern() { Pattern pattern = RelabelNode.regexPattern; String[] goodLabels = {"//", "/foo/", "/\\\\/", "/\\\\\\\\/", "/foo\\\\/", "/f\\oo\\\\/", "/f\\oo/", "/f\\o/", "/f\\/oo/"}; String[] badLabels = {"foo", "/\\/", "/\\\\\\/", "/foo\\/", "asdf"}; runPatternTest(pattern, goodLabels, badLabels, 1, -1); } public void testNodePattern() { Pattern pattern = Pattern.compile(RelabelNode.nodePatternString); String[] goodMatches = {"={foo}", "={blah}", "={z954240_fdsfgsf}"}; String[] badMatches = {"%{foo}", "bar", "=%{blah}", "%={blah}", "=foo", "%foo"}; runPatternTest(pattern, goodMatches, badMatches, 0, 0); } public void testVariablePattern() { Pattern pattern = Pattern.compile(RelabelNode.variablePatternString); String[] goodMatches = {"%{foo}", "%{blah}", "%{z954240_fdsfgsf}"}; String[] badMatches = {"={foo}", "{bar}", "=%{blah}", "%={blah}", "=foo", "%foo"}; runPatternTest(pattern, goodMatches, badMatches, 0, 0); } public void runPatternTest(Pattern pattern, String[] good, String[] bad, int startOffset, int endOffset) { for (String test : good) { Matcher m = pattern.matcher(test); assertTrue("Should have matched on " + test, m.matches()); String matched = m.group(1); String expected = test.substring(startOffset, test.length() + endOffset); assertEquals("Matched group wasn't " + test, expected, matched); } for (String test : bad) { Matcher m = pattern.matcher(test); assertFalse("Shouldn't have matched on " + test, m.matches()); } } }