| /* | |
| * 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.impl; | |
| import com.google.gwt.core.client.GWT; | |
| import com.google.gwt.editor.client.Address; | |
| import com.google.gwt.editor.client.AddressEditor; | |
| import com.google.gwt.editor.client.Editor; | |
| import com.google.gwt.editor.client.EditorDelegate; | |
| import com.google.gwt.editor.client.HasEditorDelegate; | |
| import com.google.gwt.editor.client.IsEditor; | |
| import com.google.gwt.editor.client.Person; | |
| import com.google.gwt.editor.client.SimpleBeanEditorDriver; | |
| import com.google.gwt.editor.client.adapters.SimpleEditor; | |
| import com.google.gwt.junit.client.GWTTestCase; | |
| import java.util.ArrayList; | |
| import java.util.Arrays; | |
| import java.util.List; | |
| /** | |
| * Tests for DelegateMap. | |
| */ | |
| public class DelegateMapTest extends GWTTestCase { | |
| class AddressCoEditorView extends AddressEditor implements IsEditor<AddressEditor> { | |
| private AddressEditor addressEditor = new AddressEditor(); | |
| public AddressEditor asEditor() { | |
| return addressEditor; | |
| } | |
| } | |
| class PersonEditorWithCoAddressEditorView implements Editor<Person> { | |
| AddressCoEditorView addressEditor = new AddressCoEditorView(); | |
| SimpleEditor<String> name = SimpleEditor.of("uninitialized"); | |
| @Path("manager.name") | |
| SimpleEditorWithDelegate<String> managerName = new SimpleEditorWithDelegate<String>( | |
| "uninitialized"); | |
| } | |
| interface PersonEditorWithCoAddressEditorViewDriver extends | |
| SimpleBeanEditorDriver<Person, PersonEditorWithCoAddressEditorView> { | |
| } | |
| class SimpleEditorWithDelegate<T> extends SimpleEditor<T> implements HasEditorDelegate<T> { | |
| EditorDelegate<T> delegate; | |
| public SimpleEditorWithDelegate(T value) { | |
| super(value); | |
| } | |
| public void setDelegate(EditorDelegate<T> delegate) { | |
| this.delegate = delegate; | |
| } | |
| } | |
| private AbstractSimpleBeanEditorDriver<Person, PersonEditorWithCoAddressEditorView> driver; | |
| private PersonEditorWithCoAddressEditorView editor; | |
| private DelegateMap map; | |
| private Person person; | |
| @Override | |
| public String getModuleName() { | |
| return "com.google.gwt.editor.Editor"; | |
| } | |
| public void test() { | |
| // Test by-object | |
| assertEquals(Arrays.asList(editor), editors(map, person)); | |
| assertEquals(Arrays.asList(editor.addressEditor.addressEditor, editor.addressEditor), editors( | |
| map, person.getAddress())); | |
| // Test by-path | |
| assertEquals(Arrays.asList(editor), editors(map, "")); | |
| assertEquals(Arrays.asList(editor.addressEditor.addressEditor, editor.addressEditor), editors( | |
| map, "address")); | |
| assertEquals(Arrays.<Editor<?>> asList(editor.managerName), editors(map, "manager.name")); | |
| } | |
| public void testSimplePath() { | |
| assertSame(editor.name, map.getEditorByPath("name").get(0)); | |
| assertSame(editor.managerName, map.getEditorByPath("manager.name").get(0)); | |
| } | |
| @Override | |
| protected void gwtSetUp() throws Exception { | |
| Address a = new Address(); | |
| a.setCity("city"); | |
| a.setStreet("street"); | |
| Person m = new Person(); | |
| m.setName("manager"); | |
| person = new Person(); | |
| person.setName("name"); | |
| person.setAddress(a); | |
| person.setManager(m); | |
| editor = new PersonEditorWithCoAddressEditorView(); | |
| driver = GWT.create(PersonEditorWithCoAddressEditorViewDriver.class); | |
| driver.initialize(editor); | |
| driver.edit(person); | |
| map = DelegateMap.of(driver, DelegateMap.IDENTITY); | |
| } | |
| private List<Editor<?>> editors(DelegateMap map, Object o) { | |
| List<Editor<?>> toReturn = new ArrayList<Editor<?>>(); | |
| for (AbstractEditorDelegate<?, ?> delegate : map.get(o)) { | |
| toReturn.add(delegate.getEditor()); | |
| } | |
| return toReturn; | |
| } | |
| private List<Editor<?>> editors(DelegateMap map, String path) { | |
| List<Editor<?>> toReturn = new ArrayList<Editor<?>>(); | |
| for (AbstractEditorDelegate<?, ?> delegate : map.getDelegatesByPath(path)) { | |
| toReturn.add(delegate.getEditor()); | |
| } | |
| return toReturn; | |
| } | |
| } |