| /* |
| * Copyright 2008 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.NativeEvent; |
| import com.google.gwt.event.logical.shared.ValueChangeEvent; |
| import com.google.gwt.event.logical.shared.ValueChangeHandler; |
| import com.google.gwt.i18n.client.DateTimeFormat; |
| import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; |
| import com.google.gwt.user.datepicker.client.CalendarUtil; |
| import com.google.gwt.user.datepicker.client.DateBox; |
| import com.google.gwt.user.datepicker.client.DateBox.Format; |
| import com.google.gwt.user.datepicker.client.DatePicker; |
| |
| import java.util.Date; |
| |
| /** |
| * Tests {@link DateBox}. |
| */ |
| public class DateBoxTest extends WidgetTestBase { |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.user.User"; |
| } |
| |
| public void testAccessors() { |
| DateBox db = new DateBox(); |
| assertFalse(db.isDatePickerShowing()); |
| db.showDatePicker(); |
| assertTrue(db.isDatePickerShowing()); |
| db.hideDatePicker(); |
| assertFalse(db.isDatePickerShowing()); |
| } |
| |
| private static class MillisStrippedValueChangeTester extends DateValueChangeTester { |
| |
| public MillisStrippedValueChangeTester(DateBox subject) { |
| super(subject); |
| subject.setValue(null); // reset to default |
| } |
| |
| @Override |
| protected void normalizeTime(Date highResolutionDate) { |
| highResolutionDate.setTime((highResolutionDate.getTime() / 1000) * 1000); |
| } |
| } |
| |
| public void testValueChangeEvent() { |
| final DateBox db = new DateBox(); |
| RootPanel.get().add(db); |
| |
| // Checks setValue(date, true). Should preserve precision so getValue returns the exact value |
| // passed by setValue. |
| new DateValueChangeTester(db).run(); |
| |
| // Check setting the text directly in the text box. |
| new MillisStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| enterViaTextBox(db, d); |
| } |
| }.run(); |
| |
| // Checks that selecting a date from date picker works correctly. |
| new MillisStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| selectViaDatePicker(db, d); |
| } |
| }.run(); |
| |
| // Checks that setting the date picker's date works correctly. |
| new MillisStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| setViaDatePicker(db, d); |
| } |
| }.run(); |
| } |
| |
| private static class TimeStrippedValueChangeTester extends DateValueChangeTester { |
| |
| public TimeStrippedValueChangeTester(DateBox subject) { |
| super(subject); |
| subject.setValue(null); // reset to default |
| } |
| |
| @Override |
| protected void normalizeTime(Date highResolutionDate) { |
| CalendarUtil.resetTime(highResolutionDate); |
| } |
| } |
| |
| public void testValueChangeEventWithCustomFormat() { |
| Format format = new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")); |
| final DateBox db = new DateBox(new DatePicker(), null, format); |
| RootPanel.get().add(db); |
| |
| // Checks setValue(date, true). Should preserve precision so getValue returns the exact value |
| // passed by setValue. |
| new DateValueChangeTester(db).run(); |
| |
| // Check setting the text directly in the text box. |
| new TimeStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| enterViaTextBox(db, d); |
| } |
| }.run(); |
| |
| // Checks that setting the date picker's date works correctly. |
| new TimeStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| setViaDatePicker(db, d); |
| } |
| }.run(); |
| |
| // Checks that selecting a date from date picker works correctly. |
| new TimeStrippedValueChangeTester(db) { |
| @Override |
| protected void fire(Date d) { |
| selectViaDatePicker(db, d); |
| } |
| }.run(); |
| } |
| |
| |
| private static void enterViaTextBox(DateBox db, Date d) { |
| // Intended use of higher resolution formatter to test normalization |
| db.getTextBox().setText(DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_LONG).format(d)); |
| db.getTextBox().getElement().dispatchEvent(Document.get().createBlurEvent()); |
| } |
| |
| private static void selectViaDatePicker(final DateBox db, Date d) { |
| // To mimic selection first show the picker |
| db.showDatePicker(); |
| db.getDatePicker().setValue(d, true); |
| } |
| |
| private static void setViaDatePicker(DateBox db, Date d) { |
| db.getDatePicker().setValue(d, true); |
| } |
| |
| public void testFireNullValues() { |
| DateBox db = new DateBox(); |
| db.setFireNullValues(true); |
| assertTrue(db.getFireNullValues()); |
| RootPanel.get().add(db); |
| @SuppressWarnings("unchecked") |
| final ValueChangeEvent<Date>[] eventHolder = new ValueChangeEvent[1]; |
| final boolean[] wasCalled = new boolean[1]; |
| db.addValueChangeHandler(new ValueChangeHandler<Date>() { |
| @Override |
| public void onValueChange(ValueChangeEvent<Date> event) { |
| wasCalled[0] = true; |
| eventHolder[0] = event; |
| } |
| }); |
| |
| // test that an empty string fires an event |
| db.setValue(new Date(1976,1,20)); |
| db.getTextBox().setText(""); |
| NativeEvent e = Document.get().createBlurEvent(); |
| db.getTextBox().getElement().dispatchEvent(e); |
| assertTrue(wasCalled[0]); |
| assertNull(eventHolder[0].getValue()); |
| |
| // test that an invalid date string fires an event, and leaves the text in |
| // the textbox |
| db.setValue(new Date(1976,1,20)); |
| db.getTextBox().setText("abcd"); |
| e = Document.get().createBlurEvent(); |
| db.getTextBox().getElement().dispatchEvent(e); |
| assertTrue(wasCalled[0]); |
| assertNull(eventHolder[0].getValue()); |
| assertEquals("abcd", db.getTextBox().getText()); |
| } |
| } |