Return-Path: X-Original-To: apmail-struts-commits-archive@minotaur.apache.org Delivered-To: apmail-struts-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B0FE818F0D for ; Wed, 17 Jun 2015 21:09:10 +0000 (UTC) Received: (qmail 75762 invoked by uid 500); 17 Jun 2015 21:09:03 -0000 Delivered-To: apmail-struts-commits-archive@struts.apache.org Received: (qmail 75609 invoked by uid 500); 17 Jun 2015 21:09:03 -0000 Mailing-List: contact commits-help@struts.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@struts.apache.org Delivered-To: mailing list commits@struts.apache.org Received: (qmail 74618 invoked by uid 99); 17 Jun 2015 21:09:02 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Jun 2015 21:09:02 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 22EC5E00BA; Wed, 17 Jun 2015 21:09:02 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: lukaszlenart@apache.org To: commits@struts.apache.org Date: Wed, 17 Jun 2015 21:09:20 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [20/57] [partial] struts git commit: Merges xwork packages into struts http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/spring/SpringObjectFactoryTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/spring/SpringObjectFactoryTest.java b/core/src/test/java/com/opensymphony/xwork2/spring/SpringObjectFactoryTest.java new file mode 100644 index 0000000..6aa6f7b --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/spring/SpringObjectFactoryTest.java @@ -0,0 +1,375 @@ +package com.opensymphony.xwork2.spring; + +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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. + */ +/* + * Created on Mar 8, 2004 + */ + +import com.opensymphony.xwork2.*; +import com.opensymphony.xwork2.config.ConfigurationException; +import com.opensymphony.xwork2.config.entities.ActionConfig; +import com.opensymphony.xwork2.config.entities.InterceptorConfig; +import com.opensymphony.xwork2.config.entities.ResultConfig; +import com.opensymphony.xwork2.inject.ContainerBuilder; +import com.opensymphony.xwork2.interceptor.Interceptor; +import com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor; +import com.opensymphony.xwork2.interceptor.TimerInterceptor; +import com.opensymphony.xwork2.test.StubConfigurationProvider; +import com.opensymphony.xwork2.util.location.LocatableProperties; +import com.opensymphony.xwork2.validator.Validator; +import com.opensymphony.xwork2.validator.validators.ExpressionValidator; +import com.opensymphony.xwork2.validator.validators.RequiredStringValidator; +import org.springframework.aop.framework.Advised; +import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; +import org.springframework.aop.interceptor.DebugInterceptor; +import org.springframework.beans.BeansException; +import org.springframework.beans.MutablePropertyValues; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.support.StaticApplicationContext; + +import java.util.HashMap; +import java.util.Map; + +// TODO: Document properly + +/** + * @author Simon Stewart + */ +public class SpringObjectFactoryTest extends XWorkTestCase { + + StaticApplicationContext sac; + SpringObjectFactory objectFactory; + + + @Override + public void setUp() throws Exception { + super.setUp(); + + sac = new StaticApplicationContext(); + loadConfigurationProviders(new StubConfigurationProvider() { + + @Override + public void register(ContainerBuilder builder, + LocatableProperties props) throws ConfigurationException { + builder.factory(ObjectFactory.class, SpringObjectFactory.class); + } + + }); + + objectFactory = (SpringObjectFactory) container.getInstance(ObjectFactory.class); + objectFactory.setApplicationContext(sac); + objectFactory.setAlwaysRespectAutowireStrategy(false); + } + + @Override + public void tearDown() throws Exception { + sac = null; + objectFactory = null; + } + + public void testFallsBackToDefaultObjectFactoryActionSearching() throws Exception { + ActionConfig actionConfig = new ActionConfig.Builder("foo", "bar", ModelDrivenAction.class.getName()).build(); + + Object action = objectFactory.buildBean(actionConfig.getClassName(), null); + + assertEquals(ModelDrivenAction.class, action.getClass()); + } + + public void testFallsBackToDefaultObjectFactoryInterceptorBuilding() throws Exception { + InterceptorConfig iConfig = new InterceptorConfig.Builder("timer", ModelDrivenInterceptor.class.getName()).build(); + + Interceptor interceptor = objectFactory.buildInterceptor(iConfig, new HashMap()); + + assertEquals(ModelDrivenInterceptor.class, interceptor.getClass()); + } + + public void testFallsBackToDefaultObjectFactoryResultBuilding() throws Exception { + ResultConfig rConfig = new ResultConfig.Builder(Action.SUCCESS, ActionChainResult.class.getName()).build(); + Result result = objectFactory.buildResult(rConfig, ActionContext.getContext().getContextMap()); + + assertEquals(ActionChainResult.class, result.getClass()); + } + + public void testFallsBackToDefaultObjectFactoryValidatorBuilding() throws Exception { + Map extraContext = new HashMap<>(); + Validator validator = objectFactory.buildValidator(RequiredStringValidator.class.getName(), new HashMap(), extraContext); + + assertEquals(RequiredStringValidator.class, validator.getClass()); + } + + public void testObtainActionBySpringName() throws Exception { + sac.registerPrototype("simple-action", SimpleAction.class, new MutablePropertyValues()); + + ActionConfig actionConfig = new ActionConfig.Builder("fs", "jim", "simple-action").build(); + Object action = objectFactory.buildBean(actionConfig.getClassName(), null); + + assertEquals(SimpleAction.class, action.getClass()); + } + + public void testObtainInterceptorBySpringName() throws Exception { + sac.registerSingleton("timer-interceptor", TimerInterceptor.class, new MutablePropertyValues()); + + InterceptorConfig iConfig = new InterceptorConfig.Builder("timer", "timer-interceptor").build(); + Interceptor interceptor = objectFactory.buildInterceptor(iConfig, new HashMap()); + + assertEquals(TimerInterceptor.class, interceptor.getClass()); + } + + public void testObtainResultBySpringName() throws Exception { + // TODO: Does this need to be a prototype? + sac.registerPrototype("chaining-result", ActionChainResult.class, new MutablePropertyValues()); + + ResultConfig rConfig = new ResultConfig.Builder(Action.SUCCESS, "chaining-result").build(); + Result result = objectFactory.buildResult(rConfig, ActionContext.getContext().getContextMap()); + + assertEquals(ActionChainResult.class, result.getClass()); + } + + public void testObtainValidatorBySpringName() throws Exception { + sac.registerPrototype("expression-validator", ExpressionValidator.class, new MutablePropertyValues()); + + Map extraContext = new HashMap<>(); + Validator validator = objectFactory.buildValidator("expression-validator", new HashMap(), extraContext); + + assertEquals(ExpressionValidator.class, validator.getClass()); + } + + public void testShouldAutowireObjectsObtainedFromTheObjectFactoryByFullClassName() throws Exception { + sac.getBeanFactory().registerSingleton("bean", new TestBean()); + TestBean bean = (TestBean) sac.getBean("bean"); + + SimpleAction action = (SimpleAction) objectFactory.buildBean(SimpleAction.class.getName(), null); + + assertEquals(bean, action.getBean()); + } + + public void testShouldGiveReferenceToAppContextIfBeanIsApplicationContextAwareAndNotInstantiatedViaSpring() throws Exception { + Foo foo = (Foo) objectFactory.buildBean(Foo.class.getName(), null); + + assertTrue("Expected app context to have been set", foo.isApplicationContextSet()); + } + + public static class Foo implements ApplicationContextAware { + boolean applicationContextSet = false; + + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + applicationContextSet = true; + } + + public boolean isApplicationContextSet() { + return applicationContextSet; + } + } + + public void testShouldAutowireObjectsObtainedFromTheObjectFactoryByClass() throws Exception { + sac.getBeanFactory().registerSingleton("bean", new TestBean()); + TestBean bean = (TestBean) sac.getBean("bean"); + + SimpleAction action = (SimpleAction) objectFactory.buildBean(SimpleAction.class, null); + + assertEquals(bean, action.getBean()); + } + + public void testShouldGiveReferenceToAppContextIfBeanIsLoadedByClassApplicationContextAwareAndNotInstantiatedViaSpring() throws Exception { + Foo foo = (Foo) objectFactory.buildBean(Foo.class, null); + + assertTrue("Expected app context to have been set", foo.isApplicationContextSet()); + } + + public void testLookingUpAClassInstanceDelegatesToSpring() throws Exception { + sac.registerPrototype("simple-action", SimpleAction.class, new MutablePropertyValues()); + + Class clazz = objectFactory.getClassInstance("simple-action"); + + assertNotNull("Nothing returned", clazz); + assertEquals("Expected to have instance of SimpleAction returned", SimpleAction.class, clazz); + } + + public void testLookingUpAClassInstanceFallsBackToTheDefaultObjectFactoryIfSpringBeanNotFound() throws Exception { + Class clazz = objectFactory.getClassInstance(SimpleAction.class.getName()); + + assertNotNull("Nothing returned", clazz); + assertEquals("Expected to have instance of SimpleAction returned", SimpleAction.class, clazz); + } + + public void testSetAutowireStrategy() throws Exception { + assertEquals(objectFactory.getAutowireStrategy(), AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); + + objectFactory.setAutowireStrategy(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); + + sac.getBeanFactory().registerSingleton("bean", new TestBean()); + TestBean bean = (TestBean) sac.getBean("bean"); + + sac.registerPrototype("simple-action", SimpleAction.class, new MutablePropertyValues()); + + ActionConfig actionConfig = new ActionConfig.Builder("jim", "bob", "simple-action").build(); + SimpleAction simpleAction = (SimpleAction) objectFactory.buildBean(actionConfig.getClassName(), null); + objectFactory.autoWireBean(simpleAction); + assertEquals(simpleAction.getBean(), bean); + } + + public void testShouldUseConstructorBasedInjectionWhenCreatingABeanFromAClassName() throws Exception { + SpringObjectFactory factory = (SpringObjectFactory) objectFactory; + objectFactory.setAlwaysRespectAutowireStrategy(false); + sac.registerSingleton("actionBean", SimpleAction.class, new MutablePropertyValues()); + + ConstructorBean bean = (ConstructorBean) factory.buildBean(ConstructorBean.class, null); + + assertNotNull("Bean should not be null", bean); + assertNotNull("Action should have been added via DI", bean.getAction()); + } + + public void testShouldUseAutowireStrategyWhenCreatingABeanFromAClassName_constructor() throws Exception { + objectFactory.setAlwaysRespectAutowireStrategy(true); + objectFactory.setAutowireStrategy(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR); + sac.registerSingleton("actionBean", SimpleAction.class, new MutablePropertyValues()); + + ConstructorBean bean = (ConstructorBean) objectFactory.buildBean(ConstructorBean.class, null); + + assertNotNull("Bean should not be null", bean); + assertNotNull("Action should have been added via DI", bean.getAction()); + } + + public void testShouldUseAutowireStrategyWhenCreatingABeanFromAClassName_setterByType() throws Exception { + objectFactory.setAlwaysRespectAutowireStrategy(true); + + objectFactory.setAutowireStrategy(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); + sac.registerSingleton("actionBean", SimpleAction.class, new MutablePropertyValues()); + + SetterByTypeBean bean = (SetterByTypeBean) objectFactory.buildBean(SetterByTypeBean.class, null); + + assertNotNull("Bean should not be null", bean); + assertNotNull("Action should have been added via DI", bean.getAction()); + } + + public void testShouldUseAutowireStrategyWhenCreatingABeanFromAClassName_setterByName() throws Exception { + objectFactory.setAlwaysRespectAutowireStrategy(true); + + objectFactory.setAutowireStrategy(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); + sac.registerSingleton("actionBean", SimpleAction.class, new MutablePropertyValues()); + + SetterByNameBean bean = (SetterByNameBean) objectFactory.buildBean(SetterByNameBean.class, null); + + assertNotNull("Bean should not be null", bean); + assertNotNull("Action should have been added via DI", bean.getActionBean()); + } + + public void testFallBackToDefaultObjectFactoryWhenTheCConstructorDIIsAmbiguous() throws Exception { + objectFactory.setAlwaysRespectAutowireStrategy(true); + sac.registerSingleton("firstActionBean", SimpleAction.class, new MutablePropertyValues()); + sac.registerSingleton("secondActionBean", SimpleAction.class, new MutablePropertyValues()); + + ConstructorBean bean = (ConstructorBean) objectFactory.buildBean(ConstructorBean.class, null); + + assertNotNull("Bean should have been created using default constructor", bean); + assertNull("Not expecting this to have been set", bean.getAction()); + } + + public void testObjectFactoryUsesSpringObjectFactoryToCreateActions() throws Exception { + sac.registerSingleton("actionBean", SimpleAction.class, new MutablePropertyValues()); + ActionConfig actionConfig = new ActionConfig.Builder("as", "as", ConstructorAction.class.getName()).build(); + + ConstructorAction action = (ConstructorAction) objectFactory.buildBean(actionConfig.getClassName(), null); + + assertNotNull("Bean should not be null", action); + assertNotNull("Action should have been added via DI", action.getAction()); + } + + public void testShouldUseApplicationContextToApplyAspectsToGeneratedBeans() throws Exception { + sac.registerSingleton("debugInterceptor", DebugInterceptor.class, new MutablePropertyValues()); + + MutablePropertyValues values = new MutablePropertyValues(); + values.addPropertyValue("beanNames", new String[]{"*Action"}); + values.addPropertyValue("interceptorNames", new String[]{"debugInterceptor"}); + sac.registerSingleton("proxyFactory", BeanNameAutoProxyCreator.class, values); + + sac.refresh(); + + ActionConfig actionConfig = new ActionConfig.Builder("", "", SimpleAction.class.getName()).build(); + Action action = (Action) objectFactory.buildBean(actionConfig.getClassName(), null); + + assertNotNull("Bean should not be null", action); + System.out.println("Action class is: " + action.getClass().getName()); + assertTrue("Action should have been advised", action instanceof Advised); + } + + public static class ConstructorBean { + private SimpleAction action; + + public ConstructorBean() { + // Empty constructor + } + + public ConstructorBean(SimpleAction action) { + this.action = action; + } + + public SimpleAction getAction() { + return action; + } + } + + public static class SetterByNameBean { + private SimpleAction action; + + public SetterByNameBean() { + // Empty constructor + } + + public SimpleAction getActionBean() { + return action; + } + + public void setActionBean(SimpleAction action) { + this.action = action; + } + } + + public static class SetterByTypeBean { + private SimpleAction action; + + public SetterByTypeBean() { + // Empty constructor + } + + public SimpleAction getAction() { + return action; + } + + public void setAction(SimpleAction action) { + this.action = action; + } + } + + public static class ConstructorAction implements Action { + private SimpleAction action; + + public ConstructorAction(SimpleAction action) { + this.action = action; + } + + public String execute() throws Exception { + return SUCCESS; + } + + public SimpleAction getAction() { + return action; + } + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/spring/SpringResult.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/spring/SpringResult.java b/core/src/test/java/com/opensymphony/xwork2/spring/SpringResult.java new file mode 100644 index 0000000..930152e --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/spring/SpringResult.java @@ -0,0 +1,36 @@ +package com.opensymphony.xwork2.spring; + +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.Result; + +public class SpringResult implements Result { + + private static final long serialVersionUID = -2877126768401198951L; + + private boolean initialize = false; + + // this String should be populated by spring + private String stringParameter; + + public void initialize() { + // this method should be called by spring + this.initialize = true; + } + + public void execute(ActionInvocation invocation) throws Exception { + // intetionally empty + } + + public void setStringParameter(String stringParameter) { + this.stringParameter = stringParameter; + } + + public String getStringParameter() { + return this.stringParameter; + } + + public boolean isInitialize() { + return this.initialize; + } +} + http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware.java b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware.java new file mode 100644 index 0000000..fd63584 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware.java @@ -0,0 +1,48 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.conversion.annotations.Conversion; +import com.opensymphony.xwork2.conversion.annotations.TypeConversion; +import com.opensymphony.xwork2.util.Bar; +import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; +import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; +import com.opensymphony.xwork2.validator.annotations.Validation; + + +/** + * Implemented by SimpleAction3 and AnnotationTestBean2 to test class hierarchy traversal. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +@Validation() +@Conversion() +public interface AnnotationDataAware { + + void setBarObj(Bar b); + + @TypeConversion( + converter = "com.opensymphony.xwork2.conversion.impl.FooBarConverter" + ) + Bar getBarObj(); + + @RequiredFieldValidator(message = "You must enter a value for data.") + @RequiredStringValidator(message = "You must enter a value for data.") + void setData(String data); + + String getData(); +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware2.java b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware2.java new file mode 100644 index 0000000..b075fcd --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationDataAware2.java @@ -0,0 +1,33 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator; + + +/** + * Used to test hierarchy traversal for interfaces. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +public interface AnnotationDataAware2 extends AnnotationDataAware { + + @RequiredStringValidator(message = "You must enter a value for data.") + public void setBling(String bling); + + public String getBling(); +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/AnnotationTestBean2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/AnnotationTestBean2.java b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationTestBean2.java new file mode 100644 index 0000000..3a1396b --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationTestBean2.java @@ -0,0 +1,65 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.AnnotatedTestBean; +import com.opensymphony.xwork2.conversion.annotations.Conversion; +import com.opensymphony.xwork2.conversion.annotations.TypeConversion; +import com.opensymphony.xwork2.util.Bar; +import com.opensymphony.xwork2.util.Cat; + + +/** + * Extend TestBean to test class hierarchy traversal. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +@Conversion() +public class AnnotationTestBean2 extends AnnotatedTestBean implements AnnotationDataAware { + + private Bar bar; + private String data; + private Cat cat; + + + public void setBarObj(Bar b) { + bar = b; + } + + public Bar getBarObj() { + return bar; + } + + public void setData(String data) { + this.data = data; + } + + public String getData() { + return data; + } + + public Cat getCat() { + return cat; + } + + @TypeConversion( + key = "cat", converter = "com.opensymphony.xwork2.conversion.impl.FooBarConverter" + ) + public void setCat(Cat cat) { + this.cat = cat; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUser.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUser.java b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUser.java new file mode 100644 index 0000000..be2f863 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUser.java @@ -0,0 +1,107 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.conversion.annotations.ConversionRule; +import com.opensymphony.xwork2.conversion.annotations.TypeConversion; +import com.opensymphony.xwork2.util.KeyProperty; +import com.opensymphony.xwork2.validator.annotations.*; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + + +/** + * Test bean. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +@Validation( + validations = @Validations( + expressions = { + @ExpressionValidator(expression = "email.startsWith('mark')", message = "Email does not start with mark"), + @ExpressionValidator(expression = "email2.startsWith('mark')", message = "Email2 does not start with mark") + } + ) +) +public class AnnotationUser implements AnnotationUserMarker { + + private Collection collection; + private List list; + private Map map; + private String email; + private String email2; + private String name; + + + public void setCollection(Collection collection) { + this.collection = collection; + } + + public Collection getCollection() { + return collection; + } + + @EmailValidator(shortCircuit = true, message = "Not a valid e-mail.") + @FieldExpressionValidator(expression = "email.endsWith('mycompany.com')", message = "Email not from the right company.") + public void setEmail(String email) { + this.email = email; + } + + public String getEmail() { + return email; + } + + @EmailValidator(message = "Not a valid e-mail2.") + @FieldExpressionValidator(expression = "email2.endsWith('mycompany.com')", message = "Email2 not from the right company.") + public void setEmail2(String email) { + email2 = email; + } + + public String getEmail2() { + return email2; + } + + public void setList(List l) { + list = l; + } + + @KeyProperty( value = "name") + @TypeConversion( converter = "java.lang.String", rule = ConversionRule.COLLECTION) + public List getList() { + return list; + } + + @TypeConversion( converter = "java.lang.String", rule = ConversionRule.MAP) + public void setMap(Map m) { + map = m; + } + + public Map getMap() { + return map; + } + + @RequiredFieldValidator(key = "name.key", message = "You must enter a value for name.") + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUserMarker.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUserMarker.java b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUserMarker.java new file mode 100644 index 0000000..e0d6b4d --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/AnnotationUserMarker.java @@ -0,0 +1,41 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.validator.annotations.ExpressionValidator; +import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; +import com.opensymphony.xwork2.validator.annotations.Validation; +import com.opensymphony.xwork2.validator.annotations.Validations; + +/** + * Marker interface to help test hierarchy traversal. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +@Validation( + validations = @Validations( + requiredFields = { + @RequiredFieldValidator(fieldName = "email", shortCircuit = true, message = "You must enter a value for email."), + @RequiredFieldValidator(fieldName = "email2", shortCircuit = true, message = "You must enter a value for email2.") + }, + expressions = { + @ExpressionValidator(shortCircuit = true, expression = "email.equals(email2)", message = "Email not the same as email2" ) + } + ) +) +public interface AnnotationUserMarker { +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/DataAware.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/DataAware.java b/core/src/test/java/com/opensymphony/xwork2/test/DataAware.java new file mode 100644 index 0000000..5a5de5e --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/DataAware.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.util.Bar; + + +/** + * Implemented by SimpleAction3 and TestBean2 to test class hierarchy traversal. + * + * @author Mark Woon + */ +public interface DataAware { + + void setBarObj(Bar b); + + Bar getBarObj(); + + void setData(String data); + + String getData(); +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/DataAware2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/DataAware2.java b/core/src/test/java/com/opensymphony/xwork2/test/DataAware2.java new file mode 100644 index 0000000..4a65fe0 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/DataAware2.java @@ -0,0 +1,29 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + + +/** + * Used to test hierarchy traversal for interfaces. + * + * @author Mark Woon + */ +public interface DataAware2 extends DataAware { + + public void setBling(String bling); + + public String getBling(); +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/Equidae.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/Equidae.java b/core/src/test/java/com/opensymphony/xwork2/test/Equidae.java new file mode 100644 index 0000000..e004875 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/Equidae.java @@ -0,0 +1,52 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + + +/** + * @author Mark Woon + */ +public class Equidae { + + private String cow; + private String donkey; + private String horse; + + + public void setCow(String cow) { + this.cow = cow; + } + + public String getCow() { + return cow; + } + + public void setDonkey(String donkey) { + this.donkey = donkey; + } + + public String getDonkey() { + return donkey; + } + + public void setHorse(String horse) { + this.horse = horse; + } + + public String getHorse() { + return horse; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java new file mode 100644 index 0000000..5c21e08 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java @@ -0,0 +1,38 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.ModelDrivenAction; + + +/** + * Extend ModelDrivenAction to test class hierarchy traversal. + * + * @author Mark Woon + */ +public class ModelDrivenAction2 extends ModelDrivenAction { + + private TestBean2 model = new TestBean2(); + + + /** + * @return the model to be pushed onto the ValueStack after the Action itself + */ + @Override + public Object getModel() { + return model; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java new file mode 100644 index 0000000..038e2ee --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java @@ -0,0 +1,39 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.ModelDrivenAnnotationAction; + + +/** + * Extend ModelDrivenAction to test class hierarchy traversal. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +public class ModelDrivenAnnotationAction2 extends ModelDrivenAnnotationAction { + + private AnnotationTestBean2 model = new AnnotationTestBean2(); + + + /** + * @return the model to be pushed onto the ValueStack after the Action itself + */ + @Override + public Object getModel() { + return model; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java new file mode 100644 index 0000000..dea7539 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java @@ -0,0 +1,39 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.SimpleAction; + + +/** + * SimpleAction2 + * + * @author Jason Carreira + * Created Jun 14, 2003 9:51:12 PM + */ +public class SimpleAction2 extends SimpleAction { + + private int count; + + + public void setCount(int count) { + this.count = count; + } + + public int getCount() { + return count; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java new file mode 100644 index 0000000..ba060ad --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java @@ -0,0 +1,48 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.SimpleAction; +import com.opensymphony.xwork2.util.Bar; + + +/** + * Extend SimpleAction to test class hierarchy traversal. + * + * @author Mark Woon + */ +public class SimpleAction3 extends SimpleAction implements DataAware { + + private Bar bar; + private String data; + + + public void setBarObj(Bar b) { + bar = b; + } + + public Bar getBarObj() { + return bar; + } + + public void setData(String data) { + this.data = data; + } + + public String getData() { + return data; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java new file mode 100644 index 0000000..8eb3c2d --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java @@ -0,0 +1,42 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.SimpleAnnotationAction; +import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator; +import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator; + +/** + * SimpleAction2 + * + * @author Jason Carreira + * @author Rainer Hermanns + * Created Jun 14, 2003 9:51:12 PM + */ +public class SimpleAnnotationAction2 extends SimpleAnnotationAction { + + private int count; + + @RequiredFieldValidator(message = "You must enter a value for count.") + @IntRangeFieldValidator(min = "0", max = "5", message = "count must be between ${min} and ${max}, current value is ${count}.") + public void setCount(int count) { + this.count = count; + } + + public int getCount() { + return count; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java new file mode 100644 index 0000000..85e8438 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java @@ -0,0 +1,49 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.SimpleAnnotationAction; +import com.opensymphony.xwork2.util.Bar; + + +/** + * Extend SimpleAction to test class hierarchy traversal. + * + * @author Mark Woon + * @author Rainer Hermanns + */ +public class SimpleAnnotationAction3 extends SimpleAnnotationAction implements AnnotationDataAware { + + private Bar bar; + private String data; + + + public void setBarObj(Bar b) { + bar = b; + } + + public Bar getBarObj() { + return bar; + } + + public void setData(String data) { + this.data = data; + } + + public String getData() { + return data; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/TestBean2.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/TestBean2.java b/core/src/test/java/com/opensymphony/xwork2/test/TestBean2.java new file mode 100644 index 0000000..89e2a04 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/TestBean2.java @@ -0,0 +1,58 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import com.opensymphony.xwork2.TestBean; +import com.opensymphony.xwork2.util.Bar; +import com.opensymphony.xwork2.util.Cat; + + +/** + * Extend TestBean to test class hierarchy traversal. + * + * @author Mark Woon + */ +public class TestBean2 extends TestBean implements DataAware { + + private Bar bar; + private String data; + private Cat cat; + + + public void setBarObj(Bar b) { + bar = b; + } + + public Bar getBarObj() { + return bar; + } + + public void setData(String data) { + this.data = data; + } + + public String getData() { + return data; + } + + public Cat getCat() { + return cat; + } + + public void setCat(Cat cat) { + this.cat = cat; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/User.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/User.java b/core/src/test/java/com/opensymphony/xwork2/test/User.java new file mode 100644 index 0000000..ca72197 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/User.java @@ -0,0 +1,85 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + + +/** + * Test bean. + * + * @author Mark Woon + */ +public class User implements UserMarker { + + private Collection collection; + private List list; + private Map map; + private String email; + private String email2; + private String name; + + + public void setCollection(Collection collection) { + this.collection = collection; + } + + public Collection getCollection() { + return collection; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getEmail() { + return email; + } + + public void setEmail2(String email) { + email2 = email; + } + + public String getEmail2() { + return email2; + } + + public void setList(List l) { + list = l; + } + + public List getList() { + return list; + } + + public void setMap(Map m) { + map = m; + } + + public Map getMap() { + return map; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/test/UserMarker.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/test/UserMarker.java b/core/src/test/java/com/opensymphony/xwork2/test/UserMarker.java new file mode 100644 index 0000000..26818b2 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/test/UserMarker.java @@ -0,0 +1,25 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.test; + + +/** + * Marker interface to help test hierarchy traversal. + * + * @author Mark Woon + */ +public interface UserMarker { +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/AnnotatedCat.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/AnnotatedCat.java b/core/src/test/java/com/opensymphony/xwork2/util/AnnotatedCat.java new file mode 100644 index 0000000..5733159 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/AnnotatedCat.java @@ -0,0 +1,67 @@ +/* + * Copyright 2002-2006,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.conversion.annotations.Conversion; +import com.opensymphony.xwork2.conversion.annotations.TypeConversion; + +import java.util.List; + + +/** + * @author Pat Lightbody + * @author $Author$ + * @author Rainer Hermanns + * @version $Revision$ + */ +@Conversion() +public class AnnotatedCat { + + public static final String SCIENTIFIC_NAME = "Feline"; + + + Foo foo; + List kittens; + String name; + + + public void setFoo(Foo foo) { + this.foo = foo; + } + + public Foo getFoo() { + return foo; + } + + public void setKittens(List kittens) { + this.kittens = kittens; + } + + @TypeConversion( + key = "kittens", converter = "com.opensymphony.xwork2.util.Cat" + ) + public List getKittens() { + return kittens; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java b/core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java new file mode 100644 index 0000000..e59abe6 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/AnnotationUtilsTest.java @@ -0,0 +1,73 @@ +package com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.util.annotation.Dummy2Class; +import com.opensymphony.xwork2.util.annotation.DummyClass; +import com.opensymphony.xwork2.util.annotation.DummyClassExt; +import com.opensymphony.xwork2.util.annotation.MyAnnotation; +import com.opensymphony.xwork2.util.annotation.MyAnnotation2; +import junit.framework.TestCase; + +import java.lang.reflect.AnnotatedElement; +import java.util.Collection; + +/** + * @author Dan Oxlade, dan d0t oxlade at gmail d0t c0m + */ +public class AnnotationUtilsTest extends TestCase { + + @SuppressWarnings("unchecked") + public void testIsAnnotatedByWithoutAnnotationArgsReturnsFalse() throws Exception { + assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class)); + assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"))); + } + + @SuppressWarnings("unchecked") + public void testIsAnnotatedByWithSingleAnnotationArgMatchingReturnsTrue() throws Exception { + assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class)); + } + + @SuppressWarnings("unchecked") + public void testIsAnnotatedByWithMultiAnnotationArgMatchingReturnsTrue() throws Exception { + assertFalse(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class)); + assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), MyAnnotation.class, Deprecated.class)); + assertTrue(AnnotationUtils.isAnnotatedBy(DummyClass.class.getMethod("methodWithAnnotation"), Deprecated.class, MyAnnotation.class)); + } + + @SuppressWarnings("unchecked") + public void testGetAnnotedMethodsWithoutAnnotationArgs() throws Exception { + Collection ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class); + assertTrue(ans.size() == 1); + assertEquals(ans.iterator().next(), DummyClass.class.getMethod("methodWithAnnotation")); + } + + @SuppressWarnings("unchecked") + public void testGetAnnotatedMethodsWithAnnotationArgs() throws Exception { + Collection ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, Deprecated.class); + assertTrue(ans.isEmpty()); + + ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, Deprecated.class, MyAnnotation.class); + assertEquals(1, ans.size()); + + ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, MyAnnotation.class); + assertEquals(1, ans.size()); + + ans = AnnotationUtils.getAnnotatedMethods(DummyClass.class, MyAnnotation.class, MyAnnotation2.class); + assertEquals(1, ans.size()); + + ans = AnnotationUtils.getAnnotatedMethods(DummyClassExt.class, MyAnnotation.class, MyAnnotation2.class); + assertEquals(2, ans.size()); + } + + public void testFindAnnotationOnClass() { + MyAnnotation a1 = AnnotationUtils.findAnnotation(DummyClass.class, MyAnnotation.class); + assertNotNull(a1); + assertEquals("class-test", a1.value()); + } + + public void testFindAnnotationOnPackage() { + MyAnnotation ns = AnnotationUtils.findAnnotation(Dummy2Class.class, MyAnnotation.class); + assertNotNull(ns); + assertEquals("package-test", ns.value()); + } + +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/Bar.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Bar.java b/core/src/test/java/com/opensymphony/xwork2/util/Bar.java new file mode 100644 index 0000000..fbddfab --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/Bar.java @@ -0,0 +1,61 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.ActionSupport; + + +/** + * @author Pat Lightbody + * @author $Author$ + * @version $Revision$ + */ +public class Bar extends ActionSupport { + + Long id; + String title; + int somethingElse; + + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return this.id; + } + + public void setSomethingElse(int somethingElse) { + this.somethingElse = somethingElse; + } + + public int getSomethingElse() { + return somethingElse; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + @Override + public String toString() { + return getTitle() + ":" + getSomethingElse(); + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/BarJunior.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/BarJunior.java b/core/src/test/java/com/opensymphony/xwork2/util/BarJunior.java new file mode 100644 index 0000000..5e563c7 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/BarJunior.java @@ -0,0 +1,4 @@ +package com.opensymphony.xwork2.util; + +public class BarJunior extends Bar { +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/Cat.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Cat.java b/core/src/test/java/com/opensymphony/xwork2/util/Cat.java new file mode 100644 index 0000000..cfb1b50 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/Cat.java @@ -0,0 +1,58 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import java.util.List; + + +/** + * @author Pat Lightbody + * @author $Author$ + * @version $Revision$ + */ +public class Cat { + + public static final String SCIENTIFIC_NAME = "Feline"; + + Foo foo; + List kittens; + String name; + + + public void setFoo(Foo foo) { + this.foo = foo; + } + + public Foo getFoo() { + return foo; + } + + public void setKittens(List kittens) { + this.kittens = kittens; + } + + public List getKittens() { + return kittens; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/ClassLoaderUtilTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/ClassLoaderUtilTest.java b/core/src/test/java/com/opensymphony/xwork2/util/ClassLoaderUtilTest.java new file mode 100644 index 0000000..2439bf3 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/ClassLoaderUtilTest.java @@ -0,0 +1,124 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import junit.framework.TestCase; + +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.Iterator; + +public class ClassLoaderUtilTest extends TestCase { + + public void testGetResources() throws IOException { + Iterator i = ClassLoaderUtil.getResources("xwork-sample.xml", ClassLoaderUtilTest.class, false); + assertNotNull(i); + + assertTrue(i.hasNext()); + URL url = i.next(); + assertTrue(url.toString().endsWith("xwork-sample.xml")); + assertTrue(!i.hasNext()); + } + + public void testGetResources_Multiple() throws IOException { + Iterator i = ClassLoaderUtil.getResources("xwork-1.0.dtd", ClassLoaderUtilTest.class, false); + assertNotNull(i); + + assertTrue(i.hasNext()); + URL url = i.next(); + assertTrue(url.toString().endsWith("xwork-1.0.dtd")); + url = i.next(); + assertTrue(url.toString().endsWith("xwork-1.0.dtd")); + assertTrue(!i.hasNext()); + } + + public void testGetResources_Aggregate() throws IOException { + Iterator i = ClassLoaderUtil.getResources("xwork-1.0.dtd", ClassLoaderUtilTest.class, true); + assertNotNull(i); + + assertTrue(i.hasNext()); + URL url = i.next(); + assertTrue(url.toString().endsWith("xwork-1.0.dtd")); + url = i.next(); + assertTrue(url.toString().endsWith("xwork-1.0.dtd")); + assertTrue(!i.hasNext()); + } + + public void testGetResources_None() throws IOException { + Iterator i = ClassLoaderUtil.getResources("asdfasdf.html", ClassLoaderUtilTest.class, false); + assertNotNull(i); + + assertTrue(!i.hasNext()); + } + + public void testGetResource() { + URL url = ClassLoaderUtil.getResource("xwork-sample.xml", ClassLoaderUtilTest.class); + assertNotNull(url); + + assertTrue(url.toString().endsWith("xwork-sample.xml")); + } + + public void testGetResource_None() { + URL url = ClassLoaderUtil.getResource("asf.xml", ClassLoaderUtilTest.class); + assertNull(url); + } + + public void testAggregateIterator() { + ClassLoaderUtil.AggregateIterator aggr = new ClassLoaderUtil.AggregateIterator<>(); + + Enumeration en1 = new Enumeration() { + private Iterator itt = Arrays.asList("str1", "str1", "str3", "str1").iterator(); + public boolean hasMoreElements() { + return itt.hasNext(); + } + + public String nextElement() { + return itt.next(); + } + }; + + Enumeration en2 = new Enumeration() { + private Iterator itt = Arrays.asList("str4", "str5").iterator(); + public boolean hasMoreElements() { + return itt.hasNext(); + } + + public String nextElement() { + return itt.next(); + } + }; + + + aggr.addEnumeration(en1); + aggr.addEnumeration(en2); + + assertTrue(aggr.hasNext()); + assertEquals("str1", aggr.next()); + + assertTrue(aggr.hasNext()); + assertEquals("str3", aggr.next()); + + assertTrue(aggr.hasNext()); + assertEquals("str4", aggr.next()); + + assertTrue(aggr.hasNext()); + assertEquals("str5", aggr.next()); + + assertFalse(aggr.hasNext()); + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java b/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java new file mode 100644 index 0000000..616dcf3 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/ClassPathFinderTest.java @@ -0,0 +1,54 @@ +/* + * $Id$ + * + * Copyright 2003-2004 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.XWorkTestCase; + +import java.util.Vector; + +public class ClassPathFinderTest extends XWorkTestCase { + + public void testFinder() { + ClassPathFinder finder = new ClassPathFinder(); + finder.setPattern("**/xwork-test-wildcard-*.xml"); + Vector found = finder.findMatches(); + assertEquals(found.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-1.xml"), true ); + assertEquals(found.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-2.xml"), true ); + assertEquals(found.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-include.xml"), true ); + assertEquals(found.contains("com/opensymphony/xwork2/config/providers/xwork-test-results.xml"), false); + + ClassPathFinder finder2 = new ClassPathFinder(); + finder2.setPattern("com/*/xwork2/config/providers/xwork-test-wildcard-1.xml"); + Vector found2 = finder2.findMatches(); + assertEquals(found2.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-1.xml"), true); + assertEquals(found2.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-2.xml"), false); + + ClassPathFinder finder3 = new ClassPathFinder(); + finder3.setPattern("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-1.xml"); + Vector found3 = finder3.findMatches(); + assertEquals(found3.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-1.xml"), true); + assertEquals(found3.contains("com/opensymphony/xwork2/config/providers/xwork-test-wildcard-2.xml"), false); + + ClassPathFinder finder4 = new ClassPathFinder(); + finder4.setPattern("no/matches/*"); + Vector found4 = finder4.findMatches(); + assertEquals(found4.isEmpty(), true); + + } + +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/DefaultFileManagerTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/DefaultFileManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/util/DefaultFileManagerTest.java new file mode 100644 index 0000000..25f29d6 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/DefaultFileManagerTest.java @@ -0,0 +1,62 @@ +package com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.FileManager; +import com.opensymphony.xwork2.FileManagerFactory; +import com.opensymphony.xwork2.XWorkTestCase; + +import java.io.InputStream; +import java.net.URL; + +/** + * FileManager Tester. + * + * @author + * @since
02/18/2009
+ * @version 1.0 + */ +public class DefaultFileManagerTest extends XWorkTestCase { + + private FileManager fileManager; + private long lastModified; + + @Override + public void setUp() throws Exception { + super.setUp(); + fileManager = container.getInstance(FileManagerFactory.class).getFileManager(); + } + + public void testGetFileInJar() throws Exception { + testLoadFile("xwork-jar.xml"); + testLoadFile("xwork - jar.xml"); + testLoadFile("xwork-zip.xml"); + testLoadFile("xwork - zip.xml"); + testLoadFile("xwork-jar2.xml"); + testLoadFile("xwork - jar2.xml"); + testLoadFile("xwork-zip2.xml"); + testLoadFile("xwork - zip2.xml"); + } + + private void testLoadFile(String fileName) { + fileManager.setReloadingConfigs(true); + URL url = ClassLoaderUtil.getResource(fileName, DefaultFileManagerTest.class); + InputStream file = fileManager.loadFile(url); + assertNotNull(file); + assertTrue(fileManager.fileNeedsReloading(fileName)); + } + + public void testReloadingConfigs() throws Exception { + // given + container.getInstance(FileManagerFactory.class).setReloadingConfigs("false"); + FileManager fm = container.getInstance(FileManagerFactory.class).getFileManager(); + String resourceName = "xwork-sample.xml"; + assertFalse(fm.fileNeedsReloading(resourceName)); + + // when + container.getInstance(FileManagerFactory.class).setReloadingConfigs("true"); + + // then + fm = container.getInstance(FileManagerFactory.class).getFileManager(); + assertTrue(fm.fileNeedsReloading(resourceName)); + } + +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/Dog.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Dog.java b/core/src/test/java/com/opensymphony/xwork2/util/Dog.java new file mode 100644 index 0000000..8bad047 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/Dog.java @@ -0,0 +1,123 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import java.io.Serializable; + + +/** + * @author Pat Lightbody + * @author $Author$ + * @version $Revision$ + */ +public class Dog implements Serializable { + + public static final String SCIENTIFIC_NAME = "Canine"; + + + Cat hates; + String name; + int[] childAges; + boolean male; + int age; + static String deity; + + + public void setAge(int age) { + this.age = age; + } + + public int getAge() { + return age; + } + + public void setChildAges(int[] childAges) { + this.childAges = childAges; + } + + public int[] getChildAges() { + return childAges; + } + + public void setException(String blah) throws Exception { + throw new Exception("This is expected"); + } + + public String getException() throws Exception { + throw new Exception("This is expected"); + } + + public void setHates(Cat hates) { + this.hates = hates; + } + + public Cat getHates() { + return hates; + } + + public void setMale(boolean male) { + this.male = male; + } + + public boolean isMale() { + return male; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public static String getDeity() { + return deity; + } + + public static void setDeity(String deity) { + Dog.deity = deity; + } + + public int computeDogYears() { + return age * 7; + } + + public int multiplyAge(int by) { + return age * by; + } + + /** + * @return null + */ + public Integer nullMethod() { + return null; + } + + /** + * a method which is safe to call with a null argument + * + * @param arg the Boolean to return + * @return arg, if it is not null, or Boolean.TRUE if arg is null + */ + public Boolean nullSafeMethod(Boolean arg) { + return (arg == null) ? Boolean.TRUE : arg; + } + + public void getBite() { + throw new RuntimeException("wuf wuf"); + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/DomHelperTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/DomHelperTest.java b/core/src/test/java/com/opensymphony/xwork2/util/DomHelperTest.java new file mode 100644 index 0000000..fa1af79 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/DomHelperTest.java @@ -0,0 +1,70 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.util.location.Location; +import junit.framework.TestCase; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import java.io.StringReader; + +/** + * Test cases for {@link DomHelper}. + */ +public class DomHelperTest extends TestCase { + + private String xml = "\n" + + "\n" + + "]>\n" + + "\n" + + " \n" + + "\n"; + + public void testParse() throws Exception { + InputSource in = new InputSource(new StringReader(xml)); + in.setSystemId("foo://bar"); + + Document doc = DomHelper.parse(in); + assertNotNull(doc); + assertTrue("Wrong root node", + "foo".equals(doc.getDocumentElement().getNodeName())); + + NodeList nl = doc.getElementsByTagName("bar"); + assertTrue(nl.getLength() == 1); + + + + } + + public void testGetLocationObject() throws Exception { + InputSource in = new InputSource(new StringReader(xml)); + in.setSystemId("foo://bar"); + + Document doc = DomHelper.parse(in); + + NodeList nl = doc.getElementsByTagName("bar"); + + Location loc = DomHelper.getLocationObject((Element)nl.item(0)); + + assertNotNull(loc); + assertTrue("Should be line 6, was "+loc.getLineNumber(), + 6==loc.getLineNumber()); + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/Foo.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Foo.java b/core/src/test/java/com/opensymphony/xwork2/util/Foo.java new file mode 100644 index 0000000..70c4fd3 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/Foo.java @@ -0,0 +1,218 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +import java.util.*; + + +/** + * @author Pat Lightbody + * @author $Author$ + * @version $Revision$ + */ +public class Foo { + + Bar bar; + Date birthday; + Date event; + Date meeting; + Foo child; + List cats; + List moreCats; + List strings; + Collection barCollection; + Map catMap; + Map anotherCatMap; + String title; + long[] points; + Foo[] relatives; + boolean useful; + int number; + long aLong; + Calendar calendar; + BarJunior barJunior; + + public BarJunior getBarJunior() { + return barJunior; + } + + public void setBarJunior(BarJunior barJunior) { + this.barJunior = barJunior; + } + + public void setALong(long aLong) { + this.aLong = aLong; + } + + public long getALong() { + return aLong; + } + + public void setBar(Bar bar) { + this.bar = bar; + } + + public Bar getBar() { + return bar; + } + + public void setBirthday(Date birthday) { + this.birthday = birthday; + } + + public Date getBirthday() { + return birthday; + } + + public void setCatMap(Map catMap) { + this.catMap = catMap; + } + + public Map getCatMap() { + return catMap; + } + + public void setCats(List cats) { + this.cats = cats; + } + + public List getCats() { + return cats; + } + + public void setChild(Foo child) { + this.child = child; + } + + public Foo getChild() { + return child; + } + + public void setNumber(int number) { + this.number = number; + } + + public int getNumber() { + return number; + } + + /** + * @return Returns the anotherCatMap. + */ + public Map getAnotherCatMap() { + return anotherCatMap; + } + + /** + * @param anotherCatMap The anotherCatMap to set. + */ + public void setAnotherCatMap(Map anotherCatMap) { + this.anotherCatMap = anotherCatMap; + } + + /** + * @return Returns the moreCats. + */ + public List getMoreCats() { + return moreCats; + } + + /** + * @param moreCats The moreCats to set. + */ + public void setMoreCats(List moreCats) { + this.moreCats = moreCats; + } + + /** + * @return Returns the catSet. + */ + public Collection getBarCollection() { + return barCollection; + } + + /** + * @param barCollection The barCollection to set. + */ + public void setBarCollection(Collection barCollection) { + this.barCollection = barCollection; + } + + public void setPoints(long[] points) { + this.points = points; + } + + public long[] getPoints() { + return points; + } + + public void setRelatives(Foo[] relatives) { + this.relatives = relatives; + } + + public Foo[] getRelatives() { + return relatives; + } + + public void setStrings(List strings) { + this.strings = strings; + } + + public List getStrings() { + return strings; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public void setUseful(boolean useful) { + this.useful = useful; + } + + public boolean isUseful() { + return useful; + } + + + public Date getEvent() { + return event; + } + + public void setEvent(Date event) { + this.event = event; + } + + public Date getMeeting() { + return meeting; + } + + public void setMeeting(Date meeting) { + this.meeting = meeting; + } + + public Calendar getCalendar() { + return calendar; + } + + public void setCalendar(Calendar calendar) { + this.calendar = calendar; + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/FurColor.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/FurColor.java b/core/src/test/java/com/opensymphony/xwork2/util/FurColor.java new file mode 100644 index 0000000..94c355b --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/FurColor.java @@ -0,0 +1,20 @@ +/* + * Copyright 2002-2003,2009 The Apache Software Foundation. + * + * 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 com.opensymphony.xwork2.util; + +public enum FurColor { + BROWN, BLACK, GREEN +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/GetPropertiesTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/GetPropertiesTest.java b/core/src/test/java/com/opensymphony/xwork2/util/GetPropertiesTest.java new file mode 100644 index 0000000..6a24aca --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/GetPropertiesTest.java @@ -0,0 +1,40 @@ +/* + * Created on Jan 23, 2006 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.XWorkTestCase; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; + +/** + * @author Gabe + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class GetPropertiesTest extends XWorkTestCase { + + public void testGetCollectionProperties() { + doGetCollectionPropertiesTest(new ArrayList()); + doGetCollectionPropertiesTest(new HashSet()); + + } + + public void doGetCollectionPropertiesTest(Collection c) { + ValueStack vs = ActionContext.getContext().getValueStack(); + Foo foo = new Foo(); + foo.setBarCollection(c); + vs.push(foo); + assertEquals(Boolean.TRUE, vs.findValue("barCollection.isEmpty")); + assertEquals(Boolean.TRUE, vs.findValue("barCollection.empty")); + assertEquals(new Integer(0), vs.findValue("barCollection.size")); + assertTrue(vs.findValue("barCollection.iterator") instanceof java.util.Iterator); + } +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/Indexed.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Indexed.java b/core/src/test/java/com/opensymphony/xwork2/util/Indexed.java new file mode 100644 index 0000000..15c6193 --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/Indexed.java @@ -0,0 +1,41 @@ +package com.opensymphony.xwork2.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author mimo + * + */ +public class Indexed { + + public Object[] values = new Object[3]; + public Map map = new HashMap<>(); + + public void setSimple(int i, Object v) { + values[i] = v; + } + + public Object getSimple(int i) { + return values[i]; + } + + + + public void setIntegerMap(String key, Integer value) { + map.put(key, value); + } + + public Integer getIntegerMap(String key) { + return (Integer) map.get(key); + } + + public void setStringMap(String key, String value) { + map.put(key, value); + } + + public String getStringMap(String key) { + return (String) map.get(key); + } + +} http://git-wip-us.apache.org/repos/asf/struts/blob/31af5842/core/src/test/java/com/opensymphony/xwork2/util/ListHolder.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/ListHolder.java b/core/src/test/java/com/opensymphony/xwork2/util/ListHolder.java new file mode 100644 index 0000000..190fdef --- /dev/null +++ b/core/src/test/java/com/opensymphony/xwork2/util/ListHolder.java @@ -0,0 +1,37 @@ +package com.opensymphony.xwork2.util; + +import java.util.Date; +import java.util.List; + +/** + * User: patrick Date: Dec 20, 2005 Time: 11:15:29 AM + */ +public class ListHolder { + List longs; + List strings; + List dates; + + public List getLongs() { + return longs; + } + + public void setLongs(List longs) { + this.longs = longs; + } + + public List getStrings() { + return strings; + } + + public void setStrings(List strings) { + this.strings = strings; + } + + public List getDates() { + return dates; + } + + public void setDates(List dates) { + this.dates = dates; + } +}