The sender parameter to action handlers is now the Calendar instance rather than an instance of a private RPC implementation class. This was probably broken by an earlier refactoring. Change-Id: If15cf232e7578eb55617f45db6b9304f5e80fed5tags/7.1.11
@@ -1824,7 +1824,7 @@ public class Calendar extends AbstractComponent implements | |||
try { | |||
Date start = formatter.parse(startDate); | |||
for (Action.Handler ah : actionHandlers) { | |||
ah.handleAction(action, this, start); | |||
ah.handleAction(action, Calendar.this, start); | |||
} | |||
} catch (ParseException e) { | |||
@@ -1842,7 +1842,7 @@ public class Calendar extends AbstractComponent implements | |||
DateConstants.ACTION_DATE_FORMAT_PATTERN); | |||
formatter.setTimeZone(getTimeZone()); | |||
for (Action.Handler ah : actionHandlers) { | |||
ah.handleAction(action, this, events.get(eventIndex)); | |||
ah.handleAction(action, Calendar.this, events.get(eventIndex)); | |||
} | |||
} | |||
} |
@@ -0,0 +1,114 @@ | |||
/* | |||
* Copyright 2000-2013 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.tests.components.calendar; | |||
import java.text.ParseException; | |||
import java.text.SimpleDateFormat; | |||
import java.util.ArrayList; | |||
import java.util.Date; | |||
import java.util.List; | |||
import com.vaadin.event.Action; | |||
import com.vaadin.event.Action.Handler; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Calendar; | |||
import com.vaadin.ui.Calendar.TimeFormat; | |||
import com.vaadin.ui.Label; | |||
import com.vaadin.ui.components.calendar.CalendarComponentEvents.EventResizeHandler; | |||
import com.vaadin.ui.components.calendar.event.BasicEvent; | |||
import com.vaadin.ui.components.calendar.event.CalendarEvent; | |||
import com.vaadin.ui.components.calendar.event.CalendarEventProvider; | |||
public class CalendarActionEventSource extends AbstractTestUI { | |||
private Calendar calendar; | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
calendar = new Calendar(new CalendarEventProvider() { | |||
@Override | |||
public List<com.vaadin.ui.components.calendar.event.CalendarEvent> getEvents( | |||
Date startDate, Date endDate) { | |||
List<CalendarEvent> events = new ArrayList<CalendarEvent>(); | |||
CalendarEvent event = null; | |||
try { | |||
event = new BasicEvent("NAME", "TOOLTIP", | |||
new SimpleDateFormat("yyyy-MM-dd hh:mm") | |||
.parse("2013-01-01 07:00"), | |||
new SimpleDateFormat("yyyy-MM-dd hh:mm") | |||
.parse("2013-01-01 11:00")); | |||
} catch (ParseException e) { | |||
// Nothing to do | |||
} | |||
events.add(event); | |||
return events; | |||
} | |||
}); | |||
try { | |||
calendar.setStartDate(new SimpleDateFormat("yyyy-MM-dd") | |||
.parse("2013-01-01")); | |||
calendar.setEndDate(new SimpleDateFormat("yyyy-MM-dd") | |||
.parse("2013-01-31")); | |||
} catch (ParseException e) { | |||
// Nothing to do | |||
} | |||
calendar.setImmediate(true); | |||
calendar.setFirstVisibleHourOfDay(6); | |||
calendar.setLastVisibleHourOfDay(22); | |||
calendar.setTimeFormat(TimeFormat.Format24H); | |||
calendar.setHandler((EventResizeHandler) null); | |||
setEnabled(true); | |||
calendar.addActionHandler(new Handler() { | |||
@Override | |||
public void handleAction(Action action, Object sender, Object target) { | |||
Label label1 = new Label(calendar.toString()); | |||
label1.setId("calendarlabel"); | |||
addComponent(label1); | |||
Label label2 = new Label(sender.toString()); | |||
label2.setId("senderlabel"); | |||
addComponent(label2); | |||
} | |||
@Override | |||
public Action[] getActions(Object target, Object sender) { | |||
return new Action[] { new Action("ACTION") }; | |||
} | |||
}); | |||
addComponent(calendar); | |||
calendar.setSizeFull(); | |||
setSizeFull(); | |||
} | |||
@Override | |||
protected String getTestDescription() { | |||
return "Calendar action event source should be the calendar itself"; | |||
} | |||
@Override | |||
protected Integer getTicketNumber() { | |||
return 13191; | |||
} | |||
} |
@@ -0,0 +1,83 @@ | |||
/* | |||
* Copyright 2000-2013 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.tests.components.calendar; | |||
import org.junit.Assert; | |||
import org.junit.Test; | |||
import org.openqa.selenium.By; | |||
import org.openqa.selenium.WebElement; | |||
import org.openqa.selenium.interactions.Actions; | |||
import com.vaadin.tests.tb3.PrivateTB3Configuration; | |||
/** | |||
* Test that calendar action event source is the calendar, not a private nested | |||
* class in it. | |||
* | |||
* The related code is not browser dependent so only running on a single | |||
* browser. | |||
* | |||
* @author Vaadin Ltd | |||
*/ | |||
public class CalendarActionEventSourceTest extends PrivateTB3Configuration { | |||
@Test | |||
public void testActionEventSourceIsCalendarForEmptyCell() throws Exception { | |||
openTestURL(); | |||
// perform action on empty cell | |||
WebElement element = getDriver().findElement( | |||
By.className("v-calendar-spacer")); | |||
performAction(element); | |||
checkEventSourceIsCalendar(); | |||
} | |||
@Test | |||
public void testActionEventSourceIsCalendarForEvent() throws Exception { | |||
openTestURL(); | |||
// perform action on calendar event | |||
WebElement element = getDriver().findElement( | |||
By.className("v-calendar-event")); | |||
performAction(element); | |||
checkEventSourceIsCalendar(); | |||
} | |||
private void performAction(WebElement element) { | |||
// right click | |||
new Actions(getDriver()).contextClick(element).perform(); | |||
WebElement menuItem = getDriver().findElement( | |||
By.className("gwt-MenuItem")); | |||
menuItem.click(); | |||
} | |||
private void checkEventSourceIsCalendar() { | |||
String calendarObject = getDriver().findElement(By.id("calendarlabel")) | |||
.getText(); | |||
String actionSourceObject = getDriver().findElement( | |||
By.id("senderlabel")).getText(); | |||
Assert.assertEquals( | |||
"Calendar action event source must be the calendar itself", | |||
calendarObject, actionSourceObject); | |||
} | |||
@Override | |||
protected Class<?> getUIClass() { | |||
return CalendarActionEventSource.class; | |||
} | |||
} |