Skip to content

Commit 639cdcd

Browse files
committed
Follow up fixed for EnabledMixin leaks state and listeners #318
Updated EnabledMixin#TestCase to include testMultiSetEnabledState()
1 parent 4024648 commit 639cdcd

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

gwt-material/src/main/java/gwt/material/design/client/base/mixin/EnabledMixin.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,13 @@ public boolean isEnabled() {
6363
}
6464

6565
@Override
66-
public void setEnabled(boolean enabled) {
67-
if (!uiObject.isAttached() && handler == null) {
66+
public void setEnabled(final boolean enabled) {
67+
if (!uiObject.isAttached()) {
68+
if (handler != null) {
69+
handler.removeHandler();
70+
handler = null;
71+
}
72+
6873
handler = uiObject.addAttachHandler(event -> {
6974
if (event.isAttached()) {
7075
applyEnabled(enabled, uiObject);

gwt-material/src/test/java/gwt/material/design/client/ui/base/MaterialWidgetTestCase.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -352,13 +352,13 @@ protected <H extends UIObject & HasEnabled> void checkEnabled(HasEnabled widget,
352352
assertFalse(element.hasClassName(CssName.DISABLED));
353353
assertFalse(element.hasAttribute(CssName.DISABLED));
354354
}
355-
assertEquals(widget.isEnabled(), true);
355+
assertTrue(widget.isEnabled());
356356
widget.setEnabled(false);
357357
if(checkElement) {
358358
assertTrue(element.hasClassName(CssName.DISABLED));
359359
assertTrue(element.hasAttribute(CssName.DISABLED));
360360
}
361-
assertEquals(target.isEnabled(), false);
361+
assertFalse(target.isEnabled());
362362
}
363363

364364
// Generic Event Handling
@@ -1006,18 +1006,39 @@ public void testColor() {
10061006
public void testEnabled() {
10071007
// UiBinder
10081008
// given
1009-
T widget = getWidget(false);
1009+
T widget = getWidget(true);
10101010

10111011
// when / then
1012-
checkEnabled(widget, widget, false);
1012+
checkEnabled(widget, widget, true);
1013+
}
1014+
1015+
public void testMultiSetEnabledState() {
1016+
// given
1017+
T widget = getWidget();
1018+
1019+
// when / then
1020+
widget.setEnabled(false);
1021+
assertFalse(false);
1022+
1023+
// when / then
1024+
widget.setEnabled(true);
1025+
assertTrue(widget.isEnabled());
1026+
1027+
// when / then
1028+
widget.setEnabled(false);
1029+
assertFalse(widget.isEnabled());
10131030

1014-
// Standard
10151031
// given
10161032
attachWidget();
10171033

10181034
// when / then
1035+
assertFalse(widget.isEnabled());
10191036
widget.setEnabled(true);
1020-
checkEnabled(widget, widget, true);
1037+
assertTrue(widget.isEnabled());
1038+
1039+
// when / then
1040+
widget.setEnabled(false);
1041+
assertFalse(widget.isEnabled());
10211042
}
10221043

10231044
public void testId() {

0 commit comments

Comments
 (0)