From da5da67d8027ad2fd05e579c893a4a8a8acd728e Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 08:39:20 +0100 Subject: [PATCH 01/17] Makes factory fully injectable --- .../xwork2/TextProviderFactory.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/TextProviderFactory.java b/core/src/main/java/com/opensymphony/xwork2/TextProviderFactory.java index 331d5342d8..b00f451acf 100644 --- a/core/src/main/java/com/opensymphony/xwork2/TextProviderFactory.java +++ b/core/src/main/java/com/opensymphony/xwork2/TextProviderFactory.java @@ -28,44 +28,49 @@ public class TextProviderFactory { private TextProvider textProvider; + private LocaleProvider localeProvider; @Inject public void setTextProvider(TextProvider textProvider) { this.textProvider = textProvider; } - public TextProvider createInstance(Class clazz, LocaleProvider provider) { - TextProvider instance = getTextProvider(clazz, provider); + @Inject + public void setLocaleProvider(LocaleProvider localeProvider) { + this.localeProvider = localeProvider; + } + + public TextProvider createInstance(Class clazz) { + TextProvider instance = getTextProvider(clazz); if (instance instanceof ResourceBundleTextProvider) { ((ResourceBundleTextProvider) instance).setClazz(clazz); - ((ResourceBundleTextProvider) instance).setLocaleProvider(provider); + ((ResourceBundleTextProvider) instance).setLocaleProvider(localeProvider); } return instance; } - public TextProvider createInstance(ResourceBundle bundle, LocaleProvider provider) { - TextProvider instance = getTextProvider(bundle, provider); + public TextProvider createInstance(ResourceBundle bundle) { + TextProvider instance = getTextProvider(bundle); if (instance instanceof ResourceBundleTextProvider) { ((ResourceBundleTextProvider) instance).setBundle(bundle); - ((ResourceBundleTextProvider) instance).setLocaleProvider(provider); + ((ResourceBundleTextProvider) instance).setLocaleProvider(localeProvider); } return instance; } - protected TextProvider getTextProvider(Class clazz, LocaleProvider provider) { + protected TextProvider getTextProvider(Class clazz) { if (this.textProvider == null) { - return new TextProviderSupport(clazz, provider); + return new TextProviderSupport(clazz, localeProvider); } else { return textProvider; } } - private TextProvider getTextProvider(ResourceBundle bundle, LocaleProvider provider) { + private TextProvider getTextProvider(ResourceBundle bundle) { if (this.textProvider == null) { - return new TextProviderSupport(bundle, provider); - } else { - return textProvider; + textProvider = new TextProviderSupport(bundle, localeProvider); } + return textProvider; } } From db8ebe710d1aaa815006d070b9dda4930a9d152a Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 08:39:55 +0100 Subject: [PATCH 02/17] Uses the new injectable factory to obtain TextProvider --- .../validator/DelegatingValidatorContext.java | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java index abaa7616e5..a9a8b04dfd 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java @@ -57,10 +57,10 @@ public DelegatingValidatorContext(ValidationAware validationAware, TextProvider * * @param object the object to use for validation (usually an Action). */ - public DelegatingValidatorContext(Object object) { + public DelegatingValidatorContext(Object object, TextProviderFactory textProviderFactory) { this.localeProvider = makeLocaleProvider(object); this.validationAware = makeValidationAware(object); - this.textProvider = makeTextProvider(object, localeProvider); + this.textProvider = makeTextProvider(object, textProviderFactory); } /** @@ -71,7 +71,7 @@ public DelegatingValidatorContext(Object object) { */ public DelegatingValidatorContext(Class clazz) { localeProvider = new ActionContextLocaleProvider(); - textProvider = new TextProviderFactory().createInstance(clazz, localeProvider); + textProvider = new TextProviderFactory().createInstance(clazz); validationAware = new LoggingValidationAware(clazz); } @@ -193,18 +193,11 @@ public boolean hasFieldErrors() { return validationAware.hasFieldErrors(); } - public static TextProvider makeTextProvider(Object object, LocaleProvider localeProvider) { + public static TextProvider makeTextProvider(Object object, TextProviderFactory textProviderFactory) { // the object argument passed through here will most probably be an ActionSupport descendant which does // implements TextProvider. if (object != null && object instanceof DelegatingValidatorContext) { return ((DelegatingValidatorContext) object).getTextProvider(); - } else if (object != null && localeProvider != null && localeProvider instanceof DelegatingValidatorContext) { - return new CompositeTextProvider(new TextProvider[]{ - new TextProviderFactory().createInstance(object.getClass(), localeProvider), - ((DelegatingValidatorContext)localeProvider).getTextProvider() - }); - } else if (localeProvider != null && localeProvider instanceof DelegatingValidatorContext) { - return ((DelegatingValidatorContext)localeProvider).getTextProvider(); } if ((object != null) && (object instanceof TextProvider)) { @@ -213,20 +206,11 @@ public static TextProvider makeTextProvider(Object object, LocaleProvider locale } return new CompositeTextProvider(new TextProvider[]{ ((TextProvider) object), - new TextProviderSupport(object.getClass(), localeProvider) - }); - } else if (localeProvider != null && localeProvider instanceof TextProvider) { - if (localeProvider instanceof CompositeTextProvider) { - return (CompositeTextProvider) localeProvider; - } - return new CompositeTextProvider(new TextProvider[]{ - ((TextProvider) localeProvider), - new TextProviderSupport(localeProvider.getClass(), localeProvider) + textProviderFactory.createInstance(object.getClass()) }); } else { - return new TextProviderFactory().createInstance( - object != null ? object.getClass() : DelegatingValidatorContext.class, - localeProvider); + return textProviderFactory.createInstance( + object != null ? object.getClass() : DelegatingValidatorContext.class); } } From 728055dc46b2517791d5860d60a77e6196ddcbaf Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 08:40:24 +0100 Subject: [PATCH 03/17] Adjust usage of the factory --- .../opensymphony/xwork2/ActionSupport.java | 7 ++---- .../AnnotationActionValidatorManager.java | 8 ++++++- .../DefaultActionValidatorManager.java | 12 ++++++++-- .../validators/ValidatorSupport.java | 10 +++++++- .../validators/VisitorFieldValidator.java | 24 +++++++++++++++---- .../org/apache/struts2/components/I18n.java | 5 ++-- .../interceptor/FileUploadInterceptor.java | 8 ++----- .../struts2/tiles/I18NAttributeEvaluator.java | 7 ++---- 8 files changed, 54 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java index d2b551a41b..bb7048f0e8 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java @@ -274,11 +274,8 @@ public void pause(String result) { */ private TextProvider getTextProvider() { if (textProvider == null) { - TextProviderFactory tpf = new TextProviderFactory(); - if (container != null) { - container.inject(tpf); - } - textProvider = tpf.createInstance(getClass(), this); + TextProviderFactory tpf = container.inject(TextProviderFactory.class); + textProvider = tpf.createInstance(getClass()); } return textProvider; } diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java b/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java index 641bc438e3..cd6fa4e857 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java @@ -52,6 +52,7 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager private ValidatorFileParser validatorFileParser; private FileManager fileManager; private boolean reloadingConfigs; + private TextProviderFactory textProviderFactory; @Inject public void setValidatorFactory(ValidatorFactory fac) { @@ -73,6 +74,11 @@ public void setReloadingConfigs(String reloadingConfigs) { this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs); } + @Inject + public void setTextProviderFactory(TextProviderFactory textProviderFactory) { + this.textProviderFactory = textProviderFactory; + } + public List getValidators(Class clazz, String context) { return getValidators(clazz, context, null); } @@ -116,7 +122,7 @@ public void validate(Object object, String context) throws ValidationException { } public void validate(Object object, String context, String method) throws ValidationException { - ValidatorContext validatorContext = new DelegatingValidatorContext(object); + ValidatorContext validatorContext = new DelegatingValidatorContext(object, textProviderFactory); validate(object, context, validatorContext, method); } diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java index d16afcd021..7ad0ac92db 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java @@ -18,6 +18,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.FileManager; import com.opensymphony.xwork2.FileManagerFactory; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkConstants; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.ClassLoaderUtil; @@ -50,16 +51,19 @@ */ public class DefaultActionValidatorManager implements ActionValidatorManager { + private final static Logger LOG = LogManager.getLogger(DefaultActionValidatorManager.class); + /** The file suffix for any validation file. */ protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml"; private final Map> validatorCache = Collections.synchronizedMap(new HashMap>()); private final Map> validatorFileCache = Collections.synchronizedMap(new HashMap>()); - private final Logger LOG = LogManager.getLogger(DefaultActionValidatorManager.class); + private ValidatorFactory validatorFactory; private ValidatorFileParser validatorFileParser; private FileManager fileManager; private boolean reloadingConfigs; + private TextProviderFactory textProviderFactory; @Inject public void setValidatorFileParser(ValidatorFileParser parser) { @@ -81,6 +85,10 @@ public void setReloadingConfigs(String reloadingConfigs) { this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs); } + public void setTextProviderFactory(TextProviderFactory textProviderFactory) { + this.textProviderFactory = textProviderFactory; + } + public synchronized List getValidators(Class clazz, String context) { return getValidators(clazz, context, null); } @@ -118,7 +126,7 @@ public void validate(Object object, String context) throws ValidationException { } public void validate(Object object, String context, String method) throws ValidationException { - ValidatorContext validatorContext = new DelegatingValidatorContext(object); + ValidatorContext validatorContext = new DelegatingValidatorContext(object, textProviderFactory); validate(object, context, validatorContext, method); } diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java index 1df94501d3..3cfdb4bad0 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java @@ -15,6 +15,8 @@ */ package com.opensymphony.xwork2.validator.validators; +import com.opensymphony.xwork2.TextProviderFactory; +import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.*; @@ -45,6 +47,12 @@ public abstract class ValidatorSupport implements Validator, ShortCircuitableVal private String[] messageParameters; protected ValueStack stack; + protected TextProviderFactory textProviderFactory; + + @Inject + public void setTextProviderFactory(TextProviderFactory textProviderFactory) { + this.textProviderFactory = textProviderFactory; + } public void setValueStack(ValueStack stack) { this.stack = stack; @@ -76,7 +84,7 @@ public String getMessage(Object object) { defaultMessage = messageKey; } if (validatorContext == null) { - validatorContext = new DelegatingValidatorContext(object); + validatorContext = new DelegatingValidatorContext(object, textProviderFactory); } List parsedMessageParameters = null; if (messageParameters != null) { diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java index 9f8e67da68..37d9f66d94 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java @@ -16,6 +16,8 @@ package com.opensymphony.xwork2.validator.validators; import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.CompositeTextProvider; +import com.opensymphony.xwork2.TextProvider; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ActionValidatorManager; @@ -24,6 +26,8 @@ import com.opensymphony.xwork2.validator.ValidatorContext; import java.util.Collection; +import java.util.LinkedList; +import java.util.List; /** @@ -166,24 +170,36 @@ private void validateObject(String fieldName, Object o, String visitorContext) t ValidatorContext validatorContext; if (appendPrefix) { - validatorContext = new AppendingValidatorContext(getValidatorContext(), o, fieldName, getMessage(o)); + ValidatorContext parent = getValidatorContext(); + validatorContext = new AppendingValidatorContext(parent, createTextProvider(o, parent), fieldName, getMessage(o)); } else { ValidatorContext parent = getValidatorContext(); - validatorContext = new DelegatingValidatorContext(parent, DelegatingValidatorContext.makeTextProvider(o, parent), parent); + CompositeTextProvider textProvider = createTextProvider(o, parent); + validatorContext = new DelegatingValidatorContext(parent, textProvider, parent); } actionValidatorManager.validate(o, visitorContext, validatorContext); stack.pop(); } + private CompositeTextProvider createTextProvider(Object o, ValidatorContext parent) { + List textProviders = new LinkedList<>(); + if (o instanceof TextProvider) { + textProviders.add((TextProvider) o); + } + textProviders.add(parent); + + return new CompositeTextProvider(textProviders); + } + public static class AppendingValidatorContext extends DelegatingValidatorContext { private String field; private String message; private ValidatorContext parent; - public AppendingValidatorContext(ValidatorContext parent, Object object, String field, String message) { - super(parent, makeTextProvider(object, parent), parent); + public AppendingValidatorContext(ValidatorContext parent, TextProvider textProvider, String field, String message) { + super(parent, textProvider, parent); this.field = field; this.message = message; diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java index a04840fc13..c35f4a04e0 100644 --- a/core/src/main/java/org/apache/struts2/components/I18n.java +++ b/core/src/main/java/org/apache/struts2/components/I18n.java @@ -125,9 +125,8 @@ public boolean start(Writer writer) { } if (bundle != null) { - TextProviderFactory tpf = new TextProviderFactory(); - container.inject(tpf); - textProvider = tpf.createInstance(bundle, localeProvider); + TextProviderFactory tpf = container.inject(TextProviderFactory.class); + textProvider = tpf.createInstance(bundle); getStack().push(textProvider); pushed = true; } diff --git a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java index aa7fe01d10..a428b53c8e 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java @@ -446,12 +446,8 @@ protected String getTextMessage(Object action, String messageKey, String[] args) } private TextProvider getTextProvider(Object action) { - TextProviderFactory tpf = new TextProviderFactory(); - if (container != null) { - container.inject(tpf); - } - LocaleProvider localeProvider = getLocaleProvider(action); - return tpf.createInstance(action.getClass(), localeProvider); + TextProviderFactory tpf = container.inject(TextProviderFactory.class); + return tpf.createInstance(action.getClass()); } private LocaleProvider getLocaleProvider(Object action) { diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java index 37150aee55..647a289e1f 100644 --- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java +++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java @@ -52,11 +52,8 @@ public Object evaluate(String expression, Request request) { throw new ConfigurationException("There is no ActionContext for current request!"); } - TextProviderFactory tpf = new TextProviderFactory(); - ctx.getContainer().inject(tpf); - LocaleProvider localeProvider = ctx.getContainer().getInstance(LocaleProvider.class); - - TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), localeProvider); + TextProviderFactory tpf = ctx.getContainer().inject(TextProviderFactory.class); + TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass()); if (textProvider != null) { LOG.debug("Trying find text [{}] using TextProvider {}", expression, textProvider); From 89d95b64cd68b0b7d03f60249f6202dbb2e14b28 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:17:03 +0100 Subject: [PATCH 04/17] Drops empty line --- .../xwork2/validator/validators/VisitorFieldValidator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java index 37d9f66d94..e5c54bc566 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java @@ -192,7 +192,6 @@ private CompositeTextProvider createTextProvider(Object o, ValidatorContext pare return new CompositeTextProvider(textProviders); } - public static class AppendingValidatorContext extends DelegatingValidatorContext { private String field; private String message; From 3be5aa0fdb23a69f7dabf3633ca8dd5d09f923dc Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:17:25 +0100 Subject: [PATCH 05/17] Adds missing constructor param --- .../xwork2/validator/GenericValidatorContext.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java b/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java index 6273259f8c..948cd97f4a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java @@ -15,6 +15,8 @@ */ package com.opensymphony.xwork2.validator; +import com.opensymphony.xwork2.TextProviderFactory; + import java.util.*; @@ -31,8 +33,8 @@ public class GenericValidatorContext extends DelegatingValidatorContext { private Map> fieldErrors; - public GenericValidatorContext(Object object) { - super(object); + public GenericValidatorContext(Object object, TextProviderFactory tpf) { + super(object, tpf); } From d7cf0609059c7ffe1f90cc044c9ea20536e823b2 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:20:39 +0100 Subject: [PATCH 06/17] Defines new injectable bean with alias --- .../xwork2/config/providers/XWorkConfigurationProvider.java | 4 ++++ core/src/main/java/org/apache/struts2/StrutsConstants.java | 2 ++ .../apache/struts2/config/DefaultBeanSelectionProvider.java | 2 ++ 3 files changed, 8 insertions(+) diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java index fc335d821e..ff27731696 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java @@ -2,6 +2,7 @@ import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.DefaultActionProxyFactory; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory; import com.opensymphony.xwork2.factory.UnknownHandlerFactory; import com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor; @@ -177,8 +178,11 @@ public void register(ContainerBuilder builder, LocatableProperties props) .factory(NullHandler.class, Object.class.getName(), InstantiatingNullHandler.class, Scope.SINGLETON) .factory(ActionValidatorManager.class, AnnotationActionValidatorManager.class, Scope.SINGLETON) .factory(ActionValidatorManager.class, "no-annotations", DefaultActionValidatorManager.class, Scope.SINGLETON) + + .factory(TextProviderFactory.class, Scope.SINGLETON) .factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON) .factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON) + .factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON) .factory(OgnlUtil.class, Scope.SINGLETON) .factory(CollectionConverter.class, Scope.SINGLETON) diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index c41d542775..7ae2a5f882 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -306,4 +306,6 @@ public final class StrutsConstants { public static final String STRUTS_CONTENT_TYPE_MATCHER = "struts.contentTypeMatcher"; public static final String STRUTS_SMI_METHOD_REGEX = "struts.strictMethodInvocation.methodRegex"; + + public static final String STRUTS_TEXT_PROVIDER_FACTORY = "struts.textProviderFactory"; } diff --git a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java index 20b0f9949c..7835185ea8 100644 --- a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java +++ b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java @@ -22,6 +22,7 @@ package org.apache.struts2.config; import com.opensymphony.xwork2.ActionProxyFactory; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.factory.UnknownHandlerFactory; import com.opensymphony.xwork2.security.AcceptedPatternsChecker; import com.opensymphony.xwork2.security.ExcludedPatternsChecker; @@ -387,6 +388,7 @@ public void register(ContainerBuilder builder, LocatableProperties props) { alias(TypeConverterHolder.class, StrutsConstants.STRUTS_CONVERTER_HOLDER, builder, props); alias(TextProvider.class, StrutsConstants.STRUTS_XWORKTEXTPROVIDER, builder, props, Scope.PROTOTYPE); + alias(TextProviderFactory.class, StrutsConstants.STRUTS_TEXT_PROVIDER_FACTORY, builder, props, Scope.PROTOTYPE); alias(LocaleProvider.class, StrutsConstants.STRUTS_LOCALE_PROVIDER, builder, props); alias(ActionProxyFactory.class, StrutsConstants.STRUTS_ACTIONPROXYFACTORY, builder, props); From 3dc8480988f38f367f9965bad0ff60656d091fa9 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:20:57 +0100 Subject: [PATCH 07/17] Updates test --- .../AnnotationActionValidatorManagerTest.java | 20 +++++++++------ .../ConversionErrorFieldValidatorTest.java | 5 ++-- .../validator/DoubleRangeValidatorTest.java | 12 +++++---- .../xwork2/validator/EmailValidatorTest.java | 13 ++++++++-- .../validator/ExpressionValidatorTest.java | 10 +++++--- .../validator/RegexFieldValidatorTest.java | 20 ++++++++++----- ...versionErrorFieldValidatorSupportTest.java | 11 +++++--- .../validator/SimpleActionValidationTest.java | 2 +- .../StringLengthFieldValidatorTest.java | 3 ++- .../xwork2/validator/StringValidatorTest.java | 21 ++++++++++------ .../xwork2/validator/URLValidatorTest.java | 15 ++++++----- .../AppendingValidatorContextTest.java | 25 +++++++++++++++---- .../DateRangeFieldValidatorTest.java | 10 +++++--- .../IntRangeFieldValidatorTest.java | 14 ++++++++--- .../LongRangeFieldValidatorTest.java | 14 ++++++++--- .../RequiredStringValidatorTest.java | 12 +++++++-- .../ShortRangeFieldValidatorTest.java | 14 ++++++++--- 17 files changed, 155 insertions(+), 66 deletions(-) diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java index 71111500fa..10936f8f39 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java @@ -24,6 +24,7 @@ import com.opensymphony.xwork2.FileManagerFactory; import com.opensymphony.xwork2.SimpleAction; import com.opensymphony.xwork2.SimpleAnnotationAction; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.test.AnnotationDataAware2; @@ -58,6 +59,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase { protected final String alias = "annotationValidationAlias"; AnnotationActionValidatorManager annotationActionValidatorManager; + private TextProviderFactory tpf; @Override protected void setUp() throws Exception { super.setUp(); @@ -78,6 +80,8 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase { EasyMock.replay(proxy); ActionContext.getContext().setActionInvocation(invocation); + + tpf = container.getInstance(TextProviderFactory.class); } @Override protected void tearDown() throws Exception { @@ -124,7 +128,7 @@ public void testDefaultMessageInterpolation() { bean.setName("foo"); bean.setCount(99); - ValidatorContext context = new GenericValidatorContext(bean); + ValidatorContext context = new GenericValidatorContext(bean, tpf); annotationActionValidatorManager.validate(bean, "beanMessageBundle", context); assertTrue(context.hasErrors()); assertTrue(context.hasFieldErrors()); @@ -252,7 +256,7 @@ public void testMessageInterpolation() { bean.setName("foo"); bean.setCount(150); - ValidatorContext context = new GenericValidatorContext(bean); + ValidatorContext context = new GenericValidatorContext(bean, tpf); annotationActionValidatorManager.validate(bean, "beanMessageBundle", context); assertTrue(context.hasErrors()); assertTrue(context.hasFieldErrors()); @@ -290,7 +294,7 @@ public void testSkipUserMarkerActionLevelShortCircuit() { user.setEmail("bad_email"); user.setEmail2("bad_email"); - ValidatorContext context = new GenericValidatorContext(user); + ValidatorContext context = new GenericValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); @@ -332,13 +336,13 @@ public void testSkipAllActionLevelShortCircuit2() { user.setEmail("mark_bad_email_for_field_val@foo.com"); user.setEmail2("mark_bad_email_for_field_val@foo.com"); - ValidatorContext context = new GenericValidatorContext(user); + ValidatorContext context = new GenericValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); // check field errors // we have an error in this field level, email does not ends with mycompany.com - List l = (List) context.getFieldErrors().get("email"); + List l = context.getFieldErrors().get("email"); assertNotNull(l); assertEquals(1, l.size()); // because email-field-val is short-circuit assertEquals("Email not from the right company.", l.get(0)); @@ -370,12 +374,12 @@ public void testActionLevelShortCircuit() throws Exception { user.setEmail("rainer_h(at)example.com"); - ValidatorContext context = new GenericValidatorContext(user); + ValidatorContext context = new GenericValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); // check field level errors // shouldn't have any because action error prevents validation of anything else - List l = (List) context.getFieldErrors().get("email2"); + List l = context.getFieldErrors().get("email2"); assertNull(l); @@ -401,7 +405,7 @@ public void testShortCircuitNoErrors() { user.setEmail("mark@mycompany.com"); user.setEmail2("mark@mycompany.com"); - ValidatorContext context = new GenericValidatorContext(user); + ValidatorContext context = new GenericValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertFalse(context.hasErrors()); } catch (ValidationException ex) { diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/ConversionErrorFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/ConversionErrorFieldValidatorTest.java index d68613136e..8182d779ae 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/ConversionErrorFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/ConversionErrorFieldValidatorTest.java @@ -16,6 +16,7 @@ package com.opensymphony.xwork2.validator; import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.interceptor.ValidationAware; import com.opensymphony.xwork2.ValidationAwareSupport; import com.opensymphony.xwork2.XWorkTestCase; @@ -37,11 +38,9 @@ public class ConversionErrorFieldValidatorTest extends XWorkTestCase { private static final String defaultFooMessage = "Invalid field value for field \"foo\"."; - private ConversionErrorFieldValidator validator; private ValidationAware validationAware; - @Override public void setUp() throws Exception { super.setUp(); @@ -54,7 +53,7 @@ public void setUp() throws Exception { validator = new ConversionErrorFieldValidator(); validationAware = new ValidationAwareSupport(); - DelegatingValidatorContext validatorContext = new DelegatingValidatorContext(validationAware); + DelegatingValidatorContext validatorContext = new DelegatingValidatorContext(validationAware, container.inject(TextProviderFactory.class)); stack.push(validatorContext); validator.setValidatorContext(validatorContext); validator.setFieldName("foo"); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/DoubleRangeValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/DoubleRangeValidatorTest.java index 64e4c2c737..3f75a1455d 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/DoubleRangeValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/DoubleRangeValidatorTest.java @@ -21,6 +21,7 @@ */ public class DoubleRangeValidatorTest extends XWorkTestCase { private DoubleRangeFieldValidator val; + private TextProviderFactory tpf; public void testRangeValidationWithError() throws Exception { //Explicitly set an out-of-range double for DoubleRangeValidatorTest @@ -107,7 +108,7 @@ public void testRangeNotADoubleObjectValueInStack() throws Exception { val.setMaxInclusive(10d); val.setFieldName("name"); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); val.setValidatorContext(context); val.validate(prod); @@ -127,7 +128,7 @@ public void testEdgeOfMaxRange() throws Exception { val.setFieldName("price"); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); val.setValidatorContext(context); val.setMaxInclusive(9.95d); @@ -152,7 +153,7 @@ public void testEdgeOfMinRange() throws Exception { val.setFieldName("price"); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); val.setValidatorContext(context); val.setMinInclusive(9.95d); @@ -170,7 +171,7 @@ public void testNoValue() throws Exception { val.setFieldName("price"); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); val.setValidatorContext(context); val.setMinInclusive(9.95d); @@ -220,7 +221,7 @@ public void testExpressionParams() throws Exception { val.setFieldName("price"); val.setDefaultMessage("Price is wrong!"); - DelegatingValidatorContext context = new DelegatingValidatorContext(action); + DelegatingValidatorContext context = new DelegatingValidatorContext(action, tpf); val.setValidatorContext(context); val.validate(action); @@ -236,6 +237,7 @@ protected void setUp() throws Exception { val = new DoubleRangeFieldValidator(); val.setValueStack(ActionContext.getContext().getValueStack()); ActionContext.getContext().setParameters(HttpParameters.create().build()); + tpf = container.inject(TextProviderFactory.class); } @Override diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/EmailValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/EmailValidatorTest.java index 721ce08fc7..ae8c036f39 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/EmailValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/EmailValidatorTest.java @@ -17,6 +17,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.EmailValidator; @@ -29,6 +30,8 @@ */ public class EmailValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + public void testEmailValidity() throws Exception { assertTrue(verifyEmailValidity("TmJee@Yahoo.com")); assertTrue(verifyEmailValidity("tmjee@yahoo.com")); @@ -70,7 +73,7 @@ public String getMyEmail() { }; EmailValidator validator = new EmailValidator(); - validator.setValidatorContext(new DelegatingValidatorContext(action)); + validator.setValidatorContext(new DelegatingValidatorContext(action, tpf)); validator.setFieldName("myEmail"); validator.setDefaultMessage("invalid email"); validator.setValueStack(ActionContext.getContext().getValueStack()); @@ -95,7 +98,7 @@ public String getEmailExpression() { valueStack.push(action); validator.setValueStack(valueStack); - validator.setValidatorContext(new DelegatingValidatorContext(action)); + validator.setValidatorContext(new DelegatingValidatorContext(action, tpf)); validator.setFieldName("myEmail"); validator.setDefaultMessage("invalid email"); validator.setRegexExpression("${emailExpression}"); @@ -155,4 +158,10 @@ public boolean getTrimEmail() { return validator; } + @Override + public void setUp() throws Exception { + super.setUp(); + + tpf = container.inject(TextProviderFactory.class); + } } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/ExpressionValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/ExpressionValidatorTest.java index 3ae80764ce..30613a40f4 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/ExpressionValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/ExpressionValidatorTest.java @@ -38,12 +38,14 @@ */ public class ExpressionValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + public void testExpressionValidationOfStringLength() throws ValidationException { TestBean bean = new TestBean(); bean.setName("abc"); ActionContext.getContext().getValueStack().push(bean); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context); assertTrue(context.hasFieldErrors()); @@ -55,7 +57,7 @@ public void testExpressionValidationOfStringLength() throws ValidationException assertEquals("Name must be greater than 5 characters, it is currently 'abc'", nameErrors.get(0)); bean.setName("abcdefg"); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context); assertFalse(context.hasFieldErrors()); } @@ -108,7 +110,7 @@ public void testNoBooleanExpression() throws Exception { mock.expect("addActionError", C.ANY_ARGS); ExpressionValidator ev = new ExpressionValidator(); - ev.setValidatorContext(new DelegatingValidatorContext(mock.proxy())); + ev.setValidatorContext(new DelegatingValidatorContext(mock.proxy(), tpf)); ev.setExpression("{top}"); ev.setValueStack(ActionContext.getContext().getValueStack()); ev.validate("Hello"); // {top} will evaluate to Hello that is not a Boolean @@ -136,6 +138,8 @@ protected void setUp() throws Exception { EasyMock.replay(proxy); ActionContext.getContext().setActionInvocation(invocation); + + tpf = container.inject(TextProviderFactory.class); } } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java index 6aa58732c9..bbb9588b37 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java @@ -16,6 +16,7 @@ package com.opensymphony.xwork2.validator; import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.RegexFieldValidator; @@ -36,6 +37,13 @@ */ public class RegexFieldValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + + public void setUp() throws Exception { + super.setUp(); + tpf = container.inject(TextProviderFactory.class); + } + public void testMatch() throws Exception { MyTestPerson testPerson = new MyTestPerson(); testPerson.setUsername("Secret"); @@ -45,7 +53,7 @@ public void testMatch() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -66,7 +74,7 @@ public void testMatchNoTrim() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setTrim(false); validator.setRegex("^Sec.*\\s"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -86,7 +94,7 @@ public void testFail() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -111,7 +119,7 @@ public void testNoFieldName() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName(null); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -144,7 +152,7 @@ public void testEmptyName() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -164,7 +172,7 @@ public void testNoStringField() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("[0-9][0-9]"); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("age"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java index 308ed2ac57..c4aa1783c8 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/RepopulateConversionErrorFieldValidatorSupportTest.java @@ -17,6 +17,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.mock.MockActionInvocation; import com.opensymphony.xwork2.util.ValueStack; @@ -90,17 +91,19 @@ protected void setUp() throws Exception { Map conversionErrors = ActionContext.getContext().getConversionErrors(); conversionErrors.put("someFieldName", conversionErrorValue); conversionErrors.put("xxxsomeFieldName", conversionErrorValue); - - action = new ActionSupport(); + + TextProviderFactory tpf = container.inject(TextProviderFactory.class); + + action = container.inject(ActionSupport.class); validator1 = new InternalRepopulateConversionErrorFieldValidatorSupport(); validator1.setFieldName("someFieldName"); - validator1.setValidatorContext(new DelegatingValidatorContext(action)); + validator1.setValidatorContext(new DelegatingValidatorContext(action, tpf)); validator2 = new InternalRepopulateConversionErrorFieldValidatorSupport(); validator2.setFieldName("someFieldName"); - validator2.setValidatorContext(new DelegatingValidatorContext(action) { + validator2.setValidatorContext(new DelegatingValidatorContext(action, tpf) { @Override public String getFullFieldName(String fieldName) { return "xxx"+fieldName; diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java index 33657157d1..991a75eadf 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java @@ -153,7 +153,7 @@ public void validate(Object object) throws ValidationException { SimpleAction action = new SimpleAction(); container.inject(action); - ValidatorContext validatorContext = new DelegatingValidatorContext(action); + ValidatorContext validatorContext = new DelegatingValidatorContext(action, container.inject(TextProviderFactory.class)); validator.setValidatorContext(validatorContext); validator.validate(this); assertTrue(validatorContext.hasActionErrors()); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java index b8cf182c4f..884d4951b0 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java @@ -17,6 +17,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator; @@ -162,7 +163,7 @@ protected void setUp() throws Exception { validator = new StringLengthFieldValidator(); validator.setFieldName("myField"); validator.setMessageKey("error"); - validator.setValidatorContext(new DelegatingValidatorContext(action)); + validator.setValidatorContext(new DelegatingValidatorContext(action, container.inject(TextProviderFactory.class))); validator.setMaxLength(5); validator.setMinLength(2); validator.setValueStack(valueStack); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/StringValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/StringValidatorTest.java index 9742b5a331..c737d972b9 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/StringValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/StringValidatorTest.java @@ -19,6 +19,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.ValidationAwareSupport; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.config.entities.ActionConfig; @@ -36,11 +37,13 @@ */ public class StringValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + public void testRequiredStringWithNullValue() throws Exception { Equidae equidae = new Equidae(); equidae.setHorse(null); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -54,7 +57,7 @@ public void testRequiredString() throws Exception { equidae.setHorse(""); ActionContext.getContext().getValueStack().push(equidae); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -66,7 +69,7 @@ public void testRequiredString() throws Exception { // trim = false should fail equidae.setHorse(" "); ActionContext.getContext().getValueStack().push(equidae); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -85,7 +88,7 @@ public void testStringLength() throws Exception { equidae.setDonkey("asdf"); ActionContext.getContext().getValueStack().push(equidae); - DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport()); + DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -109,7 +112,7 @@ public void testStringLength() throws Exception { equidae.setCow("asdf "); equidae.setDonkey("asdf "); ActionContext.getContext().getValueStack().push(equidae); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -128,7 +131,7 @@ public void testStringLength() throws Exception { equidae.setCow("asdfasdf"); equidae.setDonkey("asdfasdf"); ActionContext.getContext().getValueStack().push(equidae); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -143,7 +146,7 @@ public void testStringLength() throws Exception { equidae.setCow("asdfasdf "); equidae.setDonkey("asdfasdf "); ActionContext.getContext().getValueStack().push(equidae); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -162,7 +165,7 @@ public void testStringLength() throws Exception { equidae.setCow("asdfasdfasdf"); equidae.setDonkey("asdfasdfasdf"); ActionContext.getContext().getValueStack().push(equidae); - context = new DelegatingValidatorContext(new ValidationAwareSupport()); + context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf); container.getInstance(ActionValidatorManager.class).validate(equidae, null, context); assertTrue(context.hasFieldErrors()); @@ -213,5 +216,7 @@ protected void setUp() throws Exception { EasyMock.replay(proxy); ActionContext.getContext().setActionInvocation(invocation); + + tpf = container.inject(TextProviderFactory.class); } } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java index 438173a99a..9f995d848a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java @@ -16,6 +16,7 @@ package com.opensymphony.xwork2.validator; import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.validators.URLValidator; @@ -36,11 +37,12 @@ public class URLValidatorTest extends XWorkTestCase { ValueStack stack; ActionContext actionContext; - + private TextProviderFactory tpf; + public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl1"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -54,7 +56,7 @@ public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception public void testInvalidEmptyValue() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl2"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -68,7 +70,7 @@ public void testInvalidEmptyValue() throws Exception { public void testInvalidValue() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl3"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -83,7 +85,7 @@ public void testInvalidValue() throws Exception { public void testValidUrl1() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl4"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -97,7 +99,7 @@ public void testValidUrl1() throws Exception { public void testValidUrl2() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object())); + validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl5"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -203,6 +205,7 @@ protected void setUp() throws Exception { super.setUp(); stack = ActionContext.getContext().getValueStack(); actionContext = ActionContext.getContext(); + tpf = container.inject(TextProviderFactory.class); } @Override diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/AppendingValidatorContextTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/AppendingValidatorContextTest.java index 8ce3fb8922..0446e972e5 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/AppendingValidatorContextTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/AppendingValidatorContextTest.java @@ -1,8 +1,12 @@ package com.opensymphony.xwork2.validator.validators; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import com.opensymphony.xwork2.CompositeTextProvider; +import com.opensymphony.xwork2.TextProvider; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.validator.DelegatingValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; @@ -23,12 +27,12 @@ public class AppendingValidatorContextTest extends XWorkTestCase { protected void setUp() throws Exception { super.setUp(); - action = new VisitorValidatorTestAction(); - ValidatorContext vc1 = new DelegatingValidatorContext(action); + action = container.inject(VisitorValidatorTestAction.class); + TextProviderFactory tpf = container.getInstance(TextProviderFactory.class); + ValidatorContext vc1 = new DelegatingValidatorContext(action, tpf); - VisitorFieldValidator.AppendingValidatorContext vc2 = new AppendingValidatorContext( - vc1, "value", FIRST_NAME, ""); - validatorContext = new AppendingValidatorContext(vc2, "value", SECOND_NAME, ""); + VisitorFieldValidator.AppendingValidatorContext vc2 = new AppendingValidatorContext(vc1, createTextProvider(action, vc1), FIRST_NAME, ""); + validatorContext = new AppendingValidatorContext(vc2, createTextProvider(action, vc2), SECOND_NAME, ""); } public void testGetFullFieldName() throws Exception { @@ -44,4 +48,15 @@ public void testAddFieldError() throws Exception { assertEquals(1, fieldErrors.size()); assertTrue(fieldErrors.containsKey(FULL_FIELD_NAME)); } + + private CompositeTextProvider createTextProvider(Object o, ValidatorContext parent) { + List textProviders = new LinkedList<>(); + if (o instanceof TextProvider) { + textProviders.add((TextProvider) o); + } + textProviders.add(parent); + + return new CompositeTextProvider(textProviders); + } + } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java index 9103169da4..fd4a480a6b 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java @@ -1,6 +1,7 @@ package com.opensymphony.xwork2.validator.validators; import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; @@ -13,10 +14,12 @@ public class DateRangeFieldValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2013, 6, 6)); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when @@ -29,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2012, Calendar.MARCH, 3)); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when @@ -43,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2014, Calendar.APRIL, 4)); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when @@ -88,6 +91,7 @@ private DateRangeFieldValidator prepareValidator(ValidationAction action, Valida public void setUp() throws Exception { super.setUp(); ActionContext.getContext().setLocale(new Locale("DE")); + tpf = container.inject(TextProviderFactory.class); } } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java index 680ea082ae..a729ec8b44 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java @@ -1,5 +1,6 @@ package com.opensymphony.xwork2.validator.validators; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; @@ -8,10 +9,17 @@ public class IntRangeFieldValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + + public void setUp() throws Exception { + super.setUp(); + tpf = container.inject(TextProviderFactory.class); + } + public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(100); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when @@ -24,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(98); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when @@ -38,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(102); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java index e8187d7af2..b2e5ad305a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java @@ -1,5 +1,6 @@ package com.opensymphony.xwork2.validator.validators; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; @@ -8,10 +9,17 @@ public class LongRangeFieldValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + + public void setUp() throws Exception { + super.setUp(); + tpf = container.inject(TextProviderFactory.class); + } + public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(100); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when @@ -24,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(98); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when @@ -38,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(102); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java index 2e33a7ffeb..906fcd3090 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java @@ -2,6 +2,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.GenericValidatorContext; @@ -9,6 +10,13 @@ public class RequiredStringValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + + public void setUp() throws Exception { + super.setUp(); + tpf = container.inject(TextProviderFactory.class); + } + public void testRequiredStringPass() throws Exception { // given ValueStack valueStack = ActionContext.getContext().getValueStack(); @@ -17,7 +25,7 @@ public void testRequiredStringPass() throws Exception { action.setStringValue("a string"); valueStack.push(action); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); RequiredStringValidator validator = new RequiredStringValidator(); validator.setValidatorContext(context); validator.setFieldName("stringValue"); @@ -37,7 +45,7 @@ public void testRequiredStringFails() throws Exception { ValidationAction action = new ValidationAction(); valueStack.push(action); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); RequiredStringValidator validator = new RequiredStringValidator(); validator.setValidatorContext(context); validator.setFieldName("stringValue"); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java index 0011ced5a4..18c450cfcc 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java @@ -1,5 +1,6 @@ package com.opensymphony.xwork2.validator.validators; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; @@ -8,10 +9,17 @@ public class ShortRangeFieldValidatorTest extends XWorkTestCase { + private TextProviderFactory tpf; + + public void setUp() throws Exception { + super.setUp(); + tpf = container.inject(TextProviderFactory.class); + } + public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction((short) 5); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when @@ -24,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction((short) 1); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when @@ -38,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction((short) 11); - ValidatorContext context = new GenericValidatorContext(action); + ValidatorContext context = new GenericValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when From c063704d279b6dc7d349c232f17b3b2aebe19b99 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:21:24 +0100 Subject: [PATCH 08/17] Renames class to match its purpose --- ...icValidatorContext.java => DummyValidatorContext.java} | 4 ++-- .../validator/validators/DateRangeFieldValidatorTest.java | 8 ++++---- .../validator/validators/IntRangeFieldValidatorTest.java | 8 ++++---- .../validator/validators/LongRangeFieldValidatorTest.java | 8 ++++---- .../validator/validators/RequiredStringValidatorTest.java | 6 +++--- .../validators/ShortRangeFieldValidatorTest.java | 8 ++++---- 6 files changed, 21 insertions(+), 21 deletions(-) rename core/src/test/java/com/opensymphony/xwork2/validator/{GenericValidatorContext.java => DummyValidatorContext.java} (96%) diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java b/core/src/test/java/com/opensymphony/xwork2/validator/DummyValidatorContext.java similarity index 96% rename from core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java rename to core/src/test/java/com/opensymphony/xwork2/validator/DummyValidatorContext.java index 948cd97f4a..9d3400f038 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/GenericValidatorContext.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/DummyValidatorContext.java @@ -26,14 +26,14 @@ * @author Mark Woon * @author Matthew Payne */ -public class GenericValidatorContext extends DelegatingValidatorContext { +public class DummyValidatorContext extends DelegatingValidatorContext { private Collection actionErrors; private Collection actionMessages; private Map> fieldErrors; - public GenericValidatorContext(Object object, TextProviderFactory tpf) { + public DummyValidatorContext(Object object, TextProviderFactory tpf) { super(object, tpf); } diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java index fd4a480a6b..6129fc0ae8 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/DateRangeFieldValidatorTest.java @@ -5,7 +5,7 @@ import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; -import com.opensymphony.xwork2.validator.GenericValidatorContext; +import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; import java.util.Calendar; @@ -19,7 +19,7 @@ public class DateRangeFieldValidatorTest extends XWorkTestCase { public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2013, 6, 6)); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when @@ -32,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2012, Calendar.MARCH, 3)); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when @@ -46,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(createDate(2014, Calendar.APRIL, 4)); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); DateRangeFieldValidator validator = prepareValidator(action, context); // when diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java index a729ec8b44..77037328b5 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java @@ -4,7 +4,7 @@ import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; -import com.opensymphony.xwork2.validator.GenericValidatorContext; +import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; public class IntRangeFieldValidatorTest extends XWorkTestCase { @@ -19,7 +19,7 @@ public void setUp() throws Exception { public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(100); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when @@ -32,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(98); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when @@ -46,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(102); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); IntRangeFieldValidator validator = prepareValidator(action, context); // when diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java index b2e5ad305a..bc14b57aaa 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java @@ -4,7 +4,7 @@ import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; -import com.opensymphony.xwork2.validator.GenericValidatorContext; +import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; public class LongRangeFieldValidatorTest extends XWorkTestCase { @@ -19,7 +19,7 @@ public void setUp() throws Exception { public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(100); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when @@ -32,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction(98); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when @@ -46,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(102); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); LongRangeFieldValidator validator = prepareValidator(action, context); // when diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java index 906fcd3090..1495733f90 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java @@ -5,7 +5,7 @@ import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; -import com.opensymphony.xwork2.validator.GenericValidatorContext; +import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; public class RequiredStringValidatorTest extends XWorkTestCase { @@ -25,7 +25,7 @@ public void testRequiredStringPass() throws Exception { action.setStringValue("a string"); valueStack.push(action); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); RequiredStringValidator validator = new RequiredStringValidator(); validator.setValidatorContext(context); validator.setFieldName("stringValue"); @@ -45,7 +45,7 @@ public void testRequiredStringFails() throws Exception { ValidationAction action = new ValidationAction(); valueStack.push(action); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); RequiredStringValidator validator = new RequiredStringValidator(); validator.setValidatorContext(context); validator.setFieldName("stringValue"); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java index 18c450cfcc..bb2766405c 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ShortRangeFieldValidatorTest.java @@ -4,7 +4,7 @@ import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; -import com.opensymphony.xwork2.validator.GenericValidatorContext; +import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; public class ShortRangeFieldValidatorTest extends XWorkTestCase { @@ -19,7 +19,7 @@ public void setUp() throws Exception { public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction((short) 5); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when @@ -32,7 +32,7 @@ public void testPassValidation() throws Exception { public void testMinValidation() throws Exception { // given ValidationAction action = prepareAction((short) 1); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when @@ -46,7 +46,7 @@ public void testMinValidation() throws Exception { public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction((short) 11); - ValidatorContext context = new GenericValidatorContext(action, tpf); + ValidatorContext context = new DummyValidatorContext(action, tpf); ShortRangeFieldValidator validator = prepareValidator(action, context); // when From 57106ccda2207edb52e575e16cfd47599e9c7110 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:21:28 +0100 Subject: [PATCH 09/17] Renames class to match its purpose --- .../AnnotationActionValidatorManagerTest.java | 12 ++++++------ .../xwork2/validator/RegexFieldValidatorTest.java | 12 ++++++------ .../xwork2/validator/URLValidatorTest.java | 10 +++++----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java index 10936f8f39..89c21e391e 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java @@ -128,7 +128,7 @@ public void testDefaultMessageInterpolation() { bean.setName("foo"); bean.setCount(99); - ValidatorContext context = new GenericValidatorContext(bean, tpf); + ValidatorContext context = new DummyValidatorContext(bean, tpf); annotationActionValidatorManager.validate(bean, "beanMessageBundle", context); assertTrue(context.hasErrors()); assertTrue(context.hasFieldErrors()); @@ -256,7 +256,7 @@ public void testMessageInterpolation() { bean.setName("foo"); bean.setCount(150); - ValidatorContext context = new GenericValidatorContext(bean, tpf); + ValidatorContext context = new DummyValidatorContext(bean, tpf); annotationActionValidatorManager.validate(bean, "beanMessageBundle", context); assertTrue(context.hasErrors()); assertTrue(context.hasFieldErrors()); @@ -294,7 +294,7 @@ public void testSkipUserMarkerActionLevelShortCircuit() { user.setEmail("bad_email"); user.setEmail2("bad_email"); - ValidatorContext context = new GenericValidatorContext(user, tpf); + ValidatorContext context = new DummyValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); @@ -336,7 +336,7 @@ public void testSkipAllActionLevelShortCircuit2() { user.setEmail("mark_bad_email_for_field_val@foo.com"); user.setEmail2("mark_bad_email_for_field_val@foo.com"); - ValidatorContext context = new GenericValidatorContext(user, tpf); + ValidatorContext context = new DummyValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); @@ -374,7 +374,7 @@ public void testActionLevelShortCircuit() throws Exception { user.setEmail("rainer_h(at)example.com"); - ValidatorContext context = new GenericValidatorContext(user, tpf); + ValidatorContext context = new DummyValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); // check field level errors @@ -405,7 +405,7 @@ public void testShortCircuitNoErrors() { user.setEmail("mark@mycompany.com"); user.setEmail2("mark@mycompany.com"); - ValidatorContext context = new GenericValidatorContext(user, tpf); + ValidatorContext context = new DummyValidatorContext(user, tpf); annotationActionValidatorManager.validate(user, null, context); assertFalse(context.hasErrors()); } catch (ValidationException ex) { diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java index bbb9588b37..5c7e94b059 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/RegexFieldValidatorTest.java @@ -53,7 +53,7 @@ public void testMatch() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -74,7 +74,7 @@ public void testMatchNoTrim() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setTrim(false); validator.setRegex("^Sec.*\\s"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -94,7 +94,7 @@ public void testFail() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -119,7 +119,7 @@ public void testNoFieldName() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName(null); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -152,7 +152,7 @@ public void testEmptyName() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("^Sec.*"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("username"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); @@ -172,7 +172,7 @@ public void testNoStringField() throws Exception { RegexFieldValidator validator = new RegexFieldValidator(); validator.setRegex("[0-9][0-9]"); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("age"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(testPerson); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java index 9f995d848a..ff9ab5041a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java @@ -42,7 +42,7 @@ public class URLValidatorTest extends XWorkTestCase { public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl1"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -56,7 +56,7 @@ public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception public void testInvalidEmptyValue() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl2"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -70,7 +70,7 @@ public void testInvalidEmptyValue() throws Exception { public void testInvalidValue() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl3"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -85,7 +85,7 @@ public void testInvalidValue() throws Exception { public void testValidUrl1() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl4"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); @@ -99,7 +99,7 @@ public void testValidUrl1() throws Exception { public void testValidUrl2() throws Exception { URLValidator validator = new URLValidator(); - validator.setValidatorContext(new GenericValidatorContext(new Object(), tpf)); + validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf)); validator.setFieldName("testingUrl5"); validator.setValueStack(ActionContext.getContext().getValueStack()); validator.validate(new MyObject()); From 451eb883070100dfc57c7635ddc80c57f82f8169 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:37:19 +0100 Subject: [PATCH 10/17] Adds missing anntoation to properly inject dependency --- .../xwork2/validator/DefaultActionValidatorManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java index 7ad0ac92db..48d552a010 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java @@ -85,6 +85,7 @@ public void setReloadingConfigs(String reloadingConfigs) { this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs); } + @Inject public void setTextProviderFactory(TextProviderFactory textProviderFactory) { this.textProviderFactory = textProviderFactory; } From f56c59c9829347255f5b161ac97dc51069b61fed Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:37:36 +0100 Subject: [PATCH 11/17] Defines TextProviderFactory as a bean --- core/src/main/resources/struts-default.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml index 26c89eac6e..a870c4c152 100644 --- a/core/src/main/resources/struts-default.xml +++ b/core/src/main/resources/struts-default.xml @@ -130,6 +130,7 @@ + From 55ea82cd4faaecf1f3ca1fffd4428db2471b952d Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 10 Mar 2017 09:40:20 +0100 Subject: [PATCH 12/17] Uses container to inject required dependencies --- .../xwork2/ActionSupportTest.java | 6 ++-- .../validator/ActionValidatorManagerTest.java | 34 ++++++++++--------- .../apache/struts2/views/jsp/TextTagTest.java | 4 +-- .../struts2/views/jsp/ui/TooltipTest.java | 9 +++-- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java index bd47c1c5ab..d5422a1b56 100644 --- a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java @@ -252,7 +252,7 @@ public void testGetTextsWithArrayArgs() throws Exception { public void testGetTextsWithListAndStack() throws Exception { ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); + MyActionSupport mas = container.inject(MyActionSupport.class); ValueStack stack = ActionContext.getContext().getValueStack(); @@ -270,7 +270,7 @@ public void testGetTextsWithListAndStack() throws Exception { public void testGetTextsWithArrayAndStack() throws Exception { ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); + MyActionSupport mas = container.inject(MyActionSupport.class); ValueStack stack = ActionContext.getContext().getValueStack(); @@ -313,7 +313,7 @@ public void testFormattingSupportWithConversionError() throws Exception { assertEquals("4567def", formatted); } - private class MyActionSupport extends ActionSupport { + public static class MyActionSupport extends ActionSupport { private Double val; diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java index 6d7eeeb696..872711a760 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java @@ -26,47 +26,47 @@ public void testValidate() throws Exception { /* MockAction.class */ // reference number ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack(); - final RequiredStringValidator referenceNumberRequiredStringValidator = new RequiredStringValidator(); + final RequiredStringValidator referenceNumberRequiredStringValidator = container.inject(RequiredStringValidator.class); referenceNumberRequiredStringValidator.setFieldName("referenceNumber"); referenceNumberRequiredStringValidator.setDefaultMessage("Reference number is required"); referenceNumberRequiredStringValidator.setValueStack(stack); // order - final RequiredFieldValidator orderRequiredValidator = new RequiredFieldValidator(); + final RequiredFieldValidator orderRequiredValidator = container.inject(RequiredFieldValidator.class); orderRequiredValidator.setFieldName("order"); orderRequiredValidator.setDefaultMessage("Order is required"); orderRequiredValidator.setValueStack(stack); // customer - final RequiredFieldValidator customerRequiredValidator = new RequiredFieldValidator(); + final RequiredFieldValidator customerRequiredValidator = container.inject(RequiredFieldValidator.class); customerRequiredValidator.setFieldName("customer"); customerRequiredValidator.setDefaultMessage("Customer is required"); customerRequiredValidator.setValueStack(stack); - final VisitorFieldValidator customerVisitorValidator = new VisitorFieldValidator(); + final VisitorFieldValidator customerVisitorValidator = container.inject(VisitorFieldValidator.class); customerVisitorValidator.setAppendPrefix(true); customerVisitorValidator.setFieldName("customer"); customerVisitorValidator.setValueStack(stack); /* Customer.class */ // customer -> name - final RequiredStringValidator customerNameRequiredStringValidator = new RequiredStringValidator(); + final RequiredStringValidator customerNameRequiredStringValidator = container.inject(RequiredStringValidator.class); customerNameRequiredStringValidator.setFieldName("name"); customerNameRequiredStringValidator.setDefaultMessage("Name is required"); customerNameRequiredStringValidator.setValueStack(stack); // customer -> age - final RequiredFieldValidator customerAgeRequiredValidator = new RequiredFieldValidator(); + final RequiredFieldValidator customerAgeRequiredValidator = container.inject(RequiredFieldValidator.class); customerAgeRequiredValidator.setFieldName("age"); customerAgeRequiredValidator.setDefaultMessage("Age is required"); customerAgeRequiredValidator.setValueStack(stack); // customer -> Address - final RequiredFieldValidator customerAddressRequiredFieldValidator = new RequiredFieldValidator(); + final RequiredFieldValidator customerAddressRequiredFieldValidator = container.inject(RequiredFieldValidator.class); customerAddressRequiredFieldValidator.setFieldName("address"); customerAddressRequiredFieldValidator.setDefaultMessage("Address is required"); customerAddressRequiredFieldValidator.setValueStack(stack); - final VisitorFieldValidator customerAddressVisitorFieldValidator = new VisitorFieldValidator(); + final VisitorFieldValidator customerAddressVisitorFieldValidator = container.inject(VisitorFieldValidator.class); customerAddressVisitorFieldValidator.setFieldName("address"); customerAddressVisitorFieldValidator.setAppendPrefix(true); //customerAddressVisitorFieldValidator.setDefaultMessage(""); @@ -76,26 +76,26 @@ public void testValidate() throws Exception { /* Address.class */ // customer -> Address -> street - final RequiredStringValidator customerAddressStreetRequiredFieldValidator = new RequiredStringValidator(); + final RequiredStringValidator customerAddressStreetRequiredFieldValidator = container.inject(RequiredStringValidator.class); customerAddressStreetRequiredFieldValidator.setFieldName("street"); customerAddressStreetRequiredFieldValidator.setDefaultMessage("Street is required"); customerAddressStreetRequiredFieldValidator.setShortCircuit(true); customerAddressStreetRequiredFieldValidator.setValueStack(stack); - final RequiredStringValidator customerAddressStreetRequiredFieldValidator2 = new RequiredStringValidator(); + final RequiredStringValidator customerAddressStreetRequiredFieldValidator2 = container.inject(RequiredStringValidator.class); customerAddressStreetRequiredFieldValidator2.setFieldName("street"); customerAddressStreetRequiredFieldValidator2.setDefaultMessage("Street is required 2"); customerAddressStreetRequiredFieldValidator2.setShortCircuit(true); customerAddressStreetRequiredFieldValidator2.setValueStack(stack); // customer -> Address -> pobox - final RequiredStringValidator customerAddressPoboxRequiredFieldValidator = new RequiredStringValidator(); + final RequiredStringValidator customerAddressPoboxRequiredFieldValidator = container.inject(RequiredStringValidator.class); customerAddressPoboxRequiredFieldValidator.setFieldName("pobox"); customerAddressPoboxRequiredFieldValidator.setDefaultMessage("PO Box is required"); customerAddressPoboxRequiredFieldValidator.setShortCircuit(false); customerAddressPoboxRequiredFieldValidator.setValueStack(stack); - final RequiredStringValidator customerAddressPoboxRequiredFieldValidator2 = new RequiredStringValidator(); + final RequiredStringValidator customerAddressPoboxRequiredFieldValidator2 = container.inject(RequiredStringValidator.class); customerAddressPoboxRequiredFieldValidator2.setFieldName("pobox"); customerAddressPoboxRequiredFieldValidator2.setDefaultMessage("PO Box is required 2"); customerAddressPoboxRequiredFieldValidator2.setShortCircuit(false); @@ -146,10 +146,12 @@ else if (clazz.isAssignableFrom(Address.class)) { return Collections.emptyList(); } }; + container.inject(validatorManager); + customerVisitorValidator.setActionValidatorManager(validatorManager); customerAddressVisitorFieldValidator.setActionValidatorManager(validatorManager); - MockAction action = new MockAction(); + MockAction action = container.inject(MockAction.class); stack.push(action); validatorManager.validate(action, "ctx"); @@ -170,7 +172,7 @@ else if (clazz.isAssignableFrom(Address.class)) { assertEquals((action.getFieldErrors().get("customer.address.pobox")).size(), 2); } - private class MockAction extends ActionSupport { + public static class MockAction extends ActionSupport { private String referenceNumber; private Integer order; @@ -188,7 +190,7 @@ private class MockAction extends ActionSupport { } - private class Customer { + public static class Customer { private String name; private Integer age; private Address address = new Address(); @@ -203,7 +205,7 @@ private class Customer { public void setAddress(Address address) { this.address = address; } } - private class Address { + public static class Address { private String street; private String pobox; diff --git a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java index 661acd32e1..dc4c9f6867 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java @@ -178,7 +178,7 @@ public void testTextTagUsesValueStackInRequestNotActionContext() throws JspExcep ValueStack newStack = container.getInstance(ValueStackFactory.class).createValueStack(); newStack.getContext().put(ActionContext.LOCALE, foreignLocale); newStack.getContext().put(ActionContext.CONTAINER, container); - newStack.push(new TestAction1()); + newStack.push(container.inject(TestAction1.class)); request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack); assertNotSame(ActionContext.getContext().getValueStack().peek(), newStack.peek()); @@ -189,7 +189,7 @@ public void testTextTagUsesValueStackInRequestNotActionContext() throws JspExcep public void testTextTagUsesLocaleFromValueStack() throws JspException { stack.pop(); - stack.push(new TestAction1()); + stack.push(container.inject(TestAction1.class)); Locale defaultLocale = getDefaultLocale(); Locale foreignLocale = getForeignLocale(); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java index 971ecce907..e11c7c3451 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TooltipTest.java @@ -370,15 +370,14 @@ public void testUsingParamBodyValueToSetConfigurations() throws Exception { verify(TooltipTest.class.getResource("tooltip-3.txt")); } - /** - * @throws Exception - * - */ public void setUp() throws Exception { super.setUp(); - initDispatcher(new HashMap(){{ + + initDispatcher(new HashMap(){{ put("configProviders", TestConfigurationProvider.class.getName()); }}); createMocks(); + + } } From 2b3082ee40360740b8d5221cc08cc428043e5caf Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 13 Mar 2017 06:45:37 +0100 Subject: [PATCH 13/17] Uses more direct message to link with proper resource bundle --- .../xwork2/validator/VisitorFieldValidatorTest.java | 7 +++---- .../resources/com/opensymphony/xwork2/TestBean.properties | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java index 70e4b3b18d..a38764e789 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java @@ -35,11 +35,10 @@ public class VisitorFieldValidatorTest extends XWorkTestCase { public void setUp() throws Exception { super.setUp(); - action = new VisitorValidatorTestAction(); - container.inject(action); + action = container.inject(VisitorValidatorTestAction.class); TestBean bean = action.getBean(); - Calendar cal = new GregorianCalendar(1900, 01, 01); + Calendar cal = new GregorianCalendar(1900, 1, 1); bean.setBirth(cal.getTime()); bean.setCount(-1); @@ -98,7 +97,7 @@ public void testBeanMessagesUseBeanResourceBundle() throws Exception { assertEquals(1, beanCountMessages.size()); String beanCountMessage = beanCountMessages.get(0); - assertEquals("bean: Model: Count must be between 1 and 100, current value is -1.", beanCountMessage); + assertEquals("bean: TestBean model: Count must be between 1 and 100, current value is -1.", beanCountMessage); } public void testCollectionValidation() throws Exception { diff --git a/core/src/test/resources/com/opensymphony/xwork2/TestBean.properties b/core/src/test/resources/com/opensymphony/xwork2/TestBean.properties index 86eab13dca..83a3aa945b 100644 --- a/core/src/test/resources/com/opensymphony/xwork2/TestBean.properties +++ b/core/src/test/resources/com/opensymphony/xwork2/TestBean.properties @@ -1 +1 @@ -invalid.count=Model: Count must be between ${min} and ${max}, current value is ${count}. +invalid.count=TestBean model: Count must be between ${min} and ${max}, current value is ${count}. From 664895a338a2079233b92d211b91be33a5f586ea Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 13 Mar 2017 06:47:03 +0100 Subject: [PATCH 14/17] Creates dedicated TextProvider for given class --- .../xwork2/validator/validators/VisitorFieldValidator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java index e5c54bc566..8fd62a63ae 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java @@ -186,6 +186,8 @@ private CompositeTextProvider createTextProvider(Object o, ValidatorContext pare List textProviders = new LinkedList<>(); if (o instanceof TextProvider) { textProviders.add((TextProvider) o); + } else { + textProviders.add(textProviderFactory.createInstance(o.getClass())); } textProviders.add(parent); From ce2261f6f590b4ab963ba815d40c02736171437a Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 13 Mar 2017 06:47:11 +0100 Subject: [PATCH 15/17] Drops static --- .../xwork2/validator/DelegatingValidatorContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java index a9a8b04dfd..79507bbf53 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java @@ -193,7 +193,7 @@ public boolean hasFieldErrors() { return validationAware.hasFieldErrors(); } - public static TextProvider makeTextProvider(Object object, TextProviderFactory textProviderFactory) { + public TextProvider makeTextProvider(Object object, TextProviderFactory textProviderFactory) { // the object argument passed through here will most probably be an ActionSupport descendant which does // implements TextProvider. if (object != null && object instanceof DelegatingValidatorContext) { From 6d60064bea0481b684bf284ebea285c33684ca3b Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 13 Mar 2017 06:51:47 +0100 Subject: [PATCH 16/17] Injects missing dependency --- .../interceptor/BeanValidationInterceptor.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/bean-validation/src/main/java/org/apache/struts/beanvalidation/validation/interceptor/BeanValidationInterceptor.java b/plugins/bean-validation/src/main/java/org/apache/struts/beanvalidation/validation/interceptor/BeanValidationInterceptor.java index 3cd56e91bd..3123a4b509 100644 --- a/plugins/bean-validation/src/main/java/org/apache/struts/beanvalidation/validation/interceptor/BeanValidationInterceptor.java +++ b/plugins/bean-validation/src/main/java/org/apache/struts/beanvalidation/validation/interceptor/BeanValidationInterceptor.java @@ -23,6 +23,7 @@ import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import com.opensymphony.xwork2.util.AnnotationUtils; @@ -55,7 +56,9 @@ public class BeanValidationInterceptor extends MethodFilterInterceptor { private static final Logger LOG = LogManager.getLogger(BeanValidationInterceptor.class); + protected BeanValidationManager beanValidationManager; + protected TextProviderFactory textProviderFactory; protected boolean convertToUtf8 = false; protected String convertFromEncoding = "ISO-8859-1"; @@ -64,6 +67,11 @@ public void setBeanValidationManager(BeanValidationManager beanValidationManager this.beanValidationManager = beanValidationManager; } + @Inject + public void setTextProviderFactory(TextProviderFactory textProviderFactory) { + this.textProviderFactory = textProviderFactory; + } + @Inject(value = ValidatorConstants.CONVERT_MESSAGE_TO_UTF8, required = false) public void setConvertToUtf8(String convertToUtf8) { this.convertToUtf8 = BooleanUtils.toBoolean(convertToUtf8); @@ -122,7 +130,7 @@ protected void performBeanValidation(Object action, Validator validator) { @SuppressWarnings("nls") private void addBeanValidationErrors(Set> constraintViolations, Object action) { if (constraintViolations != null) { - ValidatorContext validatorContext = new DelegatingValidatorContext(action); + ValidatorContext validatorContext = new DelegatingValidatorContext(action, textProviderFactory); for (ConstraintViolation constraintViolation : constraintViolations) { String key = constraintViolation.getMessage(); String message = key; From 8852e3d1183f1ce18dbf8dc9bb1da465eaa9f1c3 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 13 Mar 2017 06:56:07 +0100 Subject: [PATCH 17/17] Injects missing dependency --- .../oval/interceptor/OValValidationInterceptor.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/OValValidationInterceptor.java b/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/OValValidationInterceptor.java index 6465020a95..473c9a7a17 100644 --- a/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/OValValidationInterceptor.java +++ b/plugins/oval/src/main/java/org/apache/struts2/oval/interceptor/OValValidationInterceptor.java @@ -23,6 +23,7 @@ import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.Validateable; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; @@ -57,13 +58,19 @@ public class OValValidationInterceptor extends MethodFilterInterceptor { protected boolean alwaysInvokeValidate = true; protected boolean programmatic = true; protected OValValidationManager validationManager; - private boolean validateJPAAnnotations; + protected boolean validateJPAAnnotations; + protected TextProviderFactory textProviderFactory; @Inject public void setValidationManager(OValValidationManager validationManager) { this.validationManager = validationManager; } + @Inject + public void setTextProviderFactory(TextProviderFactory textProviderFactory) { + this.textProviderFactory = textProviderFactory; + } + /** * Enable OVal support for JPA */ @@ -170,7 +177,7 @@ protected void performOValValidation(Object action, ValueStack valueStack, Strin private void addValidationErrors(ConstraintViolation[] violations, Object action, ValueStack valueStack, String parentFieldname) { if (violations != null) { - ValidatorContext validatorContext = new DelegatingValidatorContext(action); + ValidatorContext validatorContext = new DelegatingValidatorContext(action, textProviderFactory); for (ConstraintViolation violation : violations) { //translate message String key = violation.getMessage();