You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ContextClickListenerTest.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.vaadin.v7.tests.server;
  2. import static org.junit.Assert.fail;
  3. import java.util.EventObject;
  4. import org.easymock.EasyMock;
  5. import org.junit.Test;
  6. import com.vaadin.event.ContextClickEvent;
  7. import com.vaadin.event.ContextClickEvent.ContextClickListener;
  8. import com.vaadin.ui.AbstractComponent;
  9. import com.vaadin.v7.ui.Grid.GridContextClickEvent;
  10. import com.vaadin.v7.ui.Table.TableContextClickEvent;
  11. /**
  12. * Server-side unit tests to see that context click events are sent to listeners
  13. * correctly.
  14. *
  15. * If a listener is listening to a super type of an event, it should get the
  16. * event. i.e. Listening to ContextClickEvent, it should get the specialized
  17. * GridContextClickEvent as well.
  18. *
  19. * If a listener is listening to a sub-type of an event, it should not get the
  20. * super version. i.e. Listening to GridContextClickEvent, it should not get a
  21. * plain ContextClickEvent.
  22. */
  23. public class ContextClickListenerTest extends AbstractComponent {
  24. private static final ContextClickEvent contextClickEvent = EasyMock
  25. .createMock(ContextClickEvent.class);
  26. private static final GridContextClickEvent gridContextClickEvent = EasyMock
  27. .createMock(GridContextClickEvent.class);
  28. private static final TableContextClickEvent tableContextClickEvent = EasyMock
  29. .createMock(TableContextClickEvent.class);
  30. private final AssertListener contextListener = new AssertListener();
  31. private final AssertListener ctxtListener2 = new AssertListener();
  32. public static class AssertListener implements ContextClickListener {
  33. private Class<?> expected = null;
  34. private String error = null;
  35. @Override
  36. public void contextClick(ContextClickEvent event) {
  37. if (expected == null) {
  38. error = "Unexpected context click event.";
  39. return;
  40. }
  41. if (!expected.isAssignableFrom(event.getClass())) {
  42. error = "Expected event type did not match the actual event.";
  43. }
  44. expected = null;
  45. }
  46. public <T extends ContextClickEvent> void expect(Class<T> clazz) {
  47. validate();
  48. expected = clazz;
  49. }
  50. public void validate() {
  51. if (expected != null) {
  52. fail("Expected context click never happened.");
  53. } else if (error != null) {
  54. fail(error);
  55. }
  56. }
  57. }
  58. @Test
  59. public void testListenerGetsASubClass() {
  60. addContextClickListener(contextListener);
  61. contextListener.expect(GridContextClickEvent.class);
  62. fireEvent(gridContextClickEvent);
  63. }
  64. @Test
  65. public void testListenerGetsExactClass() {
  66. addContextClickListener(contextListener);
  67. contextListener.expect(ContextClickEvent.class);
  68. fireEvent(contextClickEvent);
  69. }
  70. /**
  71. * Multiple listeners should get fitting events.
  72. */
  73. @Test
  74. public void testMultipleListenerGetEvents() {
  75. addContextClickListener(ctxtListener2);
  76. addContextClickListener(contextListener);
  77. ctxtListener2.expect(GridContextClickEvent.class);
  78. contextListener.expect(GridContextClickEvent.class);
  79. fireEvent(gridContextClickEvent);
  80. }
  81. @Test
  82. public void testAddAndRemoveListener() {
  83. addContextClickListener(contextListener);
  84. contextListener.expect(ContextClickEvent.class);
  85. fireEvent(contextClickEvent);
  86. removeContextClickListener(contextListener);
  87. fireEvent(contextClickEvent);
  88. }
  89. @Test
  90. public void testAddAndRemoveMultipleListeners() {
  91. addContextClickListener(ctxtListener2);
  92. addContextClickListener(contextListener);
  93. ctxtListener2.expect(GridContextClickEvent.class);
  94. contextListener.expect(GridContextClickEvent.class);
  95. fireEvent(gridContextClickEvent);
  96. removeContextClickListener(ctxtListener2);
  97. contextListener.expect(GridContextClickEvent.class);
  98. fireEvent(gridContextClickEvent);
  99. }
  100. @Test(expected = AssertionError.class)
  101. public void testExpectedEventNotReceived() {
  102. addContextClickListener(contextListener);
  103. contextListener.expect(GridContextClickEvent.class);
  104. fireEvent(contextClickEvent);
  105. }
  106. @Test(expected = AssertionError.class)
  107. public void testUnexpectedEventReceived() {
  108. addContextClickListener(contextListener);
  109. fireEvent(gridContextClickEvent);
  110. }
  111. @Override
  112. protected void fireEvent(EventObject event) {
  113. super.fireEvent(event);
  114. // Validate listeners automatically.
  115. ctxtListener2.validate();
  116. contextListener.validate();
  117. }
  118. }