package uk.org.squirm3.model;
import java.util.ArrayList;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import static org.fest.assertions.Assertions.assertThat;
import static uk.org.squirm3.model.Atoms.createAtom;
import static uk.org.squirm3.model.type.def.BasicType.A;
import static uk.org.squirm3.model.type.def.BasicType.B;
import static uk.org.squirm3.model.type.def.WildcardType.X;
import static uk.org.squirm3.model.type.def.WildcardType.Y;
@RunWith(Parameterized.class)
public class ReactionTryOnTest {
@Parameters
public static Collection<Object[]> data() {
final Collection<Object[]> parameters = new ArrayList<Object[]>();
parameters.add(new Object[]{
new Reaction(A, 1, false, B, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), true, 2, 3, true});
parameters.add(new Object[]{
new Reaction(A, 1, false, A, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(B, 1, false, B, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(A, 1, false, B, 1, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(A, 2, false, B, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{new Reaction(A, 1, true, B, 2, 2, true, 3),
createAtom(A, 1), createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(X, 1, false, X, 2, 2, true, 3), createAtom(A, 1),
createAtom(A, 2), true, 2, 3, true});
parameters.add(new Object[]{
new Reaction(X, 1, false, X, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(Y, 1, false, Y, 2, 2, true, 3), createAtom(A, 1),
createAtom(A, 2), true, 2, 3, true});
parameters.add(new Object[]{
new Reaction(Y, 1, false, Y, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), false, 1, 2, false});
parameters.add(new Object[]{
new Reaction(X, 1, false, Y, 2, 2, true, 3), createAtom(A, 1),
createAtom(A, 2), true, 2, 3, true});
parameters.add(new Object[]{
new Reaction(X, 1, false, Y, 2, 2, true, 3), createAtom(A, 1),
createAtom(B, 2), true, 2, 3, true});
return parameters;
}
private final Reaction reaction;
private final Atom a;
private final Atom b;
private final boolean success;
private final int aState, bState;
private final boolean bonded;
public ReactionTryOnTest(final Reaction reaction, final Atom a,
final Atom b, final boolean success, final int aState,
final int bState, final boolean bonded) {
this.reaction = reaction;
this.a = a;
this.b = b;
this.success = success;
this.aState = aState;
this.bState = bState;
this.bonded = bonded;
}
@Test
public void testTryOn() {
assertThat(reaction.tryOn(a, b)).isEqualTo(success);
assertThat(a.getState()).isEqualTo(aState);
assertThat(b.getState()).isEqualTo(bState);
assertThat(a.hasBondWith(b)).isEqualTo(bonded);
assertThat(b.hasBondWith(a)).isEqualTo(bonded);
}
}