/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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.vaadin.v7.tests.server.component.calendar;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import org.junit.Assert;
import org.junit.Test;
import com.vaadin.v7.ui.Calendar;
import com.vaadin.v7.ui.Calendar.TimeFormat;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.BackwardEvent;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.DateClickEvent;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.EventResize;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.ForwardEvent;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.MoveEvent;
import com.vaadin.v7.ui.components.calendar.CalendarComponentEvents.WeekClick;
import com.vaadin.v7.ui.components.calendar.event.BasicEventProvider;
import com.vaadin.v7.ui.components.calendar.event.CalendarEventProvider;
/**
* Basic API tests for the calendar
*/
public class CalendarBasicsTest {
@Test
public void testEmptyConstructorInitialization() {
Calendar calendar = new Calendar();
// The calendar should have a basic event provider with no events
CalendarEventProvider provider = calendar.getEventProvider();
assertNotNull("Event provider should not be null", provider);
// Basic event handlers should be registered
assertNotNull(calendar.getHandler(BackwardEvent.EVENT_ID));
assertNotNull(calendar.getHandler(ForwardEvent.EVENT_ID));
assertNotNull(calendar.getHandler(WeekClick.EVENT_ID));
assertNotNull(calendar.getHandler(DateClickEvent.EVENT_ID));
assertNotNull(calendar.getHandler(MoveEvent.EVENT_ID));
assertNotNull(calendar.getHandler(EventResize.EVENT_ID));
// Calendar should have undefined size
assertTrue(calendar.getWidth() < 0);
assertTrue(calendar.getHeight() < 0);
}
@Test
public void testConstructorWithCaption() {
final String caption = "My Calendar Caption";
Calendar calendar = new Calendar(caption);
assertEquals(caption, calendar.getCaption());
}
@Test
public void testConstructorWithCustomEventProvider() {
BasicEventProvider myProvider = new BasicEventProvider();
Calendar calendar = new Calendar(myProvider);
assertEquals(myProvider, calendar.getEventProvider());
}
@Test
public void testConstructorWithCustomEventProviderAndCaption() {
BasicEventProvider myProvider = new BasicEventProvider();
final String caption = "My Calendar Caption";
Calendar calendar = new Calendar(caption, myProvider);
assertEquals(caption, calendar.getCaption());
assertEquals(myProvider, calendar.getEventProvider());
}
@Test
public void testDefaultStartAndEndDates() {
Calendar calendar = new Calendar();
// If no start and end date is set the calendar will display the current
// week
java.util.Calendar c = new GregorianCalendar();
java.util.Calendar c2 = new GregorianCalendar();
c2.setTime(calendar.getStartDate());
assertEquals(c.getFirstDayOfWeek(),
c2.get(java.util.Calendar.DAY_OF_WEEK));
c2.setTime(calendar.getEndDate());
c.set(java.util.Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
assertEquals(c.get(java.util.Calendar.DAY_OF_WEEK),
c2.get(java.util.Calendar.DAY_OF_WEEK));
}
@Test
public void testCustomStartAndEndDates() {
Calendar calendar = new Calendar();
java.util.Calendar c = new GregorianCalendar();
Date start = c.getTime();
c.add(java.util.Calendar.DATE, 3);
Date end = c.getTime();
calendar.setStartDate(start);
calendar.setEndDate(end);
assertEquals(start.getTime(), calendar.getStartDate().getTime());
assertEquals(end.getTime(), calendar.getEndDate().getTime());
}
@Test
public void testCustomLocale() {
Calendar calendar = new Calendar();
calendar.setLocale(Locale.CANADA_FRENCH);
// Setting the locale should set the internal calendars locale
assertEquals(Locale.CANADA_FRENCH, calendar.getLocale());
java.util.Calendar c = new GregorianCalendar(Locale.CANADA_FRENCH);
assertEquals(c.getTimeZone().getRawOffset(),
calendar.getInternalCalendar().getTimeZone().getRawOffset());
}
@Test
public void testTimeFormat() {
Calendar calendar = new Calendar();
// The default timeformat depends on the current locale
calendar.setLocale(Locale.ENGLISH);
assertEquals(TimeFormat.Format12H, calendar.getTimeFormat());
calendar.setLocale(Locale.ITALIAN);
assertEquals(TimeFormat.Format24H, calendar.getTimeFormat());
// Setting a specific time format overrides the locale
calendar.setTimeFormat(TimeFormat.Format12H);
assertEquals(TimeFormat.Format12H, calendar.getTimeFormat());
}
@Test
public void testTimeZone() {
Calendar calendar = new Calendar();
calendar.setLocale(Locale.CANADA_FRENCH);
// By default the calendars timezone is returned
assertEquals(calendar.getInternalCalendar().getTimeZone(),
calendar.getTimeZone());
// One can override the default behaviour by specifying a timezone
TimeZone customTimeZone = TimeZone.getTimeZone("Europe/Helsinki");
calendar.setTimeZone(customTimeZone);
assertEquals(customTimeZone, calendar.getTimeZone());
}
@Test
public void testVisibleDaysOfWeek() {
Calendar calendar = new Calendar();
// The defaults are the whole week
assertEquals(1, calendar.getFirstVisibleDayOfWeek());
assertEquals(7, calendar.getLastVisibleDayOfWeek());
calendar.setFirstVisibleDayOfWeek(0); // Invalid input
assertEquals(1, calendar.getFirstVisibleDayOfWeek());
calendar.setLastVisibleDayOfWeek(0); // Invalid input
assertEquals(7, calendar.getLastVisibleDayOfWeek());
calendar.setFirstVisibleDayOfWeek(8); // Invalid input
assertEquals(1, calendar.getFirstVisibleDayOfWeek());
calendar.setLastVisibleDayOfWeek(8); // Invalid input
assertEquals(7, calendar.getLastVisibleDayOfWeek());
calendar.setFirstVisibleDayOfWeek(4);
assertEquals(4, calendar.getFirstVisibleDayOfWeek());
calendar.setLastVisibleDayOfWeek(6);
assertEquals(6, calendar.getLastVisibleDayOfWeek());
calendar.setFirstVisibleDayOfWeek(7); // Invalid since last day is 6
assertEquals(4, calendar.getFirstVisibleDayOfWeek());
calendar.setLastVisibleDayOfWeek(2); // Invalid since first day is 4
assertEquals(6, calendar.getLastVisibleDayOfWeek());
}
@Test
public void testVisibleHoursInDay() {
Calendar calendar = new Calendar();
// Defaults are the whole day
assertEquals(0, calendar.getFirstVisibleHourOfDay());
assertEquals(23, calendar.getLastVisibleHourOfDay());
}
@Test
public void isClientChangeAllowed_connectorEnabled() {
TestCalendar calendar = new TestCalendar(true);
Assert.assertTrue(
"Calendar with enabled connector doesn't allow client change",
calendar.isClientChangeAllowed());
}
// regression test to ensure old functionality is not broken
@Test
public void defaultFirstDayOfWeek() {
Calendar calendar = new Calendar();
calendar.setLocale(Locale.GERMAN);
// simulating consequences of markAsDirty
calendar.beforeClientResponse(true);
assertEquals(java.util.Calendar.MONDAY,
calendar.getInternalCalendar().getFirstDayOfWeek());
}
@Test
public void customFirstDayOfWeek() {
Calendar calendar = new Calendar();
calendar.setLocale(Locale.GERMAN);
calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
// simulating consequences of markAsDirty
calendar.beforeClientResponse(true);
assertEquals(java.util.Calendar.SUNDAY,
calendar.getInternalCalendar().getFirstDayOfWeek());
}
@Test
public void customFirstDayOfWeekCanSetEvenBeforeLocale() {
Calendar calendar = new Calendar();
calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
calendar.setLocale(Locale.GERMAN);
// simulating consequences of markAsDirty
calendar.beforeClientResponse(true);
assertEquals(java.util.Calendar.SUNDAY,
calendar.getInternalCalendar().getFirstDayOfWeek());
}
@Test
public void customFirstDayOfWeekSetNullRestoresDefault() {
Calendar calendar = new Calendar();
calendar.setLocale(Locale.GERMAN);
calendar.setFirstDayOfWeek(java.util.Calendar.SUNDAY);
calendar.setFirstDayOfWeek(null);
// simulating consequences of markAsDirty
calendar.beforeClientResponse(true);
assertEquals(java.util.Calendar.MONDAY,
calendar.getInternalCalendar().getFirstDayOfWeek());
}
@Test(expected = IllegalArgumentException.class)
public void customFirstDayOfWeekValidation() {
Calendar calendar = new Calendar();
int someWrongDayOfWeek = 10;
calendar.setFirstDayOfWeek(someWrongDayOfWeek);
}
private static class TestCalendar extends Calendar {
TestCalendar(boolean connectorEnabled) {
isConnectorEnabled = connectorEnabled;
}
@Override
public boolean isConnectorEnabled() {
return isConnectorEnabled;
}
@Override
public boolean isClientChangeAllowed() {
return super.isClientChangeAllowed();
}
private final boolean isConnectorEnabled;
}
}