123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /*
- * Copyright 2000-2016 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.server;
-
- import java.util.EventObject;
-
- import org.easymock.EasyMock;
- import org.junit.Assert;
- import org.junit.Test;
-
- import com.vaadin.event.ContextClickEvent;
- import com.vaadin.event.ContextClickEvent.ContextClickListener;
- import com.vaadin.ui.AbstractComponent;
- import com.vaadin.ui.LegacyGrid.GridContextClickEvent;
- import com.vaadin.ui.Table.TableContextClickEvent;
-
- /**
- * Server-side unit tests to see that context click events are sent to listeners
- * correctly.
- *
- * If a listener is listening to a super type of an event, it should get the
- * event. i.e. Listening to ContextClickEvent, it should get the specialized
- * GridContextClickEvent as well.
- *
- * If a listener is listening to a sub-type of an event, it should not get the
- * super version. i.e. Listening to GridContextClickEvent, it should not get a
- * plain ContextClickEvent.
- */
- public class ContextClickListenerTest extends AbstractComponent {
-
- private final static ContextClickEvent contextClickEvent = EasyMock
- .createMock(ContextClickEvent.class);
- private final static GridContextClickEvent gridContextClickEvent = EasyMock
- .createMock(GridContextClickEvent.class);
- private final static TableContextClickEvent tableContextClickEvent = EasyMock
- .createMock(TableContextClickEvent.class);
-
- private final AssertListener contextListener = new AssertListener();
- private final AssertListener ctxtListener2 = new AssertListener();
-
- public static class AssertListener implements ContextClickListener {
-
- private Class<?> expected = null;
- private String error = null;
-
- @Override
- public void contextClick(ContextClickEvent event) {
- if (expected == null) {
- error = "Unexpected context click event.";
- return;
- }
-
- if (!expected.isAssignableFrom(event.getClass())) {
- error = "Expected event type did not match the actual event.";
- }
-
- expected = null;
- }
-
- public <T extends ContextClickEvent> void expect(Class<T> clazz) {
- validate();
- expected = clazz;
- }
-
- public void validate() {
- if (expected != null) {
- Assert.fail("Expected context click never happened.");
- } else if (error != null) {
- Assert.fail(error);
- }
- }
- }
-
- @Test
- public void testListenerGetsASubClass() {
- addContextClickListener(contextListener);
- contextListener.expect(GridContextClickEvent.class);
- fireEvent(gridContextClickEvent);
- }
-
- @Test
- public void testListenerGetsExactClass() {
- addContextClickListener(contextListener);
- contextListener.expect(ContextClickEvent.class);
- fireEvent(contextClickEvent);
- }
-
- /**
- * Multiple listeners should get fitting events.
- */
- @Test
- public void testMultipleListenerGetEvents() {
- addContextClickListener(ctxtListener2);
- addContextClickListener(contextListener);
-
- ctxtListener2.expect(GridContextClickEvent.class);
- contextListener.expect(GridContextClickEvent.class);
-
- fireEvent(gridContextClickEvent);
- }
-
- @Test
- public void testAddAndRemoveListener() {
- addContextClickListener(contextListener);
- contextListener.expect(ContextClickEvent.class);
-
- fireEvent(contextClickEvent);
-
- removeContextClickListener(contextListener);
-
- fireEvent(contextClickEvent);
- }
-
- @Test
- public void testAddAndRemoveMultipleListeners() {
- addContextClickListener(ctxtListener2);
- addContextClickListener(contextListener);
-
- ctxtListener2.expect(GridContextClickEvent.class);
- contextListener.expect(GridContextClickEvent.class);
- fireEvent(gridContextClickEvent);
-
- removeContextClickListener(ctxtListener2);
-
- contextListener.expect(GridContextClickEvent.class);
- fireEvent(gridContextClickEvent);
- }
-
- @Test(expected = AssertionError.class)
- public void testExpectedEventNotReceived() {
- addContextClickListener(contextListener);
- contextListener.expect(GridContextClickEvent.class);
- fireEvent(contextClickEvent);
- }
-
- @Test(expected = AssertionError.class)
- public void testUnexpectedEventReceived() {
- addContextClickListener(contextListener);
- fireEvent(gridContextClickEvent);
- }
-
- @Override
- protected void fireEvent(EventObject event) {
- super.fireEvent(event);
-
- // Validate listeners automatically.
- ctxtListener2.validate();
- contextListener.validate();
- }
- }
|