| /* |
| * Copyright 2010 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.editor.client.testing.FakeEditorSource; |
| import com.google.gwt.editor.client.testing.FakeLeafValueEditor; |
| import com.google.gwt.editor.client.testing.MockEditorChain; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| /** |
| * Tests the {@link ListEditorWrapper} type. This is where all of |
| * {@link ListEditor}'s bookkeeping lies. |
| */ |
| public class ListEditorWrapperTest extends TestCase { |
| |
| public void testAdd() { |
| List<Object> backing = new ArrayList<Object>(); |
| FakeEditorSource<Object> source = new FakeEditorSource<Object>(); |
| MockEditorChain<Object> chain = new MockEditorChain<Object>(); |
| |
| ListEditorWrapper<Object, FakeLeafValueEditor<Object>> wrapper = new ListEditorWrapper<Object, FakeLeafValueEditor<Object>>( |
| backing, chain, source); |
| wrapper.attach(); |
| |
| assertTrue(wrapper.getEditors().isEmpty()); |
| |
| Object o1 = new Object(); |
| wrapper.add(o1); |
| assertEquals(0, backing.size()); |
| wrapper.flush(); |
| assertEquals(1, backing.size()); |
| assertSame(o1, backing.get(0)); |
| FakeLeafValueEditor<Object> editor1 = wrapper.getEditors().get(0); |
| assertSame(o1, editor1.getValue()); |
| assertEquals(0, source.getLastKnownPosition(editor1)); |
| assertTrue(chain.isAttached(editor1)); |
| |
| Object o0 = new Object(); |
| wrapper.add(0, o0); |
| assertEquals(1, backing.size()); |
| wrapper.flush(); |
| assertEquals(2, backing.size()); |
| assertSame(o0, backing.get(0)); |
| assertSame(o1, backing.get(1)); |
| FakeLeafValueEditor<Object> editor0 = wrapper.getEditors().get(0); |
| assertNotSame(editor0, editor1); |
| assertSame(editor1, wrapper.getEditors().get(1)); |
| assertSame(o0, editor0.getValue()); |
| assertEquals(0, source.getLastKnownPosition(editor0)); |
| assertEquals(1, source.getLastKnownPosition(editor1)); |
| assertTrue(chain.isAttached(editor0)); |
| |
| o1 = new Object(); |
| editor1.setValue(o1); |
| assertNotSame(backing.get(1), o1); |
| wrapper.flush(); |
| assertSame(backing.get(1), o1); |
| |
| wrapper.detach(); |
| assertFalse(chain.isAttached(editor0)); |
| assertEquals(FakeEditorSource.DISPOSED, |
| source.getLastKnownPosition(editor0)); |
| assertFalse(chain.isAttached(editor1)); |
| assertEquals(FakeEditorSource.DISPOSED, |
| source.getLastKnownPosition(editor1)); |
| } |
| |
| public void testEmpty() { |
| List<Object> backing = new ArrayList<Object>(); |
| FakeEditorSource<Object> source = new FakeEditorSource<Object>(); |
| |
| ListEditorWrapper<Object, FakeLeafValueEditor<Object>> wrapper = new ListEditorWrapper<Object, FakeLeafValueEditor<Object>>( |
| backing, new MockEditorChain<Object>(), source); |
| wrapper.attach(); |
| |
| assertTrue(wrapper.getEditors().isEmpty()); |
| wrapper.flush(); |
| wrapper.detach(); |
| } |
| |
| @SuppressWarnings("unchecked") |
| public void testRemove() { |
| Object o0 = new Object(); |
| Object o1 = new Object(); |
| Object o2 = new Object(); |
| List<Object> backing = new ArrayList<Object>(Arrays.asList(o0, o1, o2)); |
| FakeEditorSource<Object> source = new FakeEditorSource<Object>(); |
| MockEditorChain<Object> chain = new MockEditorChain<Object>(); |
| |
| ListEditorWrapper<Object, FakeLeafValueEditor<Object>> wrapper = new ListEditorWrapper<Object, FakeLeafValueEditor<Object>>( |
| backing, chain, source); |
| wrapper.attach(); |
| |
| assertEquals(3, wrapper.getEditors().size()); |
| FakeLeafValueEditor<Object> e0 = wrapper.getEditors().get(0); |
| FakeLeafValueEditor<Object> e1 = wrapper.getEditors().get(1); |
| FakeLeafValueEditor<Object> e2 = wrapper.getEditors().get(2); |
| assertSame(o0, e0.getValue()); |
| assertSame(o1, e1.getValue()); |
| assertSame(o2, e2.getValue()); |
| |
| wrapper.remove(1); |
| assertEquals(Arrays.asList(o0, o1, o2), backing); |
| assertEquals(Arrays.asList(e0, e2), wrapper.getEditors()); |
| wrapper.flush(); |
| assertEquals(Arrays.asList(o0, o2), backing); |
| assertEquals(Arrays.asList(e0, e2), wrapper.getEditors()); |
| assertFalse(chain.isAttached(e1)); |
| assertEquals(FakeEditorSource.DISPOSED, source.getLastKnownPosition(e1)); |
| assertEquals(1, source.getLastKnownPosition(e2)); |
| |
| wrapper.set(1, o1); |
| assertEquals(Arrays.asList(o0, o2), backing); |
| wrapper.flush(); |
| assertEquals(Arrays.asList(o0, o1), backing); |
| // Re-use existing editor |
| assertEquals(Arrays.asList(e0, e2), wrapper.getEditors()); |
| assertSame(o1, e2.getValue()); |
| } |
| } |