package uk.org.squirm3.model.type; import java.util.ArrayList; import java.util.Collection; import java.util.Set; import org.fest.assertions.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.google.common.collect.Sets; import static org.fest.assertions.Assertions.assertThat; @RunWith(Parameterized.class) public class TypesTest { private final Collection<? extends ChemicalType> chemicalTypes; private final int expectedSize; final Set<Character> characterIdentifiers = Sets.newHashSet(); public TypesTest(final Collection<? extends ChemicalType> chemicalTypes, final int expectedSize) { this.chemicalTypes = chemicalTypes; this.expectedSize = expectedSize; for (final ChemicalType chemicalType : chemicalTypes) { characterIdentifiers.add(chemicalType.getCharacterIdentifier()); } } @Parameters public static Collection<Object[]> getParameters() { final Collection<Object[]> parameters = new ArrayList<Object[]>(); parameters.add(new Object[]{Types.getAtomTypes(), 7}); parameters.add(new Object[]{Types.getReactionTypes(), 8}); parameters.add(new Object[]{Types.getBuilderTypes(), 14}); parameters.add(new Object[]{Types.getChemicalTypes(), 16}); return parameters; } @Test public void shouldHaveNoCharacterIdentifierCollision() { assertThat(characterIdentifiers).hasSize(chemicalTypes.size()); } @Test public void shouldNotBeChangedRecklessly() { Assertions.assertThat(chemicalTypes).hasSize(expectedSize); } }