blob: 5b738a10decbd6a3b07265e0d9d193185b187136 [file] [log] [blame]
/*
* 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;
}
}