001/* 002 * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games. 003 * Copyright (C) 2000-2011 The Gridarta Developers. 004 * 005 * This program is free software; you can redistribute it and/or modify 006 * it under the terms of the GNU General Public License as published by 007 * the Free Software Foundation; either version 2 of the License, or 008 * (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU General Public License for more details. 014 * 015 * You should have received a copy of the GNU General Public License along 016 * with this program; if not, write to the Free Software Foundation, Inc., 017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 018 */ 019 020package net.sf.gridarta.model.mapmodel; 021 022import java.awt.Point; 023import java.util.Iterator; 024import net.sf.gridarta.model.archetype.TestArchetype; 025import net.sf.gridarta.model.gameobject.TestGameObject; 026import net.sf.gridarta.model.maparchobject.TestMapArchObject; 027import org.junit.Assert; 028import org.junit.Test; 029 030/** 031 * Regression tests for {@link MapSquareIterator}. 032 * @author Andreas Kirschbaum 033 */ 034public class MapSquareIteratorTest { 035 036 /** 037 * Checks that the forward iterator returns all map squares. 038 */ 039 @Test 040 public void testIteratorForward() { 041 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 042 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 043 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, null, +1, false); 044 Assert.assertTrue(it.hasNext()); 045 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 046 Assert.assertTrue(it.hasNext()); 047 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 048 Assert.assertTrue(it.hasNext()); 049 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 050 Assert.assertTrue(it.hasNext()); 051 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 052 Assert.assertTrue(it.hasNext()); 053 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 054 Assert.assertTrue(it.hasNext()); 055 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 056 Assert.assertFalse(it.hasNext()); 057 } 058 059 /** 060 * Checks that the backward iterator returns all map squares. 061 */ 062 @Test 063 public void testIteratorBackward() { 064 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 065 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 066 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, null, -1, false); 067 Assert.assertTrue(it.hasNext()); 068 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 069 Assert.assertTrue(it.hasNext()); 070 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 071 Assert.assertTrue(it.hasNext()); 072 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 073 Assert.assertTrue(it.hasNext()); 074 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 075 Assert.assertTrue(it.hasNext()); 076 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 077 Assert.assertTrue(it.hasNext()); 078 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 079 Assert.assertFalse(it.hasNext()); 080 } 081 082 /** 083 * Checks that the forward iterator returns all map squares. 084 */ 085 @Test 086 public void testIteratorForwardStart() { 087 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 088 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 089 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, new Point(0, 1), +1, false); 090 Assert.assertTrue(it.hasNext()); 091 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 092 Assert.assertTrue(it.hasNext()); 093 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 094 Assert.assertTrue(it.hasNext()); 095 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 096 Assert.assertTrue(it.hasNext()); 097 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 098 Assert.assertTrue(it.hasNext()); 099 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 100 Assert.assertTrue(it.hasNext()); 101 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 102 Assert.assertFalse(it.hasNext()); 103 } 104 105 /** 106 * Checks that the backward iterator returns all map squares. 107 */ 108 @Test 109 public void testIteratorBackwardStart() { 110 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 111 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 112 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, new Point(0, 1), -1, false); 113 Assert.assertTrue(it.hasNext()); 114 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 115 Assert.assertTrue(it.hasNext()); 116 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 117 Assert.assertTrue(it.hasNext()); 118 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 119 Assert.assertTrue(it.hasNext()); 120 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 121 Assert.assertTrue(it.hasNext()); 122 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 123 Assert.assertTrue(it.hasNext()); 124 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 125 Assert.assertFalse(it.hasNext()); 126 } 127 128 /** 129 * Checks that the forward iterator returns all map squares when skip is 130 * enabled. 131 */ 132 @Test 133 public void testIteratorForwardStartSkip() { 134 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 135 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 136 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, new Point(0, 1), +1, true); 137 Assert.assertTrue(it.hasNext()); 138 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 139 Assert.assertTrue(it.hasNext()); 140 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 141 Assert.assertTrue(it.hasNext()); 142 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 143 Assert.assertTrue(it.hasNext()); 144 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 145 Assert.assertTrue(it.hasNext()); 146 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 147 Assert.assertTrue(it.hasNext()); 148 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 149 Assert.assertFalse(it.hasNext()); 150 } 151 152 /** 153 * Checks that the backward iterator returns all map squares when skip is 154 * enabled. 155 */ 156 @Test 157 public void testIteratorBackwardStartSkip() { 158 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 159 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 160 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, new Point(0, 1), -1, true); 161 Assert.assertTrue(it.hasNext()); 162 Assert.assertSame(mapModel.getMapSquare(new Point(2, 0)), it.next()); 163 Assert.assertTrue(it.hasNext()); 164 Assert.assertSame(mapModel.getMapSquare(new Point(1, 0)), it.next()); 165 Assert.assertTrue(it.hasNext()); 166 Assert.assertSame(mapModel.getMapSquare(new Point(0, 0)), it.next()); 167 Assert.assertTrue(it.hasNext()); 168 Assert.assertSame(mapModel.getMapSquare(new Point(2, 1)), it.next()); 169 Assert.assertTrue(it.hasNext()); 170 Assert.assertSame(mapModel.getMapSquare(new Point(1, 1)), it.next()); 171 Assert.assertTrue(it.hasNext()); 172 Assert.assertSame(mapModel.getMapSquare(new Point(0, 1)), it.next()); 173 Assert.assertFalse(it.hasNext()); 174 } 175 176 /** 177 * Checks that invalid directions are rejected. 178 */ 179 @Test(expected = IllegalArgumentException.class) 180 public void testIteratorDirection0() { 181 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 182 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 183 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, null, 0, false); 184 } 185 186 /** 187 * Checks that invalid directions are rejected. 188 */ 189 @Test(expected = IllegalArgumentException.class) 190 public void testIteratorDirection2() { 191 final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false); 192 final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2); 193 final Iterator<MapSquare<TestGameObject, TestMapArchObject, TestArchetype>> it = new MapSquareIterator<TestGameObject, TestMapArchObject, TestArchetype>(mapModel, null, 2, false); 194 } 195 196}