]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merge remote-tracking branch 'origin/master' into grid
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Mon, 12 Jan 2015 09:28:55 +0000 (11:28 +0200)
committerTeemu Suo-Anttila <teemusa@vaadin.com>
Mon, 12 Jan 2015 09:28:55 +0000 (11:28 +0200)
Change-Id: Ic6b667ea6ceff43a609ce2037f656c6274871fb7

1  2 
client/src/com/vaadin/client/ApplicationConnection.java
client/src/com/vaadin/client/communication/AtmospherePushConnection.java
client/src/com/vaadin/client/ui/calendar/CalendarConnector.java
client/src/com/vaadin/client/ui/calendar/schedule/DateCellDayEvent.java
common.xml
server/tests/src/com/vaadin/data/util/BeanItemContainerTest.java
server/tests/src/com/vaadin/data/util/IndexedContainerTest.java
uitest/src/com/vaadin/tests/serialization/SerializerTest.java
uitest/src/com/vaadin/tests/serialization/SerializerTestTest.java

index abc94190492d8c87b3b1e36bbc1b557c76a388a8,8b08e9bc7a0b527db2317e079b42a8cdf2613e43..1a54fe045483c4a4205d7b9909c3ca25b36a8bad
@@@ -184,15 -184,20 +184,20 @@@ public class DateCellDayEvent extends F
       */
      private void updateCaptions(boolean bigMode) {
          String innerHtml;
-         String escapedCaption = WidgetUtil.escapeHTML(calendarEvent
-                 .getCaption());
          String timeAsText = calendarEvent.getTimeAsText();
 -            htmlOrText = Util.escapeHTML(calendarEvent.getCaption());
+         String htmlOrText;
+         if (dateCell.weekgrid.getCalendar().isEventCaptionAsHtml()) {
+             htmlOrText = calendarEvent.getCaption();
+         } else {
++            htmlOrText = WidgetUtil.escapeHTML(calendarEvent.getCaption());
+         }
          if (bigMode) {
-             innerHtml = "<span>" + timeAsText + "</span><br />"
-                     + escapedCaption;
+             innerHtml = "<span>" + timeAsText + "</span><br />" + htmlOrText;
          } else {
              innerHtml = "<span>" + timeAsText + "<span>:</span></span> "
-                     + escapedCaption;
+                     + htmlOrText;
          }
          caption.setInnerHTML(innerHtml);
          eventContent.setInnerHTML("");
diff --cc common.xml
Simple merge
index 0000000000000000000000000000000000000000,2f64e7c7970cbba3cf8b8318fcddea184155c884..5828ac88cc84c2a8e7aa95d0a07479bac63af39e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,395 +1,539 @@@
+ package com.vaadin.data.util;
+ import java.util.List;
++import org.easymock.Capture;
++import org.easymock.EasyMock;
+ import org.junit.Assert;
++import com.vaadin.data.Container.Indexed.ItemAddEvent;
++import com.vaadin.data.Container.Indexed.ItemRemoveEvent;
++import com.vaadin.data.Container.ItemSetChangeListener;
+ import com.vaadin.data.Item;
+ public class IndexedContainerTest extends AbstractInMemoryContainerTestBase {
+     public void testBasicOperations() {
+         testBasicContainerOperations(new IndexedContainer());
+     }
+     public void testFiltering() {
+         testContainerFiltering(new IndexedContainer());
+     }
+     public void testSorting() {
+         testContainerSorting(new IndexedContainer());
+     }
+     public void testSortingAndFiltering() {
+         testContainerSortingAndFiltering(new IndexedContainer());
+     }
+     public void testContainerOrdered() {
+         testContainerOrdered(new IndexedContainer());
+     }
+     public void testContainerIndexed() {
+         testContainerIndexed(new IndexedContainer(), sampleData[2], 2, true,
+                 "newItemId", true);
+     }
+     public void testItemSetChangeListeners() {
+         IndexedContainer container = new IndexedContainer();
+         ItemSetChangeCounter counter = new ItemSetChangeCounter();
+         container.addListener(counter);
+         String id1 = "id1";
+         String id2 = "id2";
+         String id3 = "id3";
+         initializeContainer(container);
+         counter.reset();
+         container.addItem();
+         counter.assertOnce();
+         container.addItem(id1);
+         counter.assertOnce();
+         initializeContainer(container);
+         counter.reset();
+         container.addItemAt(0);
+         counter.assertOnce();
+         container.addItemAt(0, id1);
+         counter.assertOnce();
+         container.addItemAt(0, id2);
+         counter.assertOnce();
+         container.addItemAt(container.size(), id3);
+         counter.assertOnce();
+         // no notification if already in container
+         container.addItemAt(0, id1);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         container.addItemAfter(null);
+         counter.assertOnce();
+         container.addItemAfter(null, id1);
+         counter.assertOnce();
+         container.addItemAfter(id1);
+         counter.assertOnce();
+         container.addItemAfter(id1, id2);
+         counter.assertOnce();
+         container.addItemAfter(container.firstItemId());
+         counter.assertOnce();
+         container.addItemAfter(container.lastItemId());
+         counter.assertOnce();
+         container.addItemAfter(container.lastItemId(), id3);
+         counter.assertOnce();
+         // no notification if already in container
+         container.addItemAfter(0, id1);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         container.removeItem(sampleData[0]);
+         counter.assertOnce();
+         initializeContainer(container);
+         counter.reset();
+         // no notification for removing a non-existing item
+         container.removeItem(id1);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         container.removeAllItems();
+         counter.assertOnce();
+         // already empty
+         container.removeAllItems();
+         counter.assertNone();
+     }
+     public void testAddRemoveContainerFilter() {
+         IndexedContainer container = new IndexedContainer();
+         ItemSetChangeCounter counter = new ItemSetChangeCounter();
+         container.addListener(counter);
+         // simply adding or removing container filters should cause events
+         // (content changes)
+         initializeContainer(container);
+         counter.reset();
+         container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+         counter.assertOnce();
+         container.removeContainerFilters(SIMPLE_NAME);
+         counter.assertOnce();
+         container.addContainerFilter(SIMPLE_NAME, "a", true, false);
+         counter.assertOnce();
+         container.removeAllContainerFilters();
+         counter.assertOnce();
+     }
+     // TODO other tests should check positions after removing filter etc,
+     // here concentrating on listeners
+     public void testItemSetChangeListenersFiltering() {
+         IndexedContainer container = new IndexedContainer();
+         ItemSetChangeCounter counter = new ItemSetChangeCounter();
+         container.addListener(counter);
+         counter.reset();
+         container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false);
+         // no real change, so no notification required
+         counter.assertNone();
+         String id1 = "com.example.Test1";
+         String id2 = "com.example.Test2";
+         String id3 = "com.example.Other";
+         // perform operations while filtering container
+         Item item;
+         initializeContainer(container);
+         counter.reset();
+         // passes filter
+         item = container.addItem(id1);
+         // no event if filtered out
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+         counter.assertOnce();
+         // passes filter but already in the container
+         item = container.addItem(id1);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         // passes filter after change
+         item = container.addItemAt(0, id1);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+         counter.assertOnce();
+         item = container.addItemAt(container.size(), id2);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
+         counter.assertOnce();
+         // passes filter but already in the container
+         item = container.addItemAt(0, id1);
+         counter.assertNone();
+         item = container.addItemAt(container.size(), id2);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         // passes filter
+         item = container.addItemAfter(null, id1);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+         counter.assertOnce();
+         item = container.addItemAfter(container.lastItemId(), id2);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2);
+         counter.assertOnce();
+         // passes filter but already in the container
+         item = container.addItemAfter(null, id1);
+         counter.assertNone();
+         item = container.addItemAfter(container.lastItemId(), id2);
+         counter.assertNone();
+         // does not pass filter
+         // TODO implement rest
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAfter(null, id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAfter(container.firstItemId(), id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAfter(container.lastItemId(), id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAt(0, id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAt(1, id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItemAt(container.size(), id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         // passes filter
+         initializeContainer(container);
+         counter.reset();
+         item = container.addItem(id1);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+         counter.assertOnce();
+         container.removeItem(id1);
+         counter.assertOnce();
+         // already removed
+         container.removeItem(id1);
+         counter.assertNone();
+         item = container.addItem(id3);
+         counter.assertNone();
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3);
+         counter.assertNone();
+         // not visible
+         container.removeItem(id3);
+         counter.assertNone();
+         // remove all
+         initializeContainer(container);
+         item = container.addItem(id1);
+         item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1);
+         counter.reset();
+         container.removeAllItems();
+         counter.assertOnce();
+         // no visible items
+         container.removeAllItems();
+         counter.assertNone();
+     }
++    public void testItemAdd_idSequence() {
++        IndexedContainer container = new IndexedContainer();
++        Object itemId;
++
++        itemId = container.addItem();
++        assertEquals(Integer.valueOf(1), itemId);
++
++        itemId = container.addItem();
++        assertEquals(Integer.valueOf(2), itemId);
++
++        itemId = container.addItemAfter(null);
++        assertEquals(Integer.valueOf(3), itemId);
++
++        itemId = container.addItemAt(2);
++        assertEquals(Integer.valueOf(4), itemId);
++    }
++
++    public void testItemAddRemove_idSequence() {
++        IndexedContainer container = new IndexedContainer();
++        Object itemId;
++
++        itemId = container.addItem();
++        assertEquals(Integer.valueOf(1), itemId);
++
++        container.removeItem(itemId);
++
++        itemId = container.addItem();
++        assertEquals(
++                "Id sequence should continue from the previous value even if an item is removed",
++                Integer.valueOf(2), itemId);
++    }
++
++    public void testItemAddedEvent() {
++        IndexedContainer container = new IndexedContainer();
++        ItemSetChangeListener addListener = createListenerMockFor(container);
++        addListener.containerItemSetChange(EasyMock.isA(ItemAddEvent.class));
++        EasyMock.replay(addListener);
++
++        container.addItem();
++
++        EasyMock.verify(addListener);
++    }
++
++    public void testItemAddedEvent_AddedItem() {
++        IndexedContainer container = new IndexedContainer();
++        ItemSetChangeListener addListener = createListenerMockFor(container);
++        Capture<ItemAddEvent> capturedEvent = captureAddEvent(addListener);
++        EasyMock.replay(addListener);
++
++        Object itemId = container.addItem();
++
++        assertEquals(itemId, capturedEvent.getValue().getFirstItemId());
++    }
++
++    public void testItemAddedEvent_IndexOfAddedItem() {
++        IndexedContainer container = new IndexedContainer();
++        ItemSetChangeListener addListener = createListenerMockFor(container);
++        container.addItem();
++        Capture<ItemAddEvent> capturedEvent = captureAddEvent(addListener);
++        EasyMock.replay(addListener);
++
++        Object itemId = container.addItemAt(1);
++
++        assertEquals(1, capturedEvent.getValue().getFirstIndex());
++    }
++
++    public void testItemRemovedEvent() {
++        IndexedContainer container = new IndexedContainer();
++        Object itemId = container.addItem();
++        ItemSetChangeListener removeListener = createListenerMockFor(container);
++        removeListener.containerItemSetChange(EasyMock
++                .isA(ItemRemoveEvent.class));
++        EasyMock.replay(removeListener);
++
++        container.removeItem(itemId);
++
++        EasyMock.verify(removeListener);
++    }
++
++    public void testItemRemovedEvent_RemovedItem() {
++        IndexedContainer container = new IndexedContainer();
++        Object itemId = container.addItem();
++        ItemSetChangeListener removeListener = createListenerMockFor(container);
++        Capture<ItemRemoveEvent> capturedEvent = captureRemoveEvent(removeListener);
++        EasyMock.replay(removeListener);
++
++        container.removeItem(itemId);
++
++        assertEquals(itemId, capturedEvent.getValue().getFirstItemId());
++    }
++
++    public void testItemRemovedEvent_indexOfRemovedItem() {
++        IndexedContainer container = new IndexedContainer();
++        container.addItem();
++        Object secondItemId = container.addItem();
++        ItemSetChangeListener removeListener = createListenerMockFor(container);
++        Capture<ItemRemoveEvent> capturedEvent = captureRemoveEvent(removeListener);
++        EasyMock.replay(removeListener);
++
++        container.removeItem(secondItemId);
++
++        assertEquals(1, capturedEvent.getValue().getFirstIndex());
++    }
++
++    public void testItemRemovedEvent_amountOfRemovedItems() {
++        IndexedContainer container = new IndexedContainer();
++        container.addItem();
++        container.addItem();
++        ItemSetChangeListener removeListener = createListenerMockFor(container);
++        Capture<ItemRemoveEvent> capturedEvent = captureRemoveEvent(removeListener);
++        EasyMock.replay(removeListener);
++
++        container.removeAllItems();
++
++        assertEquals(2, capturedEvent.getValue().getRemovedItemsCount());
++    }
++
++    private Capture<ItemAddEvent> captureAddEvent(
++            ItemSetChangeListener addListener) {
++        Capture<ItemAddEvent> capturedEvent = new Capture<ItemAddEvent>();
++        addListener.containerItemSetChange(EasyMock.capture(capturedEvent));
++        return capturedEvent;
++    }
++
++    private Capture<ItemRemoveEvent> captureRemoveEvent(
++            ItemSetChangeListener removeListener) {
++        Capture<ItemRemoveEvent> capturedEvent = new Capture<ItemRemoveEvent>();
++        removeListener.containerItemSetChange(EasyMock.capture(capturedEvent));
++        return capturedEvent;
++    }
++
++    private ItemSetChangeListener createListenerMockFor(
++            IndexedContainer container) {
++        ItemSetChangeListener listener = EasyMock
++                .createNiceMock(ItemSetChangeListener.class);
++        container.addItemSetChangeListener(listener);
++        return listener;
++    }
++
+     // Ticket 8028
+     public void testGetItemIdsRangeIndexOutOfBounds() {
+         IndexedContainer ic = new IndexedContainer();
+         try {
+             ic.getItemIds(-1, 10);
+             fail("Container returned items starting from index -1, something very wrong here!");
+         } catch (IndexOutOfBoundsException e) {
+             // This is expected...
+         } catch (Exception e) {
+             // Should not happen!
+             fail("Container threw unspecified exception when fetching a range of items and the range started from -1");
+         }
+     }
+     // Ticket 8028
+     public void testGetItemIdsRangeIndexOutOfBounds2() {
+         IndexedContainer ic = new IndexedContainer();
+         ic.addItem(new Object());
+         try {
+             ic.getItemIds(2, 1);
+             fail("Container returned items starting from index -1, something very wrong here!");
+         } catch (IndexOutOfBoundsException e) {
+             // This is expected...
+         } catch (Exception e) {
+             // Should not happen!
+             fail("Container threw unspecified exception when fetching a out of bounds range of items");
+         }
+     }
+     // Ticket 8028
+     public void testGetItemIdsRangeZeroRange() {
+         IndexedContainer ic = new IndexedContainer();
+         ic.addItem(new Object());
+         try {
+             List<Object> itemIds = ic.getItemIds(1, 0);
+             assertTrue(
+                     "Container returned actual values when asking for 0 items...",
+                     itemIds.isEmpty());
+         } catch (Exception e) {
+             // Should not happen!
+             fail("Container threw unspecified exception when fetching 0 items...");
+         }
+     }
+     // Ticket 8028
+     public void testGetItemIdsRangeNegativeRange() {
+         IndexedContainer ic = new IndexedContainer();
+         ic.addItem(new Object());
+         try {
+             List<Object> itemIds = ic.getItemIds(1, -1);
+             assertTrue(
+                     "Container returned actual values when asking for -1 items...",
+                     itemIds.isEmpty());
+         } catch (IllegalArgumentException e) {
+             // this is expected
+         } catch (Exception e) {
+             // Should not happen!
+             fail("Container threw unspecified exception when fetching -1 items...");
+         }
+     }
+     // Ticket 8028
+     public void testGetItemIdsRangeIndexOutOfBoundsDueToSizeChange() {
+         IndexedContainer ic = new IndexedContainer();
+         ic.addItem(new Object());
+         Assert.assertEquals(
+                 "Container returned too many items when the range was >> container size",
+                 1, ic.getItemIds(0, 10).size());
+     }
+     // Ticket 8028
+     public void testGetItemIdsRangeBaseCase() {
+         IndexedContainer ic = new IndexedContainer();
+         String object1 = new String("Obj1");
+         String object2 = new String("Obj2");
+         String object3 = new String("Obj3");
+         String object4 = new String("Obj4");
+         String object5 = new String("Obj5");
+         ic.addItem(object1);
+         ic.addItem(object2);
+         ic.addItem(object3);
+         ic.addItem(object4);
+         ic.addItem(object5);
+         try {
+             List<Object> itemIds = ic.getItemIds(1, 2);
+             assertTrue(itemIds.contains(object2));
+             assertTrue(itemIds.contains(object3));
+             assertEquals(2, itemIds.size());
+         } catch (Exception e) {
+             // Should not happen!
+             fail("Container threw  exception when fetching a range of items ");
+         }
+     }
+     // test getting non-existing property (#10445)
+     public void testNonExistingProperty() {
+         IndexedContainer ic = new IndexedContainer();
+         String object1 = new String("Obj1");
+         ic.addItem(object1);
+         assertNull(ic.getContainerProperty(object1, "xyz"));
+     }
+     // test getting null property id (#10445)
+     public void testNullPropertyId() {
+         IndexedContainer ic = new IndexedContainer();
+         String object1 = new String("Obj1");
+         ic.addItem(object1);
+         assertNull(ic.getContainerProperty(object1, null));
+     }
+ }