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}