blob: bc6384e3e268de3a1dcfbcf0f6aa6a789bfe2860 [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.user.client.ui;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.text.shared.AbstractRenderer;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SimpleKeyProvider;
import java.util.Arrays;
/**
* Eponymous unit test.
*/
public class ValueListBoxTest extends GWTTestCase {
static class Foo {
final String value;
Foo(String value) {
this.value = value;
}
@Override
public String toString() {
return "Foo [value=" + value + "]";
}
}
static class FooRenderer extends AbstractRenderer<Foo> {
public String render(Foo object) {
if (object == null) {
return "";
}
return "Foo: " + object.value;
}
}
static class KeyProvider implements ProvidesKey<Foo> {
public String getKey(Foo item) {
return item.value;
}
}
private static final FooRenderer renderer = new FooRenderer();
ValueListBox<Foo> subject;
@Override
public String getModuleName() {
return "com.google.gwt.user.User";
}
public void xx_testExtraValueSet() { // TODO(rjrjr) Strange failures on firefox
Foo[] values = new Foo[] {new Foo("able"), new Foo("baker")};
Foo baz = new Foo("baz");
subject.setAcceptableValues(Arrays.asList(values));
assertEquals(2, getSelect().getLength());
subject.setValue(baz);
assertEquals(baz, subject.getValue());
assertEquals(3, getSelect().getLength());
}
public void testNakedSet() {
assertNull(subject.getValue());
SelectElement elm = getSelect();
assertEquals(0, elm.getLength());
Foo barFoo = new Foo("bar");
setAndCheck(barFoo);
assertEquals(1, elm.getLength());
assertEquals(renderer.render(barFoo), elm.getValue());
}
public void xx_testNormalSet() { // TODO(rjrjr) Strange failures on firefox
Foo[] values = new Foo[] {new Foo("able"), new Foo("baker")};
subject.setAcceptableValues(Arrays.asList(values));
assertEquals(2, getSelect().getLength());
setAndCheck(values[0]);
setAndCheck(values[1]);
setAndCheck(values[0]);
assertEquals(2, getSelect().getLength());
}
public void xx_testNormalSetWithKeyProvider() { // TODO(rjrjr) Strange failures on firefox
gwtTearDown(); // Tear down the usual test subject
KeyProvider keyProvider = new KeyProvider();
subject = new ValueListBox<Foo>(renderer, keyProvider);
RootPanel.get().add(subject);
Foo[] byReference = new Foo[] {new Foo("able"), new Foo("baker")};
subject.setAcceptableValues(Arrays.asList(byReference));
Foo[] byValue = new Foo[] {new Foo("able"), new Foo("baker")};
assertEquals(2, getSelect().getLength());
setAndCheck(byReference[0], keyProvider);
setAndCheck(byReference[1], keyProvider);
setAndCheck(byReference[0], keyProvider);
setAndCheck(byValue[0], keyProvider);
setAndCheck(byValue[1], keyProvider);
setAndCheck(byValue[0], keyProvider);
assertEquals(2, getSelect().getLength());
}
@Override
protected void gwtSetUp() {
subject = new ValueListBox<Foo>(renderer);
RootPanel.get().add(subject);
}
@Override
protected void gwtTearDown() {
RootPanel.get().remove(subject);
}
private SelectElement getSelect() {
return subject.getWidget().getElement().cast();
}
private void setAndCheck(Foo value) {
setAndCheck(value, new SimpleKeyProvider<Foo>());
}
private void setAndCheck(Foo value, ProvidesKey<Foo> keyProvider) {
subject.setValue(value);
assertEquals(keyProvider.getKey(value), keyProvider.getKey(subject.getValue()));
assertEquals(renderer.render(value), getSelect().getValue());
}
}