LGTM

On Mon, Aug 8, 2011 at 4:42 PM, <jlaba...@google.com> wrote:

> Reviewers: rjrjr,
>
> Description:
> Fixing a bug in HasDataPresenter where paging to a negative row index
> causes an IndexOutOfRange exception. We now properly trim the keyboard
> selected row to a non-negative value.
>
> Issue: 6383
>
>
> Please review this at 
> http://gwt-code-reviews.**appspot.com/1513804/<http://gwt-code-reviews.appspot.com/1513804/>
>
> Affected files:
>  M user/src/com/google/gwt/user/**cellview/client/**HasDataPresenter.java
>  M user/test/com/google/gwt/user/**cellview/client/**
> HasDataPresenterTest.java
>
>
> Index: user/src/com/google/gwt/user/**cellview/client/**
> HasDataPresenter.java
> ==============================**==============================**=======
> --- user/src/com/google/gwt/user/**cellview/client/**HasDataPresenter.java
>  (revision 10507)
> +++ user/src/com/google/gwt/user/**cellview/client/**HasDataPresenter.java
>  (working copy)
> @@ -719,8 +719,9 @@
>     } else if (KeyboardPagingPolicy.CHANGE_**PAGE == keyboardPagingPolicy)
> {
>       // Go to previous page.
>       while (index < 0) {
> -        newPageStart -= pageSize;
> -        index += pageSize;
> +        int shift = Math.min(pageSize, newPageStart);
> +        newPageStart -= shift;
> +        index += shift;
>       }
>
>       // Go to next page.
> @@ -731,9 +732,10 @@
>     } else if (KeyboardPagingPolicy.**INCREASE_RANGE ==
> keyboardPagingPolicy) {
>       // Increase range at the beginning.
>       while (index < 0) {
> -        newPageSize += PAGE_INCREMENT;
> -        newPageStart -= PAGE_INCREMENT;
> -        index += PAGE_INCREMENT;
> +        int shift = Math.min(PAGE_INCREMENT, newPageStart);
> +        newPageSize += shift;
> +        newPageStart -= shift;
> +        index += shift;
>       }
>       if (newPageStart < 0) {
>         index += newPageStart;
> Index: user/test/com/google/gwt/user/**cellview/client/**
> HasDataPresenterTest.java
> ==============================**==============================**=======
> --- 
> user/test/com/google/gwt/user/**cellview/client/**HasDataPresenterTest.java
>     (revision 10507)
> +++ 
> user/test/com/google/gwt/user/**cellview/client/**HasDataPresenterTest.java
>     (working copy)
> @@ -750,6 +750,18 @@
>     view.**assertKeyboardSelectedRowEmpty**();
>     assertEquals(10, presenter.getVisibleRange().**getStart());
>     assertEquals(10, presenter.getVisibleRange().**getLength());
> +
> +    // Negative index out of range.
> +    presenter.setVisibleRange(new Range(3, 10));
> +    presenter.**setKeyboardSelectedRow(3, false, false);
> +    populatePresenter(presenter);
> +    presenter.flush();
> +    presenter.**setKeyboardSelectedRow(-4, false, false);
> +    populatePresenter(presenter);
> +    presenter.flush();
> +    assertEquals(0, presenter.**getKeyboardSelectedRow());
> +    assertEquals(0, presenter.getVisibleRange().**getStart());
> +    assertEquals(10, presenter.getVisibleRange().**getLength());
>   }
>
>   public void testSetKeyboardSelectedRowCurr**entPage() {
> @@ -880,6 +892,18 @@
>     assertEquals(0, presenter.getVisibleRange().**getStart());
>     pageSize += 10;
>     assertEquals(pageSize, presenter.getVisibleRange().**getLength());
> +
> +    // Negative index out of range.
> +    presenter.setVisibleRange(new Range(3, 10));
> +    presenter.**setKeyboardSelectedRow(3, false, false);
> +    populatePresenter(presenter);
> +    presenter.flush();
> +    presenter.**setKeyboardSelectedRow(-4, false, false);
> +    populatePresenter(presenter);
> +    presenter.flush();
> +    assertEquals(0, presenter.**getKeyboardSelectedRow());
> +    assertEquals(0, presenter.getVisibleRange().**getStart());
> +    assertEquals(13, presenter.getVisibleRange().**getLength());
>   }
>
>   public void testSetRowCount() {
>
>
>

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

Reply via email to