CustomBooleanEditor avoids potential NPE in case of allowEmpty=false
Issue: SPR-13010
This commit is contained in:
parent
d14e29a5c0
commit
549e888cd7
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -95,6 +95,7 @@ public class CustomBooleanEditor extends PropertyEditorSupport {
|
|||
this.allowEmpty = allowEmpty;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setAsText(String text) throws IllegalArgumentException {
|
||||
String input = (text != null ? text.trim() : null);
|
||||
|
@ -102,20 +103,20 @@ public class CustomBooleanEditor extends PropertyEditorSupport {
|
|||
// Treat empty String as null value.
|
||||
setValue(null);
|
||||
}
|
||||
else if (this.trueString != null && input.equalsIgnoreCase(this.trueString)) {
|
||||
else if (this.trueString != null && this.trueString.equalsIgnoreCase(input)) {
|
||||
setValue(Boolean.TRUE);
|
||||
}
|
||||
else if (this.falseString != null && input.equalsIgnoreCase(this.falseString)) {
|
||||
else if (this.falseString != null && this.falseString.equalsIgnoreCase(input)) {
|
||||
setValue(Boolean.FALSE);
|
||||
}
|
||||
else if (this.trueString == null &&
|
||||
(input.equalsIgnoreCase(VALUE_TRUE) || input.equalsIgnoreCase(VALUE_ON) ||
|
||||
input.equalsIgnoreCase(VALUE_YES) || input.equals(VALUE_1))) {
|
||||
(VALUE_TRUE.equalsIgnoreCase(input) || VALUE_ON.equalsIgnoreCase(input) ||
|
||||
VALUE_YES.equalsIgnoreCase(input) || VALUE_1.equals(input))) {
|
||||
setValue(Boolean.TRUE);
|
||||
}
|
||||
else if (this.falseString == null &&
|
||||
(input.equalsIgnoreCase(VALUE_FALSE) || input.equalsIgnoreCase(VALUE_OFF) ||
|
||||
input.equalsIgnoreCase(VALUE_NO) || input.equals(VALUE_0))) {
|
||||
(VALUE_FALSE.equalsIgnoreCase(input) || VALUE_OFF.equalsIgnoreCase(input) ||
|
||||
VALUE_NO.equalsIgnoreCase(input) || VALUE_0.equals(input))) {
|
||||
setValue(Boolean.FALSE);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -59,7 +59,6 @@ import static org.junit.Assert.*;
|
|||
* @author Rob Harrop
|
||||
* @author Arjen Poutsma
|
||||
* @author Chris Beams
|
||||
*
|
||||
* @since 10.06.2003
|
||||
*/
|
||||
public class CustomEditorTests {
|
||||
|
@ -302,8 +301,8 @@ public class CustomEditorTests {
|
|||
|
||||
@Test
|
||||
public void testCustomBooleanEditorWithSpecialTrueAndFalseStrings() throws Exception {
|
||||
final String trueString = "pechorin";
|
||||
final String falseString = "nash";
|
||||
String trueString = "pechorin";
|
||||
String falseString = "nash";
|
||||
|
||||
CustomBooleanEditor editor = new CustomBooleanEditor(trueString, falseString, false);
|
||||
|
||||
|
@ -320,6 +319,14 @@ public class CustomEditorTests {
|
|||
editor.setAsText(falseString.toUpperCase());
|
||||
assertFalse(((Boolean) editor.getValue()).booleanValue());
|
||||
assertEquals(falseString, editor.getAsText());
|
||||
|
||||
try {
|
||||
editor.setAsText(null);
|
||||
fail("Should have thrown IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -685,26 +692,40 @@ public class CustomEditorTests {
|
|||
@Test
|
||||
public void testCustomBooleanEditor() {
|
||||
CustomBooleanEditor editor = new CustomBooleanEditor(false);
|
||||
|
||||
editor.setAsText("true");
|
||||
assertEquals(Boolean.TRUE, editor.getValue());
|
||||
assertEquals("true", editor.getAsText());
|
||||
|
||||
editor.setAsText("false");
|
||||
assertEquals(Boolean.FALSE, editor.getValue());
|
||||
assertEquals("false", editor.getAsText());
|
||||
|
||||
editor.setValue(null);
|
||||
assertEquals(null, editor.getValue());
|
||||
assertEquals("", editor.getAsText());
|
||||
|
||||
try {
|
||||
editor.setAsText(null);
|
||||
fail("Should have thrown IllegalArgumentException");
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCustomBooleanEditorWithEmptyAsNull() {
|
||||
CustomBooleanEditor editor = new CustomBooleanEditor(true);
|
||||
|
||||
editor.setAsText("true");
|
||||
assertEquals(Boolean.TRUE, editor.getValue());
|
||||
assertEquals("true", editor.getAsText());
|
||||
|
||||
editor.setAsText("false");
|
||||
assertEquals(Boolean.FALSE, editor.getValue());
|
||||
assertEquals("false", editor.getAsText());
|
||||
|
||||
editor.setValue(null);
|
||||
assertEquals(null, editor.getValue());
|
||||
assertEquals("", editor.getAsText());
|
||||
|
@ -750,7 +771,7 @@ public class CustomEditorTests {
|
|||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// expected
|
||||
assertTrue(ex.getMessage().indexOf("10") != -1);
|
||||
assertTrue(ex.getMessage().contains("10"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue