package net.sourceforge.stripes.controller;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import net.sourceforge.stripes.action.UrlBinding;
/**
* Tests for various methods in the NameBasedActionResolver that can be tested in isolation.
* The resolver is also tested by a lot of the mock tests that run from request through the
* action layer.
*
* @author Tim Fennell
*/
public class NameBasedActionResolverTest {
private NameBasedActionResolver resolver = new NameBasedActionResolver() {
@Override
protected Set<Class<? extends ActionBean>> findClasses() {
Set<Class<? extends ActionBean>> classes = new HashSet<Class<? extends ActionBean>>();
classes.add(SimpleActionBean.class);
classes.add(OverloadedActionBean.class);
classes.add(Container1.OverloadedActionBean.class);
classes.add(Container2.OverloadedActionBean.class);
return classes;
}
};
static class SimpleActionBean implements ActionBean {
public void setContext(ActionBeanContext context) {
}
public ActionBeanContext getContext() {
return null;
}
}
static class OverloadedActionBean implements ActionBean {
public void setContext(ActionBeanContext context) {
}
public ActionBeanContext getContext() {
return null;
}
}
static class Container1 {
static class OverloadedActionBean implements ActionBean {
public void setContext(ActionBeanContext context) {
}
public ActionBeanContext getContext() {
return null;
}
}
}
static class Container2 {
static class OverloadedActionBean implements ActionBean {
public void setContext(ActionBeanContext context) {
}
public ActionBeanContext getContext() {
return null;
}
}
}
@BeforeTest
public void setUp() throws Exception {
resolver.init(null);
}
@Test(groups="fast")
public void generateBinding() {
String binding = this.resolver.getUrlBinding("foo.bar.web.admin.ControlCenterActionBean");
Assert.assertEquals(binding, "/admin/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingForNonPackagedClass() {
String binding = this.resolver.getUrlBinding("ControlCenterActionBean");
Assert.assertEquals(binding, "/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingForClassWithSingleBasePackage() {
String binding = this.resolver.getUrlBinding("www.ControlCenterActionBean");
Assert.assertEquals(binding, "/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingWithMultipleBasePackages() {
String binding = this.resolver.getUrlBinding("foo.web.stripes.bar.www.ControlCenterActionBean");
Assert.assertEquals(binding, "/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingWithMultipleBasePackages2() {
String binding = this.resolver.getUrlBinding("foo.web.stripes.www.admin.ControlCenterActionBean");
Assert.assertEquals(binding, "/admin/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingWithoutSuffix() {
String binding = this.resolver.getUrlBinding("foo.web.stripes.www.admin.ControlCenter");
Assert.assertEquals(binding, "/admin/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingWithDifferentSuffix() {
String binding = this.resolver.getUrlBinding("foo.web.stripes.www.admin.ControlCenterBean");
Assert.assertEquals(binding, "/admin/ControlCenter.action");
}
@Test(groups="fast")
public void generateBindingWithDifferentSuffix2() {
String binding = this.resolver.getUrlBinding("foo.web.stripes.www.admin.ControlCenterAction");
Assert.assertEquals(binding, "/admin/ControlCenter.action");
}
@Test(groups="fast")
public void testWithAnnotatedClass() {
String name = net.sourceforge.stripes.test.TestActionBean.class.getName();
String binding = this.resolver.getUrlBinding(name);
Assert.assertEquals(binding, "/test/Test.action");
binding = this.resolver.getUrlBinding(net.sourceforge.stripes.test.TestActionBean.class);
Assert.assertEquals(binding,
net.sourceforge.stripes.test.TestActionBean.class.
getAnnotation(UrlBinding.class).value());
}
@Test(groups="fast")
public void testGetFindViewAttempts() {
String urlBinding = "/account/ViewAccount.action";
List<String> viewAttempts = this.resolver.getFindViewAttempts(urlBinding);
Assert.assertEquals(viewAttempts.size(), 3);
Assert.assertEquals(viewAttempts.get(0), "/account/ViewAccount.jsp");
Assert.assertEquals(viewAttempts.get(1), "/account/viewAccount.jsp");
Assert.assertEquals(viewAttempts.get(2), "/account/view_account.jsp");
}
@Test(groups="fast")
public void testFindByNameWithSuffixes() {
Assert.assertNotNull(resolver.getActionBeanByName("Simple"));
Assert.assertNotNull(resolver.getActionBeanByName("SimpleAction"));
}
@Test(groups="fast")
public void testOverloadedBeanNameWithSuffixes() {
Assert.assertNull(resolver.getActionBeanByName("Overloaded"));
}
}