package org.mortbay.jetty.handler.rewrite;
import java.io.IOException;
import java.util.regex.Matcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.Request;
import org.mortbay.jetty.handler.rewrite.RegexRule;
import junit.framework.TestCase;
public class RegexRuleTest extends TestCase
{
private RegexRule _rule;
public void setUp()
{
_rule = new TestRegexRule();
}
public void tearDown()
{
_rule = null;
}
public void testTrueMatch() throws IOException
{
String[][] matchCases = {
// regex: *.jsp
{"/.*.jsp", "/hello.jsp"},
{"/.*.jsp", "/abc/hello.jsp"},
// regex: /abc or /def
{"/abc|/def", "/abc"},
{"/abc|/def", "/def"},
// regex: *.do or *.jsp
{".*\\.do|.*\\.jsp", "/hello.do"},
{".*\\.do|.*\\.jsp", "/hello.jsp"},
{".*\\.do|.*\\.jsp", "/abc/hello.do"},
{".*\\.do|.*\\.jsp", "/abc/hello.jsp"},
{"/abc/.*.htm|/def/.*.htm", "/abc/hello.htm"},
{"/abc/.*.htm|/def/.*.htm", "/abc/def/hello.htm"},
// regex: /abc/*.jsp
{"/abc/.*.jsp", "/abc/hello.jsp"},
{"/abc/.*.jsp", "/abc/def/hello.jsp"}
};
for (int i = 0; i < matchCases.length; i++)
{
String[] matchCase = matchCases[i];
assertMatch(true, matchCase);
}
}
public void testFalseMatch() throws IOException
{
String[][] matchCases = {
{"/abc/.*.jsp", "/hello.jsp"}
};
for (int i = 0; i < matchCases.length; i++)
{
String[] matchCase = matchCases[i];
assertMatch(false, matchCase);
}
}
private void assertMatch(boolean flag, String[] matchCase) throws IOException
{
_rule.setRegex(matchCase[0]);
final String uri=matchCase[1];
String result = _rule.matchAndApply(uri,
new Request()
{
public String getRequestURI()
{
return uri;
}
}, null
);
assertEquals("regex: " + matchCase[0] + " uri: " + matchCase[1], flag, result!=null);
}
private class TestRegexRule extends RegexRule
{
public String apply(String target,HttpServletRequest request,HttpServletResponse response, Matcher matcher) throws IOException
{
return target;
}
}
}