blob: cafac56848cb781ae6c1cb89de42964d8333ce8d [file] [log] [blame]
/*
* 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.junit.client.GWTTestCase;
import com.google.gwt.user.datepicker.client.CalendarModel;
import com.google.gwt.user.datepicker.client.CalendarView;
import com.google.gwt.user.datepicker.client.DatePicker;
import com.google.gwt.user.datepicker.client.DefaultMonthSelector;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Tests DatePicker's public api.
*/
@SuppressWarnings("deprecation")
// Due to Date
public class DatePickerTest extends GWTTestCase {
private static class DatePickerWithView extends DatePicker {
DatePickerWithView(MockCalendarView view) {
super(new DefaultMonthSelector(), view, new CalendarModel());
}
}
/**
* Mock calendar view pretends to show datesVisibleList from the first of the month to
* the 30th day after that.
*/
private static class MockCalendarView extends CalendarView {
Map<Date, Set<String>> dateStyles = new HashMap<Date, Set<String>>();
Set<Date> disabledDates = new HashSet<Date>();
MockCalendarView() {
initWidget(new Label());
}
@Override
public void addStyleToDate(String styleName, Date date) {
Set<String> fred = dateStyles.get(date);
if (fred == null) {
fred = new HashSet<String>();
dateStyles.put(date, fred);
}
fred.add(styleName);
}
@Override
public Date getFirstDate() {
Date thisMonth = getModel().getCurrentMonth();
return new Date(thisMonth.getYear(), thisMonth.getMonth(), 1);
}
@Override
public Date getLastDate() {
Date thisMonth = getModel().getCurrentMonth();
return new Date(thisMonth.getYear(), thisMonth.getMonth(), 30);
}
@Override
public boolean isDateEnabled(Date date) {
return !disabledDates.contains(date);
}
@Override
public void refresh() {
}
@Override
public void removeStyleFromDate(String styleName, Date date) {
Set<String> fred;
assertNotNull(fred = dateStyles.get(date));
assertTrue(fred.remove(styleName));
}
@Override
public void setEnabledOnDate(boolean enabled, Date date) {
if (enabled) {
disabledDates.remove(date);
} else {
disabledDates.add(date);
}
}
@Override
protected void setup() {
}
}
private static final String STYLE_LATER = "styleLater";
private static final String STYLE = "style1";
private DatePickerWithView mockedDatePicker;
private MockCalendarView view;
private final Date dateVisible1 = new Date(65, 6, 12);
private final Date dateVisible2 = new Date(65, 6, 13);
private final Date dateVisible3 = new Date(65, 6, 14);
private final Date dateVisible4 = new Date(65, 6, 15);
private final Date dateVisible5 = new Date(65, 6, 16);
private final List<Date> datesVisibleList = new ArrayList<Date>();
private final Date dateLater1 =
new Date(dateVisible1.getYear(), dateVisible1.getMonth() + 1,
dateVisible1.getDay());
private final Date dateLater2 =
new Date(dateVisible2.getYear(), dateVisible2.getMonth() + 1,
dateVisible2.getDay());
private final Date dateLater3 =
new Date(dateVisible1.getYear(), dateVisible3.getMonth() + 1,
dateVisible3.getDay());
private final Date dateLater4 =
new Date(dateVisible2.getYear(), dateVisible4.getMonth() + 1,
dateVisible4.getDay());
private final Date dateLater5 =
new Date(dateVisible1.getYear(), dateVisible5.getMonth() + 1,
dateVisible5.getDay());
private final List<Date> datesLaterList = new ArrayList<Date>();
{
datesVisibleList.add(dateVisible4);
datesVisibleList.add(dateVisible5);
}
{
datesLaterList.add(dateLater4);
datesLaterList.add(dateLater5);
}
public String getModuleName() {
return "com.google.gwt.user.User";
}
@Override
public void gwtSetUp() throws Exception {
super.gwtSetUp();
view = new MockCalendarView();
mockedDatePicker = new DatePickerWithView(view);
mockedDatePicker.setCurrentMonth(dateVisible1);
}
public void testDisabling() {
mockedDatePicker.setTransientEnabledOnDates(false, dateVisible1);
mockedDatePicker.setTransientEnabledOnDates(false, dateVisible2,
dateVisible3);
mockedDatePicker.setTransientEnabledOnDates(false, datesVisibleList);
assertTrue(view.disabledDates.contains(dateVisible1));
assertTrue(view.disabledDates.contains(dateVisible2));
assertTrue(view.disabledDates.contains(dateVisible3));
assertTrue(view.disabledDates.contains(dateVisible4));
assertTrue(view.disabledDates.contains(dateVisible5));
mockedDatePicker.setTransientEnabledOnDates(true, dateVisible1);
mockedDatePicker.setTransientEnabledOnDates(true, dateVisible2,
dateVisible3);
mockedDatePicker.setTransientEnabledOnDates(true, datesVisibleList);
assertFalse(view.disabledDates.contains(dateVisible1));
assertFalse(view.disabledDates.contains(dateVisible2));
assertFalse(view.disabledDates.contains(dateVisible3));
assertFalse(view.disabledDates.contains(dateVisible4));
assertFalse(view.disabledDates.contains(dateVisible5));
}
public void testStyleSetting() {
mockedDatePicker.addStyleToDates(STYLE, dateVisible1);
mockedDatePicker.addStyleToDates(STYLE, dateVisible2, dateVisible3);
mockedDatePicker.addStyleToDates(STYLE, datesVisibleList);
assertViewHasStyleOnVisibleDates(STYLE);
assertPickerHasStyleOnVisibleDates(STYLE);
// See that styles on an invisible datesVisibleList don't
mockedDatePicker.addStyleToDates(STYLE_LATER, dateLater1);
mockedDatePicker.addStyleToDates(STYLE_LATER, dateLater2, dateLater3);
mockedDatePicker.addStyleToDates(STYLE_LATER, datesLaterList);
assertViewHasNoStyleOnHiddenDates();
assertPickerLacksStyleOnHiddenDates(STYLE_LATER);
// Remove a style from a visible date, and it should leave the view too
mockedDatePicker.removeStyleFromDates(STYLE, dateVisible1);
mockedDatePicker.removeStyleFromDates(STYLE, dateVisible2, dateVisible3);
mockedDatePicker.removeStyleFromDates(STYLE, datesVisibleList);
assertViewLacksStyleOnVisibleDates(STYLE);
assertPickerLacksStyleOnVisibleDates();
// Remove a style from an invisible date, and the view should not hear
// about it (the mock will explode if asked to remove a style it doesn't
// have)
mockedDatePicker.removeStyleFromDates(STYLE_LATER, dateLater1);
mockedDatePicker.removeStyleFromDates(STYLE_LATER, dateLater2, dateLater3);
mockedDatePicker.removeStyleFromDates(STYLE_LATER, datesLaterList);
assertPickerHasNoStyleOnInvisibleDates();
}
public void testTransientStyles() {
mockedDatePicker.addTransientStyleToDates(STYLE, dateVisible1);
mockedDatePicker.addTransientStyleToDates(STYLE, dateVisible2,
dateVisible3);
mockedDatePicker.addTransientStyleToDates(STYLE, datesVisibleList);
assertViewHasStyleOnVisibleDates(STYLE);
assertPickerLacksStyleOnVisibleDates();
mockedDatePicker.removeStyleFromDates(STYLE, dateVisible1);
mockedDatePicker.removeStyleFromDates(STYLE, dateVisible2, dateVisible3);
mockedDatePicker.removeStyleFromDates(STYLE, datesVisibleList);
assertViewLacksStyleOnVisibleDates(STYLE);
assertPickerLacksStyleOnVisibleDates();
}
public void testValueChangeEvent() {
DatePicker dp = new DatePicker();
RootPanel.get().add(dp);
new DateValueChangeTester(dp).run();
}
public void testValueStyle() {
assertNull(mockedDatePicker.getStyleOfDate(dateVisible4));
mockedDatePicker.setValue(dateVisible4);
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible4).contains("datePickerDayIsValue"));
assertTrue(view.dateStyles.get(dateVisible4).contains("datePickerDayIsValue"));
mockedDatePicker.setValue(dateVisible5);
assertNull(mockedDatePicker.getStyleOfDate(dateVisible4));
assertFalse(view.dateStyles.get(dateVisible4).contains("datePickerDayIsValue"));
}
private void assertPickerHasNoStyleOnInvisibleDates() {
assertNull(mockedDatePicker.getStyleOfDate(dateLater1));
assertNull(mockedDatePicker.getStyleOfDate(dateLater2));
assertNull(mockedDatePicker.getStyleOfDate(dateLater3));
assertNull(mockedDatePicker.getStyleOfDate(dateLater4));
assertNull(mockedDatePicker.getStyleOfDate(dateLater5));
}
private void assertPickerHasStyleOnVisibleDates(String style) {
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible1).contains(
style));
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible2).contains(
style));
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible3).contains(
style));
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible4).contains(
style));
assertTrue(mockedDatePicker.getStyleOfDate(dateVisible5).contains(
style));
}
private void assertPickerLacksStyleOnHiddenDates(String styleLater) {
assertTrue(mockedDatePicker.getStyleOfDate(dateLater1).contains(
styleLater));
assertTrue(mockedDatePicker.getStyleOfDate(dateLater2).contains(
styleLater));
assertTrue(mockedDatePicker.getStyleOfDate(dateLater3).contains(
styleLater));
assertTrue(mockedDatePicker.getStyleOfDate(dateLater4).contains(
styleLater));
assertTrue(mockedDatePicker.getStyleOfDate(dateLater5).contains(
styleLater));
}
private void assertPickerLacksStyleOnVisibleDates() {
assertNull(mockedDatePicker.getStyleOfDate(dateVisible1));
assertNull(mockedDatePicker.getStyleOfDate(dateVisible2));
assertNull(mockedDatePicker.getStyleOfDate(dateVisible3));
assertNull(mockedDatePicker.getStyleOfDate(dateVisible4));
assertNull(mockedDatePicker.getStyleOfDate(dateVisible5));
}
private void assertViewHasNoStyleOnHiddenDates() {
assertNull(view.dateStyles.get(dateLater1));
assertNull(view.dateStyles.get(dateLater2));
assertNull(view.dateStyles.get(dateLater3));
assertNull(view.dateStyles.get(dateLater4));
assertNull(view.dateStyles.get(dateLater5));
}
private void assertViewHasStyleOnVisibleDates(String style) {
assertTrue(view.dateStyles.get(dateVisible1).contains(style));
assertTrue(view.dateStyles.get(dateVisible2).contains(style));
assertTrue(view.dateStyles.get(dateVisible3).contains(style));
assertTrue(view.dateStyles.get(dateVisible4).contains(style));
assertTrue(view.dateStyles.get(dateVisible5).contains(style));
}
private void assertViewLacksStyleOnVisibleDates(String style) {
assertFalse(view.dateStyles.get(dateVisible1).contains(style));
assertFalse(view.dateStyles.get(dateVisible2).contains(style));
assertFalse(view.dateStyles.get(dateVisible3).contains(style));
assertFalse(view.dateStyles.get(dateVisible4).contains(style));
assertFalse(view.dateStyles.get(dateVisible5).contains(style));
}
}