/** * Copyright 2005-2016 hdiv.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hdiv.session; import java.util.List; import org.hdiv.AbstractHDIVTestCase; import org.hdiv.context.RequestContextHolder; import org.hdiv.state.IPage; import org.hdiv.state.IParameter; import org.hdiv.state.IState; import org.hdiv.state.Page; import org.hdiv.state.Parameter; import org.hdiv.state.State; import org.hdiv.util.Constants; public class SessionTest extends AbstractHDIVTestCase { private ISession session; @Override protected void onSetUp() throws Exception { session = getApplicationContext().getBean(ISession.class); } public void testGetPageId() { RequestContextHolder context = getRequestContext(); int pageId = session.getPageId(context); assertTrue(pageId > 0); } public void testAddPage() { RequestContextHolder context = getRequestContext(); IPage page = new Page(20); IState state = new State(0); state.setAction("/action"); IParameter param = new Parameter("name", "value", false, null, true); state.addParameter(param); page.addState(state); session.addPage(context, page); } public void testGetState() { RequestContextHolder context = getRequestContext(); IPage page = new Page(20); IState state = new State(0); state.setAction("/action"); IParameter param = new Parameter("name", "value", false, null, true); state.addParameter(param); page.addState(state); session.addPage(context, page); // Restore state IState restored = session.getState(context, 20, 0); assertNotNull(restored); assertEquals(state, restored); } public void testGetPage() { RequestContextHolder context = getRequestContext(); IPage page = new Page(20); IState state = new State(0); state.setAction("/action"); IParameter param = new Parameter("name", "value", false, null, true); state.addParameter(param); page.addState(state); session.addPage(context, page); // Restore page IPage restored = session.getPage(context, 20); assertNotNull(restored); assertEquals(page, restored); } public void testPageRefresh() { RequestContextHolder context = getRequestContext(); // First page IPage page = new Page(20); IState state = new State(0); state.setAction("/action"); page.addState(state); session.addPage(context, page); IStateCache cache = (IStateCache) getMockRequest().getSession().getAttribute(Constants.STATE_CACHE_NAME); List<Integer> ids = cache.getPageIds(); assertEquals(1, ids.size()); // Second page page = new Page(21); state = new State(0); state.setAction("/action"); page.addState(state); page.setParentStateId("14-0-E3E5BA9F9AC0DEA35BBE14189510600E"); session.addPage(context, page); cache = (IStateCache) getMockRequest().getSession().getAttribute(Constants.STATE_CACHE_NAME); ids = cache.getPageIds(); assertEquals(2, ids.size()); // Simulate Page refresh getRequestContext().setCurrentPageId(20); // Third page page = new Page(22); // Same parent state id because a refresh has been performed page.setParentStateId("14-0-E3E5BA9F9AC0DEA35BBE14189510600E"); state = new State(0); state.setAction("/action"); page.addState(state); session.addPage(context, page); cache = (IStateCache) getMockRequest().getSession().getAttribute(Constants.STATE_CACHE_NAME); ids = cache.getPageIds(); assertEquals(2, ids.size()); } public void testAttributes() { RequestContextHolder context = super.getRequestContext(); String name = "attr"; String value = "value"; String result = session.getAttribute(context, name); assertNull(result); session.setAttribute(context, name, value); result = session.getAttribute(context, name); assertNotNull(result); assertEquals(value, result); session.removeAttribute(context, name); result = session.getAttribute(context, name); assertNull(result); } public void testTypedAttributes() { RequestContextHolder context = super.getRequestContext(); String name = "attr"; Test1Bean result = session.getAttribute(context, name, Test1Bean.class); assertNull(result); Test1Bean bean = new Test1Bean(); session.setAttribute(context, name, bean); Test1Bean res = session.getAttribute(context, name, Test1Bean.class); assertNotNull(res); assertEquals(bean, res); try { session.getAttribute(context, name, Test2Bean.class); fail(); } catch (IllegalArgumentException e) { } } public void testRemovePage() { RequestContextHolder context = getRequestContext(); IPage page = new Page(20); IState state = new State(0); state.setAction("/action"); IParameter param = new Parameter("name", "value", false, null, true); state.addParameter(param); page.addState(state); session.addPage(context, page); boolean result = session.removePage(context, 0); assertEquals(false, result); result = session.removePage(context, 20); assertEquals(true, result); } class Test1Bean { } class Test2Bean { } }