diff options
author | breynolds | 2007-07-14 20:25:04 +0000 |
---|---|---|
committer | breynolds | 2007-07-14 20:25:04 +0000 |
commit | b81b84d892363e9113822aabd223cc5100fc314c (patch) | |
tree | 965e346948ae80d405e302633c073f4bda28585e | |
parent | ebcd7a53e9759733abe6040d65dec248323ec208 (diff) | |
download | org.eclipse.e4.databinding-b81b84d892363e9113822aabd223cc5100fc314c.tar.gz org.eclipse.e4.databinding-b81b84d892363e9113822aabd223cc5100fc314c.tar.xz org.eclipse.e4.databinding-b81b84d892363e9113822aabd223cc5100fc314c.zip |
FIXED - bug 194353: [DataBinding] AbstractStringToNumberValidator caches message across validation requests
https://bugs.eclipse.org/bugs/show_bug.cgi?id=194353
3 files changed, 59 insertions, 6 deletions
diff --git a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/AbstractStringToNumberValidator.java b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/AbstractStringToNumberValidator.java index 88475b0d..3cf8f0b2 100644 --- a/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/AbstractStringToNumberValidator.java +++ b/bundles/org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/validation/AbstractStringToNumberValidator.java @@ -32,7 +32,6 @@ public abstract class AbstractStringToNumberValidator implements IValidator { private final Number max; private String outOfRangeMessage; - private String parseErrorMessage; /** * Constructs a new instance. @@ -79,11 +78,8 @@ public abstract class AbstractStringToNumberValidator implements IValidator { return ValidationStatus.error(outOfRangeMessage); } } else if (result.getPosition() != null) { - if (parseErrorMessage == null) { - parseErrorMessage = StringToNumberParser - .createParseErrorMessage((String) value, result - .getPosition()); - } + String parseErrorMessage = StringToNumberParser.createParseErrorMessage( + (String) value, result.getPosition()); return ValidationStatus.error(parseErrorMessage); } diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java new file mode 100644 index 00000000..bf42d497 --- /dev/null +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2007 Brad Reynolds and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Brad Reynolds - initial API and implementation + ******************************************************************************/ + +package org.eclipse.core.tests.internal.databinding.validation; + +import junit.framework.TestCase; + +import org.eclipse.core.databinding.conversion.StringToNumberConverter; +import org.eclipse.core.internal.databinding.validation.AbstractStringToNumberValidator; +import org.eclipse.core.internal.databinding.validation.NumberFormatConverter; +import org.eclipse.core.runtime.IStatus; + +/** + * Tests for AbstractStringToNumberValidator. Most tests should be included in + * StringToNumberValidatorTestHarness. This class is for the edge cases. + * + * @since 1.0.200 + */ +public class AbstractStringToNumberValidatorTest extends TestCase { + /** + * Test for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=194353. + * + * @throws Exception + */ + public void testErrorMessagesAreNotCached() throws Exception { + NumberFormatConverter c = StringToNumberConverter.toInteger(false); + ValidatorStub v = new ValidatorStub(c); + + IStatus status1 = v.validate("1a"); + assertEquals(IStatus.ERROR, status1.getSeverity()); + + IStatus status2 = v.validate("2b"); + assertEquals(IStatus.ERROR, status2.getSeverity()); + + assertFalse("messages should not be equal", status1.getMessage().equals(status2.getMessage())); + } + + static class ValidatorStub extends AbstractStringToNumberValidator { + ValidatorStub(NumberFormatConverter c) { + super(c, new Integer(Integer.MIN_VALUE), new Integer(Integer.MAX_VALUE)); + } + + protected boolean isInRange(Number number) { + return true; + } + } +} diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java index a1987d6e..aea56bd1 100644 --- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java +++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java @@ -87,6 +87,7 @@ import org.eclipse.core.tests.internal.databinding.observable.UnmodifiableObserv import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableListTest; import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableSetTest; import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableValueTest; +import org.eclipse.core.tests.internal.databinding.validation.AbstractStringToNumberValidatorTest; import org.eclipse.core.tests.internal.databinding.validation.NumberToByteValidatorTest; import org.eclipse.core.tests.internal.databinding.validation.NumberToDoubleValidatorTest; import org.eclipse.core.tests.internal.databinding.validation.NumberToFloatValidatorTest; @@ -229,6 +230,7 @@ public class BindingTestSuite extends TestSuite { addTestSuite(DetailObservableValueTest.class); // org.eclipse.core.tests.internal.databinding.validation + addTestSuite(AbstractStringToNumberValidatorTest.class); addTestSuite(NumberToByteValidatorTest.class); addTestSuite(NumberToDoubleValidatorTest.class); addTestSuite(NumberToFloatValidatorTest.class); |