package org.jboss.seam.test.unit.web;
import org.testng.annotations.Test;
import org.jboss.seam.web.Pattern;
import org.jboss.seam.web.Rewrite;
import org.jboss.seam.web.ServletMapping;
import static org.testng.Assert.*;
public class RewriteTest
{
@Test
public void testBasicInPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchIn(pattern, "/bar");
testNoMatchIn(pattern, "/fool");
testNoMatchIn(pattern, "/foo.seam");
testNoMatchIn(pattern, "/foo/");
testNoMatchIn(pattern, "/foo/bar");
testMatchIn(pattern, "/foo", "/foo.seam");
testMatchIn(pattern, "/foo?x=y", "/foo.seam?x=y");
}
@Test
public void testSingleArgInPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo/{id}");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchIn(pattern, "/foo");
testNoMatchIn(pattern, "/foo/bar/baz");
testNoMatchIn(pattern, "/foo/bar/baz?x=y");
testNoMatchIn(pattern, "/foo/bar/?x=y");
testMatchIn(pattern, "/foo/", "/foo.seam?id=");
testMatchIn(pattern, "/foo/bar", "/foo.seam?id=bar");
testMatchIn(pattern, "/foo/bar?x=y", "/foo.seam?x=y&id=bar");
}
@Test
public void testMultiArgInPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo/{id}/{action}");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchIn(pattern, "/foo");
testNoMatchIn(pattern, "/foo/bar");
testNoMatchIn(pattern, "/foo/bar/baz/qux");
testMatchIn(pattern, "/foo/bar/baz", "/foo.seam?id=bar&action=baz");
testMatchIn(pattern, "/foo/bar/baz?x=y", "/foo.seam?x=y&id=bar&action=baz");
}
@Test
public void testBasicOutPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchOut(pattern, "/bar.seam");
testNoMatchOut(pattern, "/fool.seam");
testNoMatchOut(pattern, "/foo");
testMatchOut(pattern, "/foo.seam", "/foo");
testMatchOut(pattern, "/foo.seam?x=y", "/foo?x=y");
}
@Test
public void testSingleArgOutPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo/{id}");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchOut(pattern, "/foo.seam");
testNoMatchOut(pattern, "/foo.seam?x=y");
testNoMatchOut(pattern, "/foo.seam/bar");
//should this match?
//testNoMatchOut(pattern, "/foo.seam/bar?id=test");
testMatchOut(pattern, "/foo.seam?id=bar", "/foo/bar");
testMatchOut(pattern, "/foo.seam?x=y&id=bar", "/foo/bar?x=y");
testMatchOut(pattern, "/foo.seam?id=bar&x=y", "/foo/bar?x=y");
testMatchOut(pattern, "/foo.seam?a=b&x=y&id=bar&c=d&c=e", "/foo/bar?a=b&x=y&c=d&c=e");
}
@Test
public void testMultiArgOutPattern()
throws Exception
{
Pattern pattern = new Pattern("/foo.seam", "/foo/{id}/{action}");
pattern.setViewMapping(new ServletMapping("*.seam"));
testNoMatchOut(pattern, "/foo.seam");
testNoMatchOut(pattern, "/foo.seam?id=bar");
testNoMatchOut(pattern, "/foo.seam?action=baz");
testMatchOut(pattern, "/foo.seam?action=baz&id=bar", "/foo/bar/baz");
testMatchOut(pattern, "/foo.seam?y=z&action=baz&n=one&n=two&id=bar&x=y", "/foo/bar/baz?y=z&n=one&n=two&x=y");
}
public void testNoMatchIn(Pattern pattern, String incoming) {
assertNull(pattern.matchIncoming(incoming), incoming);
}
public void testNoMatchOut(Pattern pattern, String incoming) {
assertNull(pattern.matchOutgoing(incoming), incoming);
}
public void testMatchIn(Pattern pattern, String incoming, String expected) {
Rewrite rewrite = pattern.matchIncoming(incoming);
assertTrue(rewrite.isMatch(), incoming);
assertEquals(rewrite.rewrite(), expected);
}
public void testMatchOut(Pattern pattern, String incoming, String expected) {
Rewrite rewrite = pattern.matchOutgoing(incoming);
assertTrue(rewrite.isMatch(), incoming);
assertEquals(rewrite.rewrite(), expected);
}
}