package ru.yandex.qatools.elementscompare.tests; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import ru.yandex.qatools.ashot.comparison.DiffMarkupPolicy; import ru.yandex.qatools.ashot.comparison.ImageMarkupPolicy; import ru.yandex.qatools.ashot.comparison.PointsMarkupPolicy; import java.awt.*; import java.util.Collection; import java.util.HashSet; import java.util.Set; import static java.util.Arrays.asList; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static ru.yandex.qatools.elementscompare.tests.DifferTest.loadImage; /** * @author Rovniakov Viacheslav rovner@yandex-team.ru */ @RunWith(Parameterized.class) public class DiffMarkupPolicyTest { @Parameterized.Parameters public static Collection<Object[]> data() { return asList(new Object[][] { {PointsMarkupPolicy.class}, {ImageMarkupPolicy.class} }); } @Parameterized.Parameter public Class<? extends DiffMarkupPolicy> diffStorageClass; private DiffMarkupPolicy diffMarkupPolicyA; private DiffMarkupPolicy diffMarkupPolicyB; @Before public void setUp() throws IllegalAccessException, InstantiationException { diffMarkupPolicyA = diffStorageClass.newInstance(); diffMarkupPolicyB = diffStorageClass.newInstance(); diffMarkupPolicyA.setDiffImage(loadImage("img/A_s.png")); diffMarkupPolicyB.setDiffImage(loadImage("img/B_s.png")); } @Test public void testEquality() throws Exception { addDiffPoints(getDiffPointsA(), diffMarkupPolicyA, 1, 2); addDiffPoints(getDiffPointsA(), diffMarkupPolicyB, 0, 3); assertThat(diffMarkupPolicyA.equals(diffMarkupPolicyB), is(true)); assertThat(diffMarkupPolicyA.hashCode() == diffMarkupPolicyB.hashCode(), is(true)); } @Test public void testNotEquality() throws Exception { addDiffPoints(getDiffPointsA(), diffMarkupPolicyA, 0, 0); addDiffPoints(getDiffPointsB(), diffMarkupPolicyB, 0, 0); assertThat(diffMarkupPolicyA.equals(diffMarkupPolicyB), is(false)); assertThat(diffMarkupPolicyA.hashCode() == diffMarkupPolicyB.hashCode(), is(false)); } @Test public void testNotEqualityByNumber() throws Exception { addDiffPoints(getDiffPointsA(), diffMarkupPolicyA, 0, 0); addDiffPoints(getDiffPointsB(), diffMarkupPolicyA, 0, 0); diffMarkupPolicyB.addDiffPoint(0, 0); assertThat(diffMarkupPolicyA.equals(diffMarkupPolicyB), is(false)); assertThat(diffMarkupPolicyA.hashCode() == diffMarkupPolicyB.hashCode(), is(false)); } private Set<Point> getDiffPointsA() { return new HashSet<Point>() {{ add(new Point(3, 4)); add(new Point(3, 5)); add(new Point(3, 6)); add(new Point(4, 4)); add(new Point(4, 5)); add(new Point(4, 6)); }}; } private Set<Point> getDiffPointsB() { return new HashSet<Point>() {{ add(new Point(3, 4)); add(new Point(3, 5)); add(new Point(3, 6)); add(new Point(4, 4)); add(new Point(4, 5)); add(new Point(4, 7)); }}; } private void addDiffPoints(Set<Point> points, DiffMarkupPolicy diffMarkupPolicy, int xShift, int yShift) { for (Point point : points) { diffMarkupPolicy.addDiffPoint((int) point.getX() - xShift, (int) point.getY() - yShift); } } }