package org.qooxdoo.demo.websitewidgetbrowser;
import java.util.Date;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
public class Calendar extends WebsiteWidgetBrowser {
protected String[] monthNamesDefault = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
protected String[] monthNamesCustom = {"Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"};
protected static int month;
protected static int year;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
WebsiteWidgetBrowser.setUpBeforeClass();
selectTab("Calendar");
Date date = new Date();
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime(date);
year = cal.get(java.util.Calendar.YEAR);
month = cal.get(java.util.Calendar.MONTH);
}
@Test
public void calendarDefault() throws InterruptedException {
testCalendar("calendar-default");
}
@Test
public void calendarCustom() throws InterruptedException {
testCalendar("calendar-custom");
}
public void testCalendar(String id) throws InterruptedException {
By calHeaderLoc = By.xpath("descendant::td[contains(@class, 'qx-calendar-month')]");
By prevMonthLoc = By.xpath("descendant::button[contains(@class, 'qx-calendar-prev')]");
By nextMonthLoc = By.xpath("descendant::button[contains(@class, 'qx-calendar-next')]");
String[] monthNames;
if (id.contains("custom")) {
monthNames = monthNamesCustom;
} else {
monthNames = monthNamesDefault;
}
WebElement calendar = webDriver.findElement(By.id(id));
WebElement calHeader = calendar.findElement(calHeaderLoc);
Assert.assertEquals(monthNames[month] + " " + year, calHeader.getText());
String getValue = "return qxWeb('#" + id + "').getValue()";
JavascriptExecutor exec = (JavascriptExecutor) webDriver;
String valueBefore = (String) exec.executeScript(getValue);
WebElement prevMonth = calendar.findElement(prevMonthLoc);
prevMonth.click();
// refresh the elements because the calendar re-renders itself if the displayed month changes
calendar = webDriver.findElement(By.id(id));
calHeader = calendar.findElement(calHeaderLoc);
int prevMonthIdx;
int prevYear = year;
if (month == 0) {
prevMonthIdx = 11;
prevYear = prevYear - 1;
} else {
prevMonthIdx = month - 1;
}
String prevMonthName = monthNames[prevMonthIdx];
Assert.assertEquals(prevMonthName + " " + prevYear, calHeader.getText());
WebElement nextMonth = calendar.findElement(nextMonthLoc);
nextMonth.click();
nextMonth = calendar.findElement(nextMonthLoc);
nextMonth.click();
// refresh the elements because the calendar re-renders itself if the displayed month changes
calendar = webDriver.findElement(By.id(id));
calHeader = calendar.findElement(calHeaderLoc);
int nextMonthIdx;
int nextYear = year;
if (month == 11) {
nextMonthIdx = 0;
nextYear = nextYear + 1;
} else {
nextMonthIdx = month + 1;
}
String nextMonthName = monthNames[nextMonthIdx];
Assert.assertEquals(nextMonthName + " " + nextYear, calHeader.getText());
WebElement day = calendar.findElement(By.xpath("descendant::button[contains(@class, 'qx-calendar-day') and text() = '17']"));
day.click();
Thread.sleep(250);
String getDateString = getValue + ".toString()";
String valueAfter = (String) exec.executeScript(getDateString);
Assert.assertNotEquals(valueBefore, valueAfter);
String nextMonthNameEn = monthNamesDefault[nextMonthIdx];
nextMonthNameEn = nextMonthNameEn.substring(0, 3);
System.out.println("valueAfter " + valueAfter);
System.out.println(" " + nextMonthNameEn + " 17 " + nextYear);
Assert.assertTrue(valueAfter.contains(" " + nextMonthNameEn + " 17 " + nextYear));
}
}