@@ -0,0 +1,1614 @@
+package com.vaadin.tests.components.table;%0A%0Aimport com.vaadin.data.Property;%0Aimport com.vaadin.tests.components.TestBase;%0Aimport com.vaadin.ui.Button;%0Aimport com.vaadin.ui.CssLayout;%0Aimport com.vaadin.ui.Label;%0Aimport com.vaadin.ui.Table;%0Aimport com.vaadin.ui.Button.ClickEvent;%0A%0Apublic class TableCacheBuildEfficiency extends TestBase %7B%0A%0A    @Override%0A    protected String getDescription() %7B%0A        return %22On each add, row property values should be queried only once (one log row for first addition).%22;%0A    %7D%0A%0A    @Override%0A    protected Integer getTicketNumber() %7B%0A        return 4299;%0A    %7D%0A%0A    @Override%0A    protected void setup() %7B%0A%0A        final CssLayout log = new CssLayout();%0A        log.setWidth(%22100%25%22);%0A%0A        final Table table = new Table() %7B%0A            @Override%0A            public Property getContainerProperty(Object itemId,%0A                    Object propertyId) %7B%0A                log(%22Fetched container property %5C%22%22 + propertyId%0A                        + %22%5C%22 for item %5C%22%22 + itemId + %22%5C%22%22);%0A                return super.getContainerProperty(itemId, propertyId);%0A            %7D%0A%0A            private void log(String string) %7B%0A                log.addComponent(new Label(string));%0A%0A            %7D%0A        %7D;%0A%0A        table.addContainerProperty(%22foo%22, String.class, %22bar%22);%0A%0A        Button b = new Button(%22Click to add row%22, new Button.ClickListener() %7B%0A%0A            public void buttonClick(ClickEvent event) %7B%0A                table.addItem();%0A%0A            %7D%0A        %7D);%0A%0A        getLayout().addComponent(table);%0A        getLayout().addComponent(b);%0A        getLayout().addComponent(log);%0A%0A    %7D%0A%7D%0A

test case for #4299