| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.struts2.util; |
| |
| import com.opensymphony.xwork2.ActionContext; |
| import com.opensymphony.xwork2.util.ValueStack; |
| import org.apache.struts2.StrutsInternalTestCase; |
| import org.apache.struts2.TestAction; |
| import org.springframework.mock.web.MockHttpServletRequest; |
| import org.springframework.mock.web.MockHttpServletResponse; |
| import org.springframework.mock.web.MockRequestDispatcher; |
| |
| import javax.servlet.RequestDispatcher; |
| import javax.servlet.ServletRequest; |
| import javax.servlet.ServletResponse; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * Test case for StrutsUtil. |
| * |
| */ |
| public class StrutsUtilTest extends StrutsInternalTestCase { |
| |
| protected ValueStack stack = null; |
| protected InternalMockHttpServletRequest request = null; |
| protected MockHttpServletResponse response = null; |
| protected StrutsUtil strutsUtil = null; |
| |
| public void testBeanMethod() throws Exception { |
| Object o = strutsUtil.bean("org.apache.struts2.TestAction"); |
| assertNotNull(o); |
| assertTrue(o instanceof TestAction); |
| } |
| |
| public void testIsTrueMethod() throws Exception { |
| stack.push(new Object() { |
| public String getMyString() { |
| return "myString"; |
| } |
| public boolean getMyBoolean(boolean bool) { |
| return bool; |
| } |
| }); |
| assertTrue(strutsUtil.isTrue("myString == 'myString'")); |
| assertFalse(strutsUtil.isTrue("myString == 'myOtherString'")); |
| assertTrue(strutsUtil.isTrue("getMyBoolean(true)")); |
| assertFalse(strutsUtil.isTrue("getMyBoolean(false)")); |
| } |
| |
| public void testFindStringMethod() throws Exception { |
| stack.push(new Object() { |
| public String getMyString() { |
| return "myString"; |
| } |
| public boolean getMyBoolean(boolean bool) { |
| return bool; |
| } |
| }); |
| |
| assertEquals(strutsUtil.findString("myString"), "myString"); |
| assertNull(strutsUtil.findString("myOtherString")); |
| assertEquals(strutsUtil.findString("getMyBoolean(true)"), "true"); |
| } |
| |
| public void testIncludeMethod() throws Exception { |
| strutsUtil.include("/some/includedJspFile.jsp"); |
| |
| // with include, this must have been created and should not be null |
| assertNotNull(request.getDispatcher()); |
| // this must be true, indicating we actaully ask container to do an include |
| assertTrue(request.getDispatcher().included); |
| } |
| |
| |
| public void testUrlEncodeMethod() throws Exception { |
| assertEquals( |
| strutsUtil.urlEncode("http://www.opensymphony.com/action2/index.jsp?param1=value1"), |
| "http%3A%2F%2Fwww.opensymphony.com%2Faction2%2Findex.jsp%3Fparam1%3Dvalue1"); |
| } |
| |
| public void testBuildUrlMethod() throws Exception { |
| request.setContextPath("/myContextPath"); |
| assertEquals(strutsUtil.buildUrl("/someUrl?param1=value1"), "/myContextPath/someUrl?param1=value1"); |
| } |
| |
| |
| public void testFindValueMethod() throws Exception { |
| stack.push(new Object() { |
| public String getMyString() { |
| return "myString"; |
| } |
| public boolean getMyBoolean(boolean bool) { |
| return bool; |
| } |
| }); |
| Object obj1 = strutsUtil.findValue("myString", "java.lang.String"); |
| Object obj2 = strutsUtil.findValue("getMyBoolean(true)", "java.lang.Boolean"); |
| |
| assertNotNull(obj1); |
| assertNotNull(obj2); |
| assertTrue(obj1 instanceof String); |
| assertTrue(obj2 instanceof Boolean); |
| assertEquals(obj1, "myString"); |
| assertEquals(obj2, Boolean.TRUE); |
| } |
| |
| |
| |
| public void testGetTextMethod() throws Exception { |
| // this should be in xwork-messages.properties (included by default |
| // by LocalizedTextUtil |
| assertNotNull(strutsUtil.getText("xwork.error.action.execution")); |
| assertEquals(strutsUtil.getText("xwork.error.action.execution"), "Error during Action invocation"); |
| } |
| |
| |
| public void testGetContextMethod() throws Exception { |
| request.setContextPath("/myContext"); |
| assertEquals(strutsUtil.getContext(), "/myContext"); |
| } |
| |
| |
| public void testMakeSelectListMethod() throws Exception { |
| String[] selectedList = new String[] { "Car", "Airplane", "Bus" }; |
| List list = new ArrayList(); |
| list.add("Lorry"); |
| list.add("Car"); |
| list.add("Helicopter"); |
| |
| stack.getContext().put("mySelectedList", selectedList); |
| stack.getContext().put("myList", list); |
| |
| List listMade = strutsUtil.makeSelectList("#mySelectedList", "#myList", null, null); |
| |
| assertEquals(listMade.size(), 3); |
| assertEquals(((ListEntry)listMade.get(0)).getKey(), "Lorry"); |
| assertEquals(((ListEntry)listMade.get(0)).getValue(), "Lorry"); |
| assertEquals(((ListEntry)listMade.get(0)).getIsSelected(), false); |
| assertEquals(((ListEntry)listMade.get(1)).getKey(), "Car"); |
| assertEquals(((ListEntry)listMade.get(1)).getValue(), "Car"); |
| assertEquals(((ListEntry)listMade.get(1)).getIsSelected(), true); |
| assertEquals(((ListEntry)listMade.get(2)).getKey(), "Helicopter"); |
| assertEquals(((ListEntry)listMade.get(2)).getValue(), "Helicopter"); |
| assertEquals(((ListEntry)listMade.get(2)).getIsSelected(), false); |
| } |
| |
| public void testToInt() throws Exception { |
| assertEquals(strutsUtil.toInt(11l), 11); |
| } |
| |
| |
| public void testToLong() throws Exception { |
| assertEquals(strutsUtil.toLong(11), 11l); |
| } |
| |
| |
| public void testToString() throws Exception { |
| assertEquals(strutsUtil.toString(1), "1"); |
| assertEquals(strutsUtil.toString(11l), "11"); |
| } |
| |
| public void testTranslateVariables() throws Exception { |
| stack.push(new Object() { |
| public String getFoo() { |
| return "bar"; |
| } |
| }); |
| Object obj1 = strutsUtil.translateVariables("try: %{foo}"); |
| |
| assertNotNull(obj1); |
| assertTrue(obj1 instanceof String); |
| assertEquals(obj1, "try: bar"); |
| } |
| |
| // === Junit Hook |
| |
| protected void setUp() throws Exception { |
| super.setUp(); |
| stack = ActionContext.getContext().getValueStack(); |
| request = new InternalMockHttpServletRequest(); |
| response = new MockHttpServletResponse(); |
| strutsUtil = new StrutsUtil(stack, request, response); |
| } |
| |
| protected void tearDown() throws Exception { |
| stack = null; |
| request = null; |
| response = null; |
| strutsUtil = null; |
| super.tearDown(); |
| } |
| |
| |
| |
| // === internal class to assist in testing |
| |
| class InternalMockHttpServletRequest extends MockHttpServletRequest { |
| InternalMockRequestDispatcher dispatcher = null; |
| public RequestDispatcher getRequestDispatcher(String path) { |
| dispatcher = new InternalMockRequestDispatcher(path); |
| return dispatcher; |
| } |
| |
| public InternalMockRequestDispatcher getDispatcher() { |
| return dispatcher; |
| } |
| } |
| |
| class InternalMockRequestDispatcher extends MockRequestDispatcher { |
| private String url; |
| boolean included = false; |
| public InternalMockRequestDispatcher(String url) { |
| super(url); |
| this.url = url; |
| } |
| public void include(ServletRequest servletRequest, ServletResponse servletResponse) { |
| if (servletResponse instanceof MockHttpServletResponse) { |
| ((MockHttpServletResponse) servletResponse).setIncludedUrl(this.url); |
| } |
| included = true; |
| } |
| } |
| |
| } |