]> source.dussan.org Git - vaadin-framework.git/commitdiff
Use Calendar as sender for action handlers (#13191)
authorHenri Sara <hesara@vaadin.com>
Thu, 30 Jan 2014 09:39:57 +0000 (11:39 +0200)
committerVaadin Code Review <review@vaadin.com>
Thu, 30 Jan 2014 09:43:00 +0000 (09:43 +0000)
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

server/src/com/vaadin/ui/Calendar.java
uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSource.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/calendar/CalendarActionEventSourceTest.java [new file with mode: 0644]

index 9ccc8ea2d9c70f0d5de373dc2ccfdc1caef3b77f..b0999451c357ab9096103aa4da5e14b831a1b2ff 100644 (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));
             }
         }
     }
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 (file)
index 0000000..5e81750
--- /dev/null
@@ -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 (file)
index 0000000..6fbe770
--- /dev/null
@@ -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;
+    }
+
+}