Hi Kevin,

I'm not an expert on ERXValidation, but you're correct. The ERXLocalizer class 
has not been initialized properly. Unfortunately, WOUnit doesn't load the 
Properties file before the test execution as well as it doesn't provide means 
for the ERXLocalizer to initialize properly. As a workaround, you can manually 
load the Properties file and initialize the ERXLocalizer in a static method 
annotated with @BeforeClass.

I've created two issues [1] [2] and will take a closer look at this requirement.

[1]https://github.com/hprange/wounit/issues/24
[2]https://github.com/hprange/wounit/issues/25

Cheers,

Henrique

On 15/12/2011, at 17:15, Kevin Hinkson wrote:

> Hi everyone,
> 
> I have a model framework that I am currently testing using WOUnit. For the 
> Account EO I have a unit test to ensure that the email attribute is valid 
> before saving. That worked fine until I started changing the code to be 
> localizable.
> 
> I have a ValidationTemplate.strings in the framework under Resources -> 
> English.lproj -> ValidationTemplate.strings
> 
> Values in the template
> {
>     "EmailFormatException" = "A valid <b>@@displayNameForProperty@@</b> is 
> required.";
>     "Account.email.EmailFormatException" = "<b>@@displayNameForProperty@@</b> 
> must be a valid email address.";
> }
> 
> Properties set:
> 
> # Localization
> er.extensions.ERXLocalizer.defaultLanguage=English
> er.extensions.ERXLocalizer.fileNamesToWatch=("Localizable.strings","ValidationTemplate.strings")
> er.extensions.ERXLocalizer.availableLanguages=(English)
> er.extensions.ERXLocalizer.frameworkSearchPath=(app,ERDirectToWeb,ERExtensions)
> er.extensions.ERXLocalizer.useLocalizedFormatters=true
> 
> 
> Validation code:
> 
>       public String validateEmail(String newEmail) {
>               ERXValidationFactory factory = 
> ERXValidationFactory.defaultFactory();
>               
>               if (!Account.isValidEmail(newEmail)) {
>                       ERXValidationException exception = 
> factory.createCustomException(this, Account.EMAIL_KEY, newEmail, 
> "EmailFormatException");
>                       throw exception;
>               }
>               
>               return newEmail;
>       }
> 
> When I run the unit test for the Account EO I get a stack trace in the logs:
> 
> - Undefined Validation Template entity "Account" property 
> "EmailFormatException" type "CustomMethodException" target language "English"
> java.lang.Throwable
>       at 
> er.extensions.validation.ERXValidationFactory.templateForEntityPropertyType(ERXValidationFactory.java:554)
>       at 
> er.extensions.validation.ERXValidationFactory.templateForException(ERXValidationFactory.java:448)
>       at 
> er.extensions.validation.ERXValidationFactory.messageForException(ERXValidationFactory.java:394)
>       at 
> er.extensions.validation.ERXValidationException.getMessage(ERXValidationException.java:133)
>       at 
> com.wounit.matchers.CanBeSavedMatcher.describeTo(CanBeSavedMatcher.java:53)
>       at 
> org.hamcrest.BaseDescription.appendDescriptionOf(BaseDescription.java:21)
>       at com.wounit.matchers.EOAssert.confirmImplementation(EOAssert.java:253)
>       at com.wounit.matchers.EOAssert.confirm(EOAssert.java:216)
>       at 
> com.coralstone.envoy.modeltests.AccountTest.cannotSaveInvalidEmail(AccountTest.java:61)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>       at 
> com.wounit.rules.AbstractEditingContextRule$1.evaluate(AbstractEditingContextRule.java:141)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>       at 
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> 
> 
> It looks to me as if maybe the validation template cannot be found but I'm 
> not certain what would cause that. Possibly there is something I need to load 
> before running the test? Does anyone know what that might be?
> 
> — Kevin Hinkson.
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/hprange%40gmail.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to