public MyActionRequest(MadvocController madvocController, String actionPath, ActionRuntime config, Object action, HttpServletRequest servletRequest, HttpServletResponse servletResponse) { super(madvocController, actionPath, MadvocUtil.splitPathToChunks(actionPath), config, action, servletRequest, servletResponse); } @Override
protected ActionRequest createActionRequest(String actionPath) { HttpServletRequest servletRequest = mock(HttpServletRequest.class); HttpServletResponse servletResponse = mock(HttpServletResponse.class); HttpSession httpSession = mock(HttpSession.class); ServletContext servletContext = mock(ServletContext.class); when(servletRequest.getSession()).thenReturn(httpSession); when(httpSession.getServletContext()).thenReturn(servletContext); MadvocController madvocController = new MadvocController(); Object action = new Object(); ActionRuntime actionRuntime = new ActionRuntime( null, Action.class, ClassUtil.findMethod(Action.class, "view"), null, null, new ActionDefinition(actionPath, "GET"), ServletDispatcherActionResult.class, null, false, false, null, null); return new ActionRequest(madvocController, actionRuntime.getActionPath(), MadvocUtil.splitPathToChunks(actionRuntime.getActionPath()), actionRuntime, action, servletRequest, servletResponse); }
String[] actionPathChunks = MadvocUtil.splitPathToChunks(actionPath); actionPathChunks = MadvocUtil.splitPathToChunks(actionPath); actionRuntime = actionsManager.lookup(httpMethod, actionPathChunks);
@Test void testActionPathMacros1() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo")); assertNotNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo/boo")); assertNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo/boo/zoo")); assertNull(actionRuntime); }
@Test void testActionPathMacros2() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/xxx-{two}")); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo")); assertEquals("one", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo/boo")); assertNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/xxx-foo")); assertEquals("two", actionRuntime.getActionClassMethod().getName()); // best match! }
@Test void testActionPathMacros4() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/dummy")); // no macro actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one}")); actionsManager.registerAction(FooAction.class, "three", new ActionDefinition("/life/{three}")); actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/{two}/{three}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo")); assertEquals("one", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/scott/ramonna")); assertEquals("two", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/life/universe")); assertEquals("three", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/scott/ramonna/envy")); assertNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/life/universe/else")); assertNull(actionRuntime); }
@Test void testActionPathMacrosRegexp() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.setPathMacroClass(RegExpPathMacros.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one:[ab]+}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/a")); assertNotNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/ac")); assertNull(actionRuntime); }
@Test void testActionPathMacrosWildcard() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.setPathMacroClass(WildcardPathMacros.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one:a?a}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/aaa")); assertNotNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/aab")); assertNull(actionRuntime); } }
@Test void testActionPathMacros3() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/yyy-{one}")); actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/xxx-{two}")); assertEquals(2, actionsManager.getActionsCount()); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo")); assertNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/yyy-111")); assertEquals("one", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/xxx-222")); assertEquals("two", actionRuntime.getActionClassMethod().getName()); try { actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/xxx-{two}")); fail("error"); } catch (Exception ex) { // ignore } }
@Test void testManualAction_asComponent() { WebApp webApp = WebApp .createWebApp() .registerComponent(ManualRegistration.class) .start(); ActionsManager actionsManager = webApp.madvocContainer().requestComponent(ActionsManager.class); assertEquals(2, actionsManager.getActionsCount()); ActionRuntime actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/hello")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass()); assertEquals("foo1", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/world")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass()); assertEquals("foo2", actionRuntime.getActionClassMethod().getName()); }
@Test void testZqq() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); RootPackages rootPackages = webapp.madvocContainer().lookupComponent(RootPackages.class); rootPackages.addRootPackageOf(this.getClass()); actionsManager.registerAction(ReAction.class, "zqq1", null); actionsManager.registerAction(ReAction.class, "zqq2", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/config/dba.delete_multi.do")); assertNotNull(cfg); assertEquals("/{entityName}/dba.delete_multi.do", cfg.getActionPath()); }
actionsManager.registerAction(ReAction.class, "wild2", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/ild123cat")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123ca")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123cat.html")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123dog.html")); assertNull(cfg); cfg = actionsManager.lookup("POST", MadvocUtil.splitPathToChunks("/re/wild123dog.html")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass());
ActionRuntime actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/hello")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass()); assertEquals("foo1", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/world")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass());
@Test void testMacrosDups() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); webapp.madvocContainer().lookupComponent(RootPackages.class).addRootPackageOf(this.getClass()); actionsManager.setPathMacroClass(RegExpPathMacros.class); actionsManager.registerAction(ReAction.class, "duplo2", null); actionsManager.registerAction(ReAction.class, "duplo1", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/duplo/123")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("/re/duplo/{id:^[0-9]+}", cfg.getActionPath()); RouteChunk chunk = cfg.getRouteChunk(); assertEquals(1, chunk.pathMacros().macrosCount()); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/duplo/aaa")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("/re/duplo/{sid}", cfg.getActionPath()); chunk = cfg.getRouteChunk(); assertEquals(1, chunk.pathMacros().macrosCount()); assertEquals("sid", chunk.pathMacros().names()[0]); assertEquals(2, actionsManager.getActionsCount()); }
ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/173/macro.html")); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/image/173/png/macro2.html")); cfg = actionsManager.lookup("POST", MadvocUtil.splitPathToChunks("/re/users/173/macro3")); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/index.html")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/index/reindex/macro.html")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/users/173/macro3")); assertNull(cfg);