Browse Source

Use Calendar as sender for action handlers (#13191)

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: If15cf232e7578eb55617f45db6b9304f5e80fed5
tags/7.1.11
Henri Sara 10 years ago
parent
commit
e5dee6a741

+ 2
- 2
server/src/com/vaadin/ui/Calendar.java View File

@@ -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));
}
}
}

+ 114
- 0
uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java View File

@@ -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;
}

}

+ 83
- 0
uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java View File

@@ -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;
}

}

Loading…
Cancel
Save