/* * 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.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.text.shared.Renderer; import com.google.gwt.text.shared.testing.PassthroughRenderer; import java.text.ParseException; /** * Testing ValueBoxBase. */ public class ValueBoxBaseTest extends GWTTestCase { /** * Helper to check if the event is fired. */ private static class EventCounter implements ValueChangeHandler<String> { int counter = 0; @Override public void onValueChange(ValueChangeEvent<String> event) { counter++; } } @Override public String getModuleName() { return "com.google.gwt.user.User"; } // Test that parser exceptions are correctly thrown with an empty string public void testParserExceptionWithEmptyString() { Element elm = Document.get().createTextInputElement(); Renderer<String> renderer = PassthroughRenderer.instance(); MockParser parser = new MockParser(); ValueBoxBase<String> valueBoxBase = new ValueBoxBase<String>(elm, renderer, parser) { }; parser.throwException = true; valueBoxBase.setText(""); try { valueBoxBase.getValueOrThrow(); fail("Should have thrown ParseException"); } catch (ParseException e) { // exception was correctly thrown } if (!parser.parseCalled) { fail("Parser was not run"); } } // Test that parser exceptions are correctly thrown with a simple string public void testParserExceptionWithString() { Element elm = Document.get().createTextInputElement(); Renderer<String> renderer = PassthroughRenderer.instance(); MockParser parser = new MockParser(); ValueBoxBase<String> valueBoxBase = new ValueBoxBase<String>(elm, renderer, parser) { }; parser.throwException = true; valueBoxBase.setText("simple string"); try { valueBoxBase.getValueOrThrow(); fail("Should have thrown ParseException"); } catch (ParseException e) { // exception was correctly thrown } if (!parser.parseCalled) { fail("Parser was not run"); } } // Test that a string with padding spaces correctly passes through public void testSpaces() throws ParseException { Element elm = Document.get().createTextInputElement(); Renderer<String> renderer = PassthroughRenderer.instance(); MockParser parser = new MockParser(); ValueBoxBase<String> valueBoxBase = new ValueBoxBase<String>(elm, renderer, parser) { }; String text = " two space padding test "; valueBoxBase.setText(text); assertEquals(text, valueBoxBase.getValueOrThrow()); if (!parser.parseCalled) { fail("Parser was not run"); } } // Test that ValueChangeEvent is fired when a new value is set with fire events flag true public void testValueChangeEventFired() { ValueBoxBase<String> valueBoxBase = createValueBoxBase("myvalue"); EventCounter handler = new EventCounter(); valueBoxBase.addValueChangeHandler(handler); valueBoxBase.setValue("aNewValue", true); assertEquals(1, handler.counter); valueBoxBase.setValue("", true); assertEquals(2, handler.counter); } // Test that ValueChangeEvent is not fired when a new value is set with fire events flag false or // new value is equal to old value public void testValueChangeEventNotFired() { ValueBoxBase<String> valueBoxBase = createValueBoxBase("myvalue"); valueBoxBase.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { fail("Event should not have been fired"); } }); valueBoxBase.setValue("myvalue", true); // not fired because value is not changed valueBoxBase.setValue("aNewValue", false); // not fired because fireEvent is false assertEquals("aNewValue", valueBoxBase.getValue()); } // Test that ValueChangeEvent is not fired when an empty value is set public void testValueChangeEventWithEmptyString() { ValueBoxBase<String> valueBoxBase = createValueBoxBase(""); valueBoxBase.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { fail("Event should not have been fired"); } }); valueBoxBase.setValue("", true); } private static ValueBoxBase<String> createValueBoxBase(String text) { Element elm = Document.get().createTextInputElement(); Renderer<String> renderer = PassthroughRenderer.instance(); MockParser parser = new MockParser(); ValueBoxBase<String> box = new ValueBoxBase<String>(elm, renderer, parser) { }; box.setText(text); return box; } }