package com.vaadin.tests.server.componentcontainer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
public abstract class AbstractIndexedLayoutTestBase {
private Layout layout;
protected abstract Layout createLayout();
@Before
public void setUp() {
layout = createLayout();
}
public Layout getLayout() {
return layout;
}
@Test
public void testAddRemoveComponent() {
Label c1 = new Label();
Label c2 = new Label();
layout.addComponent(c1);
assertEquals(c1, getComponent(0));
assertEquals(1, getComponentCount());
layout.addComponent(c2);
assertEquals(c1, getComponent(0));
assertEquals(c2, getComponent(1));
assertEquals(2, getComponentCount());
layout.removeComponent(c1);
assertEquals(c2, getComponent(0));
assertEquals(1, getComponentCount());
layout.removeComponent(c2);
assertEquals(0, getComponentCount());
}
protected abstract int getComponentCount();
protected abstract Component getComponent(int index);
protected abstract int getComponentIndex(Component c);
@Test
public void testGetComponentIndex() {
Label c1 = new Label();
Label c2 = new Label();
layout.addComponent(c1);
assertEquals(0, getComponentIndex(c1));
layout.addComponent(c2);
assertEquals(0, getComponentIndex(c1));
assertEquals(1, getComponentIndex(c2));
layout.removeComponent(c1);
assertEquals(0, getComponentIndex(c2));
layout.removeComponent(c2);
assertEquals(-1, getComponentIndex(c2));
assertEquals(-1, getComponentIndex(c1));
}
@Test
public void testGetComponent() {
Label c1 = new Label();
Label c2 = new Label();
layout.addComponent(c1);
assertEquals(c1, getComponent(0));
layout.addComponent(c2);
assertEquals(c1, getComponent(0));
assertEquals(c2, getComponent(1));
layout.removeComponent(c1);
assertEquals(c2, getComponent(0));
layout.removeComponent(c2);
try {
getComponent(0);
fail();
} catch (IndexOutOfBoundsException e) {
// Expected
}
}
}