package org.eclipse.recommenders.completion.rcp.processable; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import static org.junit.Assume.assumeThat; import java.util.Collection; import java.util.LinkedList; 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.Lists; @RunWith(Parameterized.class) public class SimpleProposalProcessorTest<T> { private final T first; private final T second; private final boolean expected; public SimpleProposalProcessorTest(String description, T first, T second, boolean equals) { this.first = first; this.second = second; this.expected = equals; } @Parameters(name = "{index}: {0} => equal: {3}") public static Collection<Object[]> scenarios() { LinkedList<Object[]> scenarios = Lists.newLinkedList(); scenarios.add(scenario("Same increment, no label", new SimpleProposalProcessor(1), new SimpleProposalProcessor( 1), true)); scenarios.add(scenario("Same increment, same label", new SimpleProposalProcessor(1, "one"), new SimpleProposalProcessor(1, "one"), true)); scenarios.add(scenario("Same increment, different label", new SimpleProposalProcessor(1, "1"), new SimpleProposalProcessor(1, "one"), false)); scenarios.add(scenario("Same increment, just one label", new SimpleProposalProcessor(1), new SimpleProposalProcessor(1, "one"), false)); scenarios.add(scenario("Different increment, no label", new SimpleProposalProcessor(1), new SimpleProposalProcessor(2), false)); scenarios.add(scenario("Different increment, same label", new SimpleProposalProcessor(1, "one"), new SimpleProposalProcessor(2, "one"), false)); scenarios.add(scenario("Different increment, different label", new SimpleProposalProcessor(1, "one"), new SimpleProposalProcessor(2, "two"), false)); scenarios.add(scenario("Different increment, just one label", new SimpleProposalProcessor(1), new SimpleProposalProcessor(2, "two"), false)); return scenarios; } @Test public void testEquals() { assertThat(first.equals(second), is(expected)); assertThat(second.equals(first), is(expected)); } @Test public void testHashCode() { assumeThat(first, is(equalTo(second))); assertThat(first.hashCode(), is(equalTo(second.hashCode()))); } private static <T> Object[] scenario(String description, T first, T second, boolean equals) { return new Object[] { description, first, second, equals }; } }