diff options
author | Anastasia Smirnova <anasmi@utu.fi> | 2018-03-22 15:39:18 +0200 |
---|---|---|
committer | Teemu Suo-Anttila <tsuoanttila@users.noreply.github.com> | 2018-03-22 15:39:18 +0200 |
commit | 6fb2d1a98076c6fbb9ba014fab37d7bf7a6e6a62 (patch) | |
tree | 21e73157bb46a84baf2a3fc1cf2b5f7c52df949f /uitest | |
parent | 1187cf22f06df587b2a1ec1068be88e2b70c888d (diff) | |
download | vaadin-framework-6fb2d1a98076c6fbb9ba014fab37d7bf7a6e6a62.tar.gz vaadin-framework-6fb2d1a98076c6fbb9ba014fab37d7bf7a6e6a62.zip |
Correctly handle data providers with overriden getId (#10728)
Fixes #10647
Fixes #10498
Diffstat (limited to 'uitest')
4 files changed, 235 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithId.java b/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithId.java new file mode 100644 index 0000000000..408e786a91 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithId.java @@ -0,0 +1,71 @@ +package com.vaadin.tests.components.checkboxgroup; + +import com.vaadin.data.provider.DataProvider; +import com.vaadin.data.provider.ListDataProvider; +import com.vaadin.server.SerializablePredicate; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.CheckBoxGroup; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Objects; + +public class CheckCheckBoxGroupWithId extends AbstractTestUIWithLog { + + @Override + protected void setup(VaadinRequest request) { + DataProvider<MyObject, SerializablePredicate<MyObject>> dataProvider = new ListDataProvider<MyObject>( + Arrays.asList(new MyObject("Yellow", "real"), + new MyObject("Red", "real"))) { + @Override + public Object getId(MyObject item) { + return item.getName(); + } + }; + + CheckBoxGroup<MyObject> checkBoxGroup = new CheckBoxGroup<>(); + checkBoxGroup.setItemCaptionGenerator(MyObject::getName); + checkBoxGroup.setDataProvider(dataProvider); + checkBoxGroup.setValue( + new HashSet<>(Arrays.asList(new MyObject("Yellow", null)))); + + addComponent(checkBoxGroup); + addButton("Deselect", + event -> checkBoxGroup.deselect(new MyObject("Yellow", "XX"))); + } + + public static class MyObject { + private final String name; + private final String other; + + public MyObject(String name, String other) { + this.name = name; + this.other = other; + } + + public String getName() { + return name; + } + + public String getOther() { + return other; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + MyObject myObject = (MyObject) o; + return Objects.equals(name, myObject.name) + && Objects.equals(other, myObject.other); + } + + @Override + public int hashCode() { + return Objects.hash(name, other); + } + } +} diff --git a/uitest/src/main/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProvider.java b/uitest/src/main/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProvider.java new file mode 100644 index 0000000000..e6dce9a443 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProvider.java @@ -0,0 +1,110 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.twincolselect; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Objects; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.data.provider.ListDataProvider; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; +import com.vaadin.ui.TwinColSelect; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class TwinColSelectAndIdBasedDataProvider extends AbstractTestUIWithLog { + + public static class MyObject { + private int id; + private String name; + + public MyObject() { + + } + + public MyObject(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "MyObject{" + "id=" + id + ", name='" + name + '\'' + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MyObject myObject = (MyObject) o; + return id == myObject.id && Objects.equals(name, myObject.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + } + + @Override + protected void setup(VaadinRequest request) { + ListDataProvider<MyObject> dataProvider = new ListDataProvider<MyObject>( + Arrays.asList(new MyObject(0, "Zero"), + new MyObject(1, "One"))) { + + @Override + public Object getId(MyObject item) { + return item.getId(); + } + }; + + TwinColSelect<MyObject> twinColSelect = new TwinColSelect<>(); + twinColSelect.setDataProvider(dataProvider); + + twinColSelect.setValue(Collections.singleton(new MyObject(1, null))); + + twinColSelect.addValueChangeListener( + event1 -> log.log("value: " + event1.getValue())); + + addComponent(twinColSelect); + addComponent(new Button("Deselect id=1", e -> { + twinColSelect.deselect(new MyObject(1, "foo")); + })); + } + +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithIdTest.java b/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithIdTest.java new file mode 100644 index 0000000000..afcaae52f3 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckCheckBoxGroupWithIdTest.java @@ -0,0 +1,26 @@ +package com.vaadin.tests.components.checkboxgroup; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.CheckBoxGroupElement; +import com.vaadin.tests.tb3.MultiBrowserTest; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class CheckCheckBoxGroupWithIdTest extends MultiBrowserTest { + private CheckBoxGroupElement checkBoxGroup; + + @Before + public void setUp() { + openTestURL(); + checkBoxGroup = $(CheckBoxGroupElement.class).first(); + } + + @Test + public void TestSelection() { + assertEquals(checkBoxGroup.getValue().size(), 1); + $(ButtonElement.class).first().click(); + assertEquals(checkBoxGroup.getValue().size(), 0); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProviderTest.java b/uitest/src/test/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProviderTest.java new file mode 100644 index 0000000000..6475f43718 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/twincolselect/TwinColSelectAndIdBasedDataProviderTest.java @@ -0,0 +1,28 @@ +package com.vaadin.tests.components.twincolselect; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.testbench.elements.TwinColSelectElement; +import com.vaadin.tests.tb3.MultiBrowserTest; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TwinColSelectAndIdBasedDataProviderTest extends MultiBrowserTest { + + @Before + public void setUp() { + openTestURL(); + } + + @Test + public void TestSelection() { + assertEquals(getTwinColElement().getValues().size(), 1); + $(ButtonElement.class).first().click(); + assertEquals(getTwinColElement().getValues().size(), 0); + } + + private TwinColSelectElement getTwinColElement() { + return $(TwinColSelectElement.class).first(); + } +} |