import org.junit.Test; import org.junit.Before; import static org.junit.Assert.*; public abstract class StringAccumulatorTest { private static final String ONE_HUNDRED_ONES = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; private static final String ONE_HUNDRED_AND_ONE_ONES = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; private static final String TEN_OCTAVES = "01234567012345670123456701234567012345670123456701234567012345670123456701234567"; private StringAccumulator acc; @Before public void createAccumulator() { acc = newStringAccumulator(10); } protected abstract StringAccumulator newStringAccumulator(int bufSize); @Test public void appendOneHundredSingleChars() { for (int i = 0; i < 100; ++i) { acc.accumulate("1"); } assertEquals(ONE_HUNDRED_ONES, acc.toString()); } @Test public void appendOneHundredAndOneSingleChars() { for (int i = 0; i < 101; ++i) { acc.accumulate("1"); } assertEquals(ONE_HUNDRED_AND_ONE_ONES, acc.toString()); } @Test public void appendTenDecades() { for (int i = 0; i < 10; ++i) { acc.accumulate("01234567"); } assertEquals(TEN_OCTAVES, acc.toString()); } @Test public void appendTenDecadesInPairs() { for (int i = 0; i < 5; ++i) { acc.accumulate("0123456701234567"); } assertEquals(TEN_OCTAVES, acc.toString()); } @Test public void appendTenDecadesInTriples() { for (int i = 0; i < 3; ++i) { acc.accumulate("012345670123456701234567"); } acc.accumulate("01234567"); assertEquals(TEN_OCTAVES, acc.toString()); } }