| /* |
| * 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 com.opensymphony.xwork2; |
| |
| import com.opensymphony.xwork2.util.ValueStack; |
| |
| import java.util.*; |
| |
| /** |
| * Unit test for {@link ActionSupport}. |
| * |
| * @author Claus Ibsen |
| */ |
| public class ActionSupportTest extends XWorkTestCase { |
| |
| private ActionSupport as; |
| private MyActionSupport mas; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| as = new ActionSupport(); |
| container.inject(as); |
| |
| ActionContext.getContext().setLocale(new Locale("da")); |
| |
| mas = new MyActionSupport(); |
| container.inject(mas); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| as = null; |
| } |
| |
| public void testNothingDoneOnActionSupport() throws Exception { |
| assertEquals(false, as.hasErrors()); |
| |
| assertNotNull(as.getActionErrors()); |
| assertEquals(0, as.getActionErrors().size()); |
| assertEquals(false, as.hasActionErrors()); |
| |
| assertNotNull(as.getActionMessages()); |
| assertEquals(0, as.getActionMessages().size()); |
| assertEquals(false, as.hasActionMessages()); |
| |
| assertNotNull(as.getFieldErrors()); |
| assertEquals(0, as.getFieldErrors().size()); |
| assertEquals(false, as.hasFieldErrors()); |
| |
| assertNull(as.getText(null)); |
| |
| try { |
| as.pause(null); |
| } catch (Exception e) { |
| fail("Should not fail"); |
| } |
| |
| assertEquals(Action.INPUT, as.input()); |
| assertEquals(Action.SUCCESS, as.execute()); |
| try { |
| as.clone(); |
| fail("Failure expected for clone()"); |
| } catch (CloneNotSupportedException e) { |
| // success! |
| } |
| |
| |
| assertNull(as.getText(null, (List) null)); |
| assertNull(as.getText(null, (String) null)); |
| assertNull(as.getText(null, (String[]) null)); |
| |
| assertNull(as.getText(null, (String) null, (List) null)); |
| assertNull(as.getText(null, (String) null, (String) null)); |
| assertNull(as.getText(null, (String) null, (String[]) null)); |
| |
| assertNull(as.getText(null, (String) null, (List) null, (ValueStack) null)); |
| assertNull(as.getText(null, (String) null, (String[]) null, (ValueStack) null)); |
| |
| assertNotNull(as.getLocale()); |
| assertEquals(ActionContext.getContext().getLocale(), as.getLocale()); |
| |
| assertNull(as.getTexts()); // can not find a bundle |
| assertEquals("not.in.bundle", as.getText("not.in.bundle")); |
| } |
| |
| public void testActionErrors() { |
| assertEquals(false, as.hasActionErrors()); |
| assertEquals(0, as.getActionErrors().size()); |
| as.addActionError("Damm"); |
| assertEquals(1, as.getActionErrors().size()); |
| assertEquals("Damm", as.getActionErrors().iterator().next()); |
| assertEquals(true, as.hasActionErrors()); |
| assertEquals(true, as.hasErrors()); |
| |
| as.clearErrorsAndMessages(); |
| assertEquals(false, as.hasActionErrors()); |
| assertEquals(false, as.hasErrors()); |
| } |
| |
| public void testActionMessages() { |
| assertEquals(false, as.hasActionMessages()); |
| assertEquals(0, as.getActionMessages().size()); |
| as.addActionMessage("Killroy was here"); |
| assertEquals(1, as.getActionMessages().size()); |
| assertEquals("Killroy was here", as.getActionMessages().iterator().next()); |
| assertEquals(true, as.hasActionMessages()); |
| |
| assertEquals(false, as.hasActionErrors()); // does not count as a error |
| assertEquals(false, as.hasErrors()); // does not count as a error |
| |
| as.clearErrorsAndMessages(); |
| assertEquals(false, as.hasActionMessages()); |
| assertEquals(false, as.hasErrors()); |
| } |
| |
| public void testFieldErrors() { |
| assertEquals(false, as.hasFieldErrors()); |
| assertEquals(0, as.getFieldErrors().size()); |
| as.addFieldError("username", "Admin is not allowed as username"); |
| List<String> errors = as.getFieldErrors().get("username"); |
| assertEquals(1, errors.size()); |
| assertEquals("Admin is not allowed as username", errors.get(0)); |
| |
| assertEquals(true, as.hasFieldErrors()); |
| assertEquals(true, as.hasErrors()); |
| |
| as.clearErrorsAndMessages(); |
| assertEquals(false, as.hasFieldErrors()); |
| assertEquals(false, as.hasErrors()); |
| } |
| |
| public void testLocale() { |
| Locale defLocale = Locale.getDefault(); |
| ActionContext.getContext().setLocale(null); |
| |
| // will never return null, if no locale is set then default is returned |
| assertNotNull(as.getLocale()); |
| assertEquals(defLocale, as.getLocale()); |
| |
| ActionContext.getContext().setLocale(Locale.ITALY); |
| assertEquals(Locale.ITALY, as.getLocale()); |
| |
| ActionContext.setContext(new ActionContext(new HashMap<String, Object>())); |
| assertEquals(defLocale, as.getLocale()); // ActionContext will create a new context, when it was set to null before |
| } |
| |
| public void testMyActionSupport() throws Exception { |
| assertEquals("santa", mas.execute()); |
| assertNotNull(mas.getTexts()); |
| |
| assertEquals(false, mas.hasActionMessages()); |
| mas.validate(); |
| assertEquals(true, mas.hasActionMessages()); |
| } |
| |
| public void testSimpleGetTexts() throws Exception { |
| checkGetTexts(mas); |
| } |
| |
| public void testSimpleGetTextsWithInjectedTextProvider() throws Exception { |
| ActionContext.getContext().setLocale(new Locale("da")); |
| MyActionSupport mas = new MyActionSupport(); |
| |
| TextProvider textProvider = container.getInstance(TextProvider.class, "system"); |
| |
| assertNotNull(textProvider); |
| |
| container.inject(mas); |
| |
| checkGetTexts(mas); |
| } |
| |
| private void checkGetTexts(MyActionSupport mas) { |
| assertEquals("Hello World", mas.getText("hello")); |
| assertEquals("not.in.bundle", mas.getText("not.in.bundle")); |
| |
| assertEquals("Hello World", mas.getText("hello", "this is default")); |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default")); |
| |
| List nullList = null; |
| assertEquals("Hello World", mas.getText("hello", nullList)); |
| |
| String[] nullStrings = null; |
| assertEquals("Hello World", mas.getText("hello", nullStrings)); |
| } |
| |
| public void testGetTextsWithArgs() throws Exception { |
| assertEquals("Hello World", mas.getText("hello", "this is default", "from me")); // no args in bundle |
| assertEquals("Hello World from me", mas.getText("hello.0", "this is default", "from me")); |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", "from me")); |
| assertEquals("this is default from me", mas.getText("not.in.bundle", "this is default {0}", "from me")); |
| |
| assertEquals("not.in.bundle", mas.getText("not.in.bundle")); |
| } |
| |
| public void testGetTextsWithListArgs() throws Exception { |
| List<Object> args = new ArrayList<>(); |
| args.add("Santa"); |
| args.add("loud"); |
| assertEquals("Hello World", mas.getText("hello", "this is default", args)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", "this is default", args)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", "this is default", args)); |
| |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", args)); |
| assertEquals("this is default Santa", mas.getText("not.in.bundle", "this is default {0}", args)); |
| assertEquals("this is default Santa speaking loud", mas.getText("not.in.bundle", "this is default {0} speaking {1}", args)); |
| |
| assertEquals("Hello World", mas.getText("hello", args)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", args)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", args)); |
| |
| assertEquals("not.in.bundle", mas.getText("not.in.bundle", args)); |
| |
| assertEquals("Hello World", mas.getText("hello", "this is default", (List) null)); |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", (List) null)); |
| } |
| |
| public void testGetTextsWithArrayArgs() throws Exception { |
| String[] args = {"Santa", "loud"}; |
| assertEquals("Hello World", mas.getText("hello", "this is default", args)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", "this is default", args)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", "this is default", args)); |
| |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", args)); |
| assertEquals("this is default Santa", mas.getText("not.in.bundle", "this is default {0}", args)); |
| assertEquals("this is default Santa speaking loud", mas.getText("not.in.bundle", "this is default {0} speaking {1}", args)); |
| |
| assertEquals("Hello World", mas.getText("hello", args)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", args)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", args)); |
| |
| assertEquals("not.in.bundle", mas.getText("not.in.bundle", args)); |
| |
| assertEquals("Hello World", mas.getText("hello", "this is default", (String[]) null)); |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", (String[]) null)); |
| } |
| |
| public void testGetTextsWithListAndStack() throws Exception { |
| ActionContext.getContext().setLocale(new Locale("da")); |
| MyActionSupport mas = container.inject(MyActionSupport.class); |
| |
| ValueStack stack = ActionContext.getContext().getValueStack(); |
| |
| List<Object> args = new ArrayList<>(); |
| args.add("Santa"); |
| args.add("loud"); |
| assertEquals("Hello World", mas.getText("hello", "this is default", args, stack)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", "this is default", args, stack)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", "this is default", args, stack)); |
| |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", args, stack)); |
| assertEquals("this is default Santa", mas.getText("not.in.bundle", "this is default {0}", args, stack)); |
| assertEquals("this is default Santa speaking loud", mas.getText("not.in.bundle", "this is default {0} speaking {1}", args, stack)); |
| } |
| |
| public void testGetTextsWithArrayAndStack() throws Exception { |
| ActionContext.getContext().setLocale(new Locale("da")); |
| MyActionSupport mas = container.inject(MyActionSupport.class); |
| |
| ValueStack stack = ActionContext.getContext().getValueStack(); |
| |
| String[] args = {"Santa", "loud"}; |
| assertEquals("Hello World", mas.getText("hello", "this is default", args, stack)); // no args in bundle |
| assertEquals("Hello World Santa", mas.getText("hello.0", "this is default", args, stack)); // only 1 arg in bundle |
| assertEquals("Hello World. This is Santa speaking loud", mas.getText("hello.1", "this is default", args, stack)); |
| |
| assertEquals("this is default", mas.getText("not.in.bundle", "this is default", args, stack)); |
| assertEquals("this is default Santa", mas.getText("not.in.bundle", "this is default {0}", args, stack)); |
| assertEquals("this is default Santa speaking loud", mas.getText("not.in.bundle", "this is default {0} speaking {1}", args, stack)); |
| } |
| |
| public void testGetBundle() throws Exception { |
| ResourceBundle rb = ResourceBundle.getBundle(MyActionSupport.class.getName(), new Locale("da")); |
| assertEquals(rb, mas.getTexts(MyActionSupport.class.getName())); |
| } |
| |
| public void testFormattingSupport() throws Exception { |
| ActionContext.getContext().getValueStack().push(mas); |
| |
| mas.setVal(234d); |
| |
| String formatted = mas.getFormatted("format.number", "val"); |
| |
| assertEquals("234,0", formatted); |
| } |
| |
| public void testFormattingSupportWithConversionError() throws Exception { |
| ActionContext.getContext().getConversionErrors().put("val", new String[]{"4567def"}); |
| ActionContext.getContext().setLocale(new Locale("da")); |
| MyActionSupport mas = new MyActionSupport(); |
| container.inject(mas); |
| ActionContext.getContext().getValueStack().push(mas); |
| |
| mas.setVal(234d); |
| |
| String formatted = mas.getFormatted("format.number", "val"); |
| |
| assertEquals("4567def", formatted); |
| } |
| |
| public static class MyActionSupport extends ActionSupport { |
| |
| private Double val; |
| |
| @Override |
| public String execute() throws Exception { |
| return "santa"; |
| } |
| |
| @Override |
| public void validate() { |
| super.validate(); // to have code coverage |
| addActionMessage("validation was called"); |
| } |
| |
| public Double getVal() { |
| return val; |
| } |
| |
| public void setVal(Double val) { |
| this.val = val; |
| } |
| } |
| |
| } |