Revision: 9775
Author: [email protected]
Date: Mon Feb 28 04:45:29 2011
Log: Patch for issue 5599, HasDataEditor doesn't handle removes.
http://gwt-code-reviews.appspot.com/1297801/show
Patch by: t.broyer
Review by: bobv

http://code.google.com/p/google-web-toolkit/source/detail?r=9775

Added:
/trunk/user/test/com/google/gwt/editor/client/adapters/HasDataEditorTest.java
Modified:
 /trunk/user/src/com/google/gwt/editor/client/adapters/HasDataEditor.java
 /trunk/user/test/com/google/gwt/editor/EditorSuite.java

=======================================
--- /dev/null
+++ /trunk/user/test/com/google/gwt/editor/client/adapters/HasDataEditorTest.java Mon Feb 28 04:45:29 2011
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * 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.google.gwt.editor.client.adapters;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.GwtEvent;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.view.client.CellPreviewEvent;
+import com.google.gwt.view.client.HasData;
+import com.google.gwt.view.client.Range;
+import com.google.gwt.view.client.RangeChangeEvent.Handler;
+import com.google.gwt.view.client.RowCountChangeEvent;
+import com.google.gwt.view.client.SelectionModel;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Tests the {@link HasDataEditor} type, to test it correctly plays with the
+ * backing {@link HasData}.
+ */
+public class HasDataEditorTest extends GWTTestCase {
+
+  interface HasDataEditorDriver extends
+      SimpleBeanEditorDriver<List<Integer>, HasDataEditor<Integer>> {
+  }
+
+  private static class FakeHasData implements HasData<Integer> {
+
+    private ArrayList<Integer> rowData = new ArrayList<Integer>();
+
+    public HandlerRegistration addCellPreviewHandler(
+        CellPreviewEvent.Handler<Integer> handler) {
+ fail("HasDataEditor should never call HasData#addCellPreviewHandler");
+      return null;
+    }
+
+    public HandlerRegistration addRangeChangeHandler(Handler handler) {
+ fail("HasDataEditor should never call HasData#addRangeChangeHandler");
+      return null;
+    }
+
+    public HandlerRegistration addRowCountChangeHandler(
+        RowCountChangeEvent.Handler handler) {
+ fail("HasDataEditor should never call HasData#addRowCountChangeHandler");
+      return null;
+    }
+
+    public void fireEvent(GwtEvent<?> event) {
+      fail("HasDataEditor should never call HasData#fireEvent");
+    }
+
+    public int getRowCount() {
+      return rowData.size();
+    }
+
+    public List<Integer> getRowData() {
+      return Collections.unmodifiableList(rowData);
+    }
+
+    public SelectionModel<? super Integer> getSelectionModel() {
+      fail("HasDataEditor should never call HasData#getSelectionModel");
+      return null;
+    }
+
+    public Integer getVisibleItem(int indexOnPage) {
+      fail("HasDataEditor should never call HasData#getVisibleItem");
+      return null;
+    }
+
+    public int getVisibleItemCount() {
+      fail("HasDataEditor should never call HasData#getVisibleItemCount");
+      return 0;
+    }
+
+    public Iterable<Integer> getVisibleItems() {
+      fail("HasDataEditor should never call HasData#getVisibleItems");
+      return null;
+    }
+
+    public Range getVisibleRange() {
+      fail("HasDataEditor should never call HasData#getVisibleRange");
+      return null;
+    }
+
+    public boolean isRowCountExact() {
+      return true;
+    }
+
+    public void setRowCount(int count) {
+      setRowCount(count, true);
+    }
+
+    public void setRowCount(int count, boolean isExact) {
+      assertTrue(isExact);
+      assertTrue("HasDataEditor should only setRowCount to resize down",
+          count < rowData.size());
+      while (rowData.size() > count) {
+        rowData.remove(rowData.size() - 1);
+      }
+    }
+
+    public void setRowData(int start, List<? extends Integer> values) {
+      // sets within the list or adds to it
+      assertTrue(0 <= start && start <= rowData.size());
+      /*
+ * HasDataEditor never calls setRowData with longer lists, but just in
+       * case because this fake implementation relies on this behavior.
+       */
+      assertEquals(1, values.size());
+      if (start == rowData.size()) {
+        rowData.add(values.get(0));
+      } else {
+        rowData.set(start, values.get(0));
+      }
+    }
+
+ public void setSelectionModel(SelectionModel<? super Integer> selectionModel) {
+      fail("HasDataEditor should never call HasData#setSelectionModel");
+    }
+
+    public void setVisibleRange(int start, int length) {
+      fail("HasDataEditor should never call HasData#setVisibleRange");
+    }
+
+    public void setVisibleRange(Range range) {
+      fail("HasDataEditor should never call HasData#setVisibleRange");
+    }
+
+    public void setVisibleRangeAndClearData(Range range,
+        boolean forceRangeChangeEvent) {
+ fail("HasDataEditor should never call HasData#setVisibleRangeAndClearData");
+    }
+  }
+
+  FakeHasData hasData;
+  HasDataEditor<Integer> editor;
+  HasDataEditorDriver driver;
+
+  @Override
+  public String getModuleName() {
+    return "com.google.gwt.editor.Editor";
+  }
+
+  public void testAddingValueToTheList() {
+    driver.edit(Arrays.asList(0, 1, 3, 4));
+
+    editor.getList().add(2, 2);
+
+    assertEquals(Arrays.asList(0, 1, 2, 3, 4), hasData.getRowData());
+  }
+
+  public void testEditAgainWithLongerList() {
+    driver.edit(Arrays.asList(0, 1, 2, 3, 4));
+
+    List<Integer> expectedValue = Arrays.asList(0, 1, 2, 3, 4, 5);
+
+    driver.edit(expectedValue);
+
+    assertEquals(expectedValue, editor.getList());
+    assertEquals(expectedValue, hasData.getRowData());
+  }
+
+  public void testEditAgainWithShorterList() {
+    driver.edit(Arrays.asList(0, 1, 2, 3, 4, 5));
+
+    List<Integer> expectedValue = Arrays.asList(4, 3, 2, 1, 0);
+
+    driver.edit(expectedValue);
+
+    assertEquals(expectedValue, editor.getList());
+    assertEquals(expectedValue, hasData.getRowData());
+  }
+
+  public void testRemovingValueFromTheList() {
+    driver.edit(Arrays.asList(0, 1, 2, 3, 4));
+
+    editor.getList().remove(2);
+
+    assertEquals(Arrays.asList(0, 1, 3, 4), hasData.getRowData());
+  }
+
+  public void testSimpleEdit() {
+    List<Integer> expectedValue = Arrays.asList(0, 1, 2, 3, 4);
+
+    driver.edit(expectedValue);
+
+    assertEquals(expectedValue, editor.getList());
+    assertEquals(expectedValue, hasData.getRowData());
+  }
+
+  @Override
+  protected void gwtSetUp() throws Exception {
+    hasData = new FakeHasData();
+    editor = HasDataEditor.of(hasData);
+    driver = GWT.create(HasDataEditorDriver.class);
+    driver.initialize(editor);
+  }
+}
=======================================
--- /trunk/user/src/com/google/gwt/editor/client/adapters/HasDataEditor.java Thu Sep 9 11:46:06 2010 +++ /trunk/user/src/com/google/gwt/editor/client/adapters/HasDataEditor.java Mon Feb 28 04:45:29 2011
@@ -37,6 +37,11 @@
     public IndexedEditor<T> create(int index) {
       return new IndexedEditor<T>(index, data);
     }
+
+    @Override
+    public void dispose(LeafValueEditor<T> subEditor) {
+      data.setRowCount(data.getRowCount() - 1);
+    }

     @Override
     public void setIndex(LeafValueEditor<T> editor, int index) {
=======================================
--- /trunk/user/test/com/google/gwt/editor/EditorSuite.java Wed Feb 2 03:25:11 2011 +++ /trunk/user/test/com/google/gwt/editor/EditorSuite.java Mon Feb 28 04:45:29 2011
@@ -18,6 +18,7 @@
 import com.google.gwt.editor.client.DirtyEditorTest;
 import com.google.gwt.editor.client.EditorErrorTest;
 import com.google.gwt.editor.client.SimpleBeanEditorTest;
+import com.google.gwt.editor.client.adapters.HasDataEditorTest;
 import com.google.gwt.editor.client.adapters.ListEditorWrapperTest;
 import com.google.gwt.editor.client.impl.DelegateMapTest;
 import com.google.gwt.editor.rebind.model.EditorModelTest;
@@ -37,6 +38,7 @@
     suite.addTestSuite(DirtyEditorTest.class);
     suite.addTestSuite(EditorModelTest.class);
     suite.addTestSuite(EditorErrorTest.class);
+    suite.addTestSuite(HasDataEditorTest.class);
     suite.addTestSuite(ListEditorWrapperTest.class);
     suite.addTestSuite(SimpleBeanEditorTest.class);
     return suite;

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to