/* This file is part of Eternity II Editor. * * Eternity II Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Eternity II Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Eternity II Editor. If not, see <http://www.gnu.org/licenses/>. * * Eternity II Editor project is hosted on SourceForge: * http://sourceforge.net/projects/eternityii/ * and maintained by Yannick Kirschhoffer <alcibiade@alcibiade.org> */ package org.alcibiade.eternity.editor.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; public class QuadModelTest { private List<Pattern> patterns; private Pattern defaultPattern; @Before public void setUp() throws Exception { patterns = new ArrayList<Pattern>(Pattern.getAllPatterns()); defaultPattern = Pattern.getDefaultPattern(); patterns.remove(defaultPattern); } @After public void tearDown() throws Exception { patterns = null; defaultPattern = null; } @Test public void testEmptyQuad() { QuadModel quad = new QuadModel(); assertTrue(quad.isClear()); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); assertFalse(quad.isClear()); quad.setPattern(QuadModel.DIR_NORTH, defaultPattern); assertTrue(quad.isClear()); } @Test public void testLocking() { QuadModel quad = new QuadModel(); assertFalse(quad.isLocked()); quad.setLocked(true); assertTrue(quad.isLocked()); quad.setLocked(false); assertFalse(quad.isLocked()); } @Test public void testPatterns() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); assertEquals(patterns.get(1), quad.getPattern(QuadModel.DIR_NORTH)); assertEquals(patterns.get(2), quad.getPattern(QuadModel.DIR_EAST)); assertEquals(patterns.get(3), quad.getPattern(QuadModel.DIR_SOUTH)); assertEquals(patterns.get(4), quad.getPattern(QuadModel.DIR_WEST)); } @Test public void testCopy() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel copy = new QuadModel(); quad.copyTo(copy); assertTrue(quad.equals(copy)); copy.setPattern(QuadModel.DIR_SOUTH, patterns.get(5)); assertFalse(quad.equals(copy)); } @Test public void testClone() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel clone = quad.clone(); assertTrue(quad.equals(clone)); clone.setPattern(QuadModel.DIR_SOUTH, patterns.get(5)); assertFalse(quad.equals(clone)); } @Test public void testMatchDegrees() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel quadEmpty = new QuadModel(); assertEquals(0, quad.matchDegrees(quadEmpty)); QuadModel quadRot = quad.clone(); quadRot.rotateClockwise(2); assertEquals(4, quad.matchDegrees(quadRot)); QuadModel quad2 = new QuadModel(); quad2.setPattern(QuadModel.DIR_NORTH, patterns.get(5)); quad2.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad2.setPattern(QuadModel.DIR_SOUTH, patterns.get(6)); quad2.setPattern(QuadModel.DIR_WEST, patterns.get(4)); quad2.rotateCounterclockwise(); assertEquals(2, quad.matchDegrees(quad2)); } @Test public void testEquals() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel quadRot = quad.clone(); assertTrue(quad.equals(quadRot)); assertTrue(quad.equalsIgnoreRotation(quadRot)); quadRot.rotateClockwise(2); assertFalse(quad.equals(quadRot)); assertTrue(quad.equalsIgnoreRotation(quadRot)); } @Test public void testMatches() { QuadModel quad1 = new QuadModel(Pattern.PAT_00, Pattern.PAT_01, Pattern.PAT_02, Pattern.PAT_03); QuadModel quad2 = new QuadModel(Pattern.PAT_00, Pattern.PAT_01, Pattern.PAT_02, Pattern.PAT_03); assertTrue(quad1.matches(quad2)); assertTrue(quad2.matches(quad1)); quad2.setPattern(1, null); assertTrue(quad1.matches(quad2)); assertTrue(quad2.matches(quad1)); quad2.setPattern(2, Pattern.PAT_09); assertFalse(quad1.matches(quad2)); assertFalse(quad2.matches(quad1)); } @Test public void testEqualsIgnoreRotationInteger() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel quadRot = new QuadModel(); quadRot.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quadRot.setPattern(QuadModel.DIR_EAST, patterns.get(5)); quadRot.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quadRot.setPattern(QuadModel.DIR_WEST, patterns.get(6)); quadRot.rotateClockwise(); assertTrue(quad.equalsIgnoreRotation(quadRot, 0)); assertTrue(quad.equalsIgnoreRotation(quadRot, 1)); assertTrue(quad.equalsIgnoreRotation(quadRot, 2)); assertFalse(quad.equalsIgnoreRotation(quadRot, 3)); assertFalse(quad.equalsIgnoreRotation(quadRot, 4)); } @Test public void testFlipHorizontal() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel quadf = new QuadModel(); quadf.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quadf.setPattern(QuadModel.DIR_EAST, patterns.get(4)); quadf.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quadf.setPattern(QuadModel.DIR_WEST, patterns.get(2)); quad.flipHorizontal(); assertEquals(quadf, quad); } @Test public void testFlipVertical() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_NORTH, patterns.get(1)); quad.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quad.setPattern(QuadModel.DIR_SOUTH, patterns.get(3)); quad.setPattern(QuadModel.DIR_WEST, patterns.get(4)); QuadModel quadf = new QuadModel(); quadf.setPattern(QuadModel.DIR_NORTH, patterns.get(3)); quadf.setPattern(QuadModel.DIR_EAST, patterns.get(2)); quadf.setPattern(QuadModel.DIR_SOUTH, patterns.get(1)); quadf.setPattern(QuadModel.DIR_WEST, patterns.get(4)); quad.flipVertical(); assertEquals(quadf, quad); } @Test public void testReadOnly() { QuadModel quad = new QuadModel(); quad.setPattern(QuadModel.DIR_EAST, Pattern.getDefaultPattern()); quad.setReadOnly(true); try { quad.setPattern(QuadModel.DIR_EAST, Pattern.getDefaultPattern()); fail(); } catch (AssertionError e) { // Dp nothing } quad.setReadOnly(false); quad.setPattern(QuadModel.DIR_EAST, Pattern.getDefaultPattern()); } @Test public void testNullMatching() { QuadModel quad1 = new QuadModel(Pattern.PAT_01, Pattern.PAT_02, Pattern.PAT_03, Pattern.PAT_04); QuadModel quad2 = new QuadModel(Pattern.PAT_05, Pattern.PAT_06, Pattern.PAT_07, Pattern.PAT_08); assertEquals(0, quad1.matchDegrees(quad2)); assertEquals(0, quad2.matchDegrees(quad1)); quad1.setPattern(0, null); assertEquals(1, quad1.matchDegrees(quad2)); assertEquals(1, quad2.matchDegrees(quad1)); quad2.setPattern(0, null); assertEquals(2, quad1.matchDegrees(quad2)); assertEquals(2, quad2.matchDegrees(quad1)); quad1.setPattern(2, null); assertEquals(3, quad1.matchDegrees(quad2)); assertEquals(3, quad2.matchDegrees(quad1)); quad1.setPattern(3, null); assertEquals(4, quad1.matchDegrees(quad2)); assertEquals(4, quad2.matchDegrees(quad1)); } }