aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2014-01-30 11:39:57 +0200
committerVaadin Code Review <review@vaadin.com>2014-01-30 09:43:00 +0000
commite5dee6a7417e4466ad35bd9150174f86204bca3e (patch)
treede04cf3c01b7d248349c814596b3a96288d04b32
parent69983d0aa0400a3c110e960d0f9da0ca0a59a094 (diff)
downloadvaadin-framework-e5dee6a7417e4466ad35bd9150174f86204bca3e.tar.gz
vaadin-framework-e5dee6a7417e4466ad35bd9150174f86204bca3e.zip
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
-rw-r--r--server/src/com/vaadin/ui/Calendar.java4
-rw-r--r--uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java114
-rw-r--r--uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java83
3 files changed, 199 insertions, 2 deletions
diff --git a/server/src/com/vaadin/ui/Calendar.java b/server/src/com/vaadin/ui/Calendar.java
index 9ccc8ea2d9..b0999451c3 100644
--- a/server/src/com/vaadin/ui/Calendar.java
+++ b/server/src/com/vaadin/ui/Calendar.java
@@ -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));
}
}
}
diff --git a/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java b/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java
new file mode 100644
index 0000000000..5e81750e58
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java
@@ -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;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java b/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java
new file mode 100644
index 0000000000..6fbe77040f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java
@@ -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;
+ }
+
+}