@Test public void successfulDragAndDrop() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a2.addDragOverHandler(e -> { e.preventDefault(); }); a2.addDropHandler(e -> { e.preventDefault(); }); a1.dragStart(); a2.dragOver(); a2.drop(); }
@Override public void click() { // override because even disabled anchors get click events fireEvent(new StubClickEvent()); }
@Test public void firesDragEndOnPreviousDraggable() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); boolean[] stopped = { false }; a1.addDragEndHandler(e -> stopped[0] = true); a1.dragStart(); a2.dragStart(); assertThat(stopped[0], is(true)); }
@Test public void anchorsAreAlreadyDraggable() { StubAnchor a = new StubAnchor(); a.dragStart(); }
@Test public void mustHaveDragOverToAllowDrop() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a1.dragStart(); try { a2.drop(); fail(); } catch (IllegalStateException ise) { assertThat(ise.getMessage(), is("addDragOverHandler must be called to get drop events")); } }
@Test public void firefoxRequiresSetDataToBeCalled() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> { }); a1.dragStart(); try { a2.dragOver(); fail(); } catch (IllegalStateException ise) { assertThat(ise.getMessage(), is("Firefox requires setData to be called in drag start")); } }
@Test public void dropRequiresDragStart() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a2.addDragOverHandler(e -> { }); try { a2.drop(); fail(); } catch (IllegalStateException ise) { assertThat(ise.getMessage(), is("No stub dragStart() was called")); } }
@Test public void anchorsCanBeMarkedNotDraggable() { StubAnchor a = new StubAnchor(); a.getIsElement().setAttribute("draggable", "false"); try { a.dragStart(); fail(); } catch (IllegalStateException ise) { assertThat(ise.getMessage(), is("Element must have draggable=true")); } }
@Test public void testSortOnClick() { StubAnchor a = new StubAnchor(); StubAnchor b = new StubAnchor(); p.set(list("c", "bb")); p.sortOn(a, s -> s.toUpperCase()); p.sortOn(b, s -> s.length()); assertThat(p.get(), contains("c", "bb")); a.click(); assertThat(p.get(), contains("bb", "c")); a.click(); assertThat(p.get(), contains("c", "bb")); b.click(); assertThat(p.get(), contains("c", "bb")); b.click(); assertThat(p.get(), contains("bb", "c")); }
@Override public IsAnchor newAnchor() { return new StubAnchor(); }
@Test public void testCannotDropAnchorOnToALabel() { v.l1().dragStart(); v.a1().drop(); assertThat(v.rootAnchors().getIsWidget(0), is(v.a1())); assertThat(v.rootLabels().getIsWidget(0), is(v.l1())); }
@Test public void onClickAdd() { ListProperty<String> strings = listProperty("strings"); binder.onClick(anchor).add("a").to(strings); assertThat(strings.get().size(), is(0)); anchor.click(); assertThat(strings.get().size(), is(1)); }
@Test public void dropRequiresLastDragOverToBeCanceled() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a2.addDragOverHandler(e -> { }); a1.dragStart(); a2.dragOver(); try { a2.drop(); fail(); } catch (IllegalStateException ise) { assertThat(ise.getMessage(), is("addDragOverHandler should call preventDefault() if it wants to drop")); } }
@Test public void onClickTogglePreventsDefault() { final BooleanProperty b = booleanProperty("b"); binder.onClick(anchor).toggle(b); final StubClickEvent c = new StubClickEvent(); anchor.fireEvent(c); assertThat(c.prevented, is(true)); }
@Test public void onClickSort() { ListProperty<String> foo = listProperty("foo", list("b", "a")); binder.onClick(anchor).sort(foo).by(naturalComparator); assertThat(foo.get(), contains("b", "a")); anchor.click(); assertThat(foo.get(), contains("a", "b")); anchor.click(); assertThat(foo.get(), contains("b", "a")); }
@Test public void dropImplicitlyCallsOverIfNotExplicitlyCalled() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a2.addDragOverHandler(e -> { e.preventDefault(); }); a2.addDropHandler(e -> { e.preventDefault(); }); a1.dragStart(); // no explicit dragOver // a2.dragOver(); a2.drop(); }
@Test public void onClickRemove() { ListProperty<String> strings = listProperty("strings"); strings.add("a"); binder.onClick(anchor).remove("a").from(strings); assertThat(strings.get().size(), is(1)); anchor.click(); assertThat(strings.get().size(), is(0)); }
@Test public void dropCallsDragEnd() { StubAnchor a1 = new StubAnchor(); StubAnchor a2 = new StubAnchor(); boolean[] ended = { false }; a1.addDragStartHandler(e -> e.setData("text/plain", "foo")); a1.addDragEndHandler(e -> ended[0] = true); a2.addDragOverHandler(e -> { e.preventDefault(); }); a2.addDropHandler(e -> { e.preventDefault(); }); a1.dragStart(); a2.drop(); assertThat(ended[0], is(true)); }