Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,23 @@ public void onSelectionChange(SelectionChangeEvent event) {
}
}

static class AssertOneSelectionChangeEventOnlyHandler extends MockSelectionChangeHandler {

@Override
public void onSelectionChange(SelectionChangeEvent event) {
// We should only see one event fired.
assertEventFired(false);
super.onSelectionChange(event);
}
}

static class FailingSelectionChangeEventHandler implements SelectionChangeEvent.Handler {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
}
}

/**
* A mock {@link SelectionModel} used for testing.
*
Expand Down Expand Up @@ -112,14 +129,7 @@ public void run() {

public void testScheduleSelectionChangeEvent() {
AbstractSelectionModel<String> model = createSelectionModel(null);
final MockSelectionChangeHandler handler = new MockSelectionChangeHandler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
// We should only see one event fired.
assertEventFired(false);
super.onSelectionChange(event);
}
};
final MockSelectionChangeHandler handler = new AssertOneSelectionChangeEventOnlyHandler();
model.addSelectionChangeHandler(handler);

// Schedule the event multiple times.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.view.client;

Check warning on line 16 in user/test/com/google/gwt/view/client/DefaultSelectionModelTest.java

View workflow job for this annotation

GitHub Actions / build (21)

[checkstyle] reported by reviewdog 🐶 Line matches the illegal pattern 'more than one blank line'. Raw Output: /home/runner/work/gwt/gwt/gwt/user/test/com/google/gwt/view/client/DefaultSelectionModelTest.java:16:0: info: Line matches the illegal pattern 'more than one blank line'. (com.puppycrawl.tools.checkstyle.checks.regexp.RegexpCheck)


import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Timer;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
Expand Down Expand Up @@ -65,18 +68,32 @@
}

public void testNoDuplicateChangeEvent() {
DefaultSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
delayTestFinish(2000);
final DefaultSelectionModel<String> model = createSelectionModel(null);
final MockSelectionChangeHandler handler = new AssertOneSelectionChangeEventOnlyHandler();

model.addSelectionChangeHandler(handler);
model.setSelected("selected999", false);
// selection events fire at the end of current event loop (finally command)
handler.assertEventFired(false);

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
public void execute() {
handler.assertEventFired(true);
// No further selection events should be fired
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected("selected999", false);
model.setSelected("selected999", false);
}
};
});

model.setSelected("selected999", false);
model.addSelectionChangeHandler(handler);
model.setSelected("selected999", false); // Should not fire change event
model.setSelected("selected999", false); // Should not fire change event
new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

public void testSetSelectedDefault() {
Expand Down
75 changes: 49 additions & 26 deletions user/test/com/google/gwt/view/client/MultiSelectionModelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,12 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.view.client;

Check warning on line 16 in user/test/com/google/gwt/view/client/MultiSelectionModelTest.java

View workflow job for this annotation

GitHub Actions / build (21)

[checkstyle] reported by reviewdog 🐶 Line matches the illegal pattern 'more than one blank line'. Raw Output: /home/runner/work/gwt/gwt/gwt/user/test/com/google/gwt/view/client/MultiSelectionModelTest.java:16:0: info: Line matches the illegal pattern 'more than one blank line'. (com.puppycrawl.tools.checkstyle.checks.regexp.RegexpCheck)


import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Timer;

import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
Expand Down Expand Up @@ -123,66 +126,86 @@
}

public void testNoDuplicateChangeEvent() {
MultiSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
}
};
delayTestFinish(2000);
final MultiSelectionModel<String> model = createSelectionModel(null);
final MockSelectionChangeHandler handler = new AssertOneSelectionChangeEventOnlyHandler();

model.setSelected("test", true);
model.addSelectionChangeHandler(handler);
model.setSelected("test", true); // Should not fire change event
model.setSelected("test", true); // Should not fire change event
model.setSelected("test", true);
// selection events fire at the end of current event loop (finally command)
handler.assertEventFired(false);

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
handler.assertEventFired(true);
// No further selection events should be fired
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected("test", true);
model.setSelected("test", true);
}
});

new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

public void testNoDuplicateChangeEvent2() {
delayTestFinish(2000);
MultiSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
}
};

// no event at all should be fired, as selection events fire at the end of current event loop
// and at that point no state has been effectively changed.
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected("test", true);
model.setSelected("test", false);
model.addSelectionChangeHandler(handler);
model.setSelected("test", false); // Should not fire change event
model.setSelected("test", false); // Should not fire change event
model.setSelected("test", false);
model.setSelected("test", false);

new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

/**
* Tests that reselecting the same key from a different item does not fire a
* change event.
*/
public void testNoDuplicateChangeEventWithKeyProvider() {
delayTestFinish(2000);
ProvidesKey<String> keyProvider = new ProvidesKey<String>() {
@Override
public Object getKey(String item) {
return item.toUpperCase(Locale.ROOT);
}
};
MultiSelectionModel<String> model = createSelectionModel(keyProvider);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
}
};

model.setSelected("test1", true);
assertTrue(model.isSelected("test1"));

model.addSelectionChangeHandler(handler);
// Selecting a different item with the same key should not be seen as a
// selection change
String replacement = "TEST1";
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected(replacement, true);
assertTrue(model.isSelected(replacement));
assertEquals(1, model.getSelectedSet().size());
assertSame(replacement, model.getSelectedSet().iterator().next());

new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

public void testSetSelected() {
Expand Down
57 changes: 39 additions & 18 deletions user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
*/
package com.google.gwt.view.client;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Timer;

import java.util.Locale;

/**
Expand Down Expand Up @@ -62,34 +65,52 @@ public void onSelectionChange(SelectionChangeEvent event) {
}

public void testNoDuplicateChangeEvent() {
SingleSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
delayTestFinish(2000);
final SingleSelectionModel<String> model = createSelectionModel(null);
final MockSelectionChangeHandler handler = new AssertOneSelectionChangeEventOnlyHandler();

model.addSelectionChangeHandler(handler);
model.setSelected("test", true);
// selection events fire at the end of current event loop (finally command)
handler.assertEventFired(false);

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
public void execute() {
handler.assertEventFired(true);
// No further selection events should be fired
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected("test", true);
model.setSelected("test", true);
}
};
});

model.setSelected("test", true);
model.addSelectionChangeHandler(handler);
model.setSelected("test", true); // Should not fire change event
model.setSelected("test", true); // Should not fire change event
new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

public void testNoDuplicateChangeEvent2() {
delayTestFinish(2000);
SingleSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
fail();
}
};

// no event at all should be fired, as selection events fire at the end of current event loop
// and at that point no state has been effectively changed.
model.addSelectionChangeHandler(new FailingSelectionChangeEventHandler());
model.setSelected("test", true);
model.setSelected("test", false);
model.addSelectionChangeHandler(handler);
model.setSelected("test", false); // Should not fire change event
model.setSelected("test", false); // Should not fire change event
model.setSelected("test", false);
model.setSelected("test", false);

new Timer() {
@Override
public void run() {
finishTest();
}
}.schedule(1000);
}

public void testSetSelected() {
Expand Down
Loading