Gridarta Editor
AbstractFilesResourcesReaderTest.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.model.resource;
21 
22 import java.io.BufferedWriter;
23 import java.io.File;
24 import java.io.FileOutputStream;
25 import java.io.IOException;
26 import java.io.OutputStream;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
29 import java.nio.charset.StandardCharsets;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.Enumeration;
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.ResourceBundle;
37 import java.util.regex.Pattern;
60 import net.sf.japi.swing.action.ActionBuilder;
61 import net.sf.japi.swing.action.ActionBuilderFactory;
62 import net.sf.japi.swing.action.DefaultActionBuilder;
63 import net.sf.japi.util.IteratorEnumeration;
64 import org.jetbrains.annotations.NotNull;
65 import org.jetbrains.annotations.Nullable;
66 import org.junit.Assert;
67 import org.junit.Test;
68 
74 
78  @NotNull
79  private static final Pattern PATTERN_DEFAULT_KEY = Pattern.compile("fileDialog\\.filter\\..*");
80 
85  @Test
86  public void testAnimationPaths() throws IOException {
87  final File tmpDirectory = File.createTempFile("gridarta", null);
88  try {
89  Assert.assertTrue(tmpDirectory.delete());
90  Assert.assertTrue(tmpDirectory.mkdir());
91  final File archDirectory = new File(tmpDirectory, "archetypes");
92  Assert.assertTrue(archDirectory.mkdir());
93  final File collectedDirectory = new File(tmpDirectory, "collected");
94  Assert.assertTrue(collectedDirectory.mkdir());
95  createAnimationFile(archDirectory, "anim1");
96  createAnimationFile(new File(archDirectory, "p"), "anim2");
97  createAnimationFile(new File(new File(new File(archDirectory, "p"), "q"), "r"), "anim3");
98 
99  final ActionBuilder actionBuilder = new DefaultActionBuilder("net.sf.gridarta");
100  ActionBuilderFactory.getInstance().putActionBuilder("net.sf.gridarta", actionBuilder);
101  final ResourceBundle resourceBundle = new ResourceBundle() {
102 
106  @NotNull
107  private final Map<String, Object> objects = new HashMap<>();
108 
109  @Nullable
110  @Override
111  protected Object handleGetObject(@NotNull final String key) {
112  final Object existingObject = objects.get(key);
113  if (existingObject != null) {
114  return existingObject;
115  }
116 
117  final Object object;
118  if (PATTERN_DEFAULT_KEY.matcher(key).matches()) {
119  object = "Description";
120  } else {
121  return null;
122  }
123  objects.put(key, object);
124  return object;
125  }
126 
127  @NotNull
128  @Override
129  public Enumeration<String> getKeys() {
130  return new IteratorEnumeration<>(Collections.unmodifiableSet(objects.keySet()).iterator());
131  }
132 
133  };
134  actionBuilder.addBundle(resourceBundle);
135 
136  final AnimationObjects animationObjects = readAnimations(archDirectory, collectedDirectory);
137 
138  Assert.assertEquals(3, animationObjects.size());
139  final AnimationObject anim1 = animationObjects.get("anim1");
140  final AnimationObject anim2 = animationObjects.get("anim2");
141  final AnimationObject anim3 = animationObjects.get("anim3");
142  Assert.assertNotNull(anim1);
143  Assert.assertNotNull(anim2);
144  Assert.assertNotNull(anim3);
145  Assert.assertEquals("anim1", anim1.getAnimName());
146  Assert.assertEquals("anim2", anim2.getAnimName());
147  Assert.assertEquals("anim3", anim3.getAnimName());
148  Assert.assertEquals("/anim1", anim1.getPath());
149  Assert.assertEquals("/p/anim2", anim2.getPath());
150  Assert.assertEquals("/p/q/r/anim3", anim3.getPath());
151  } finally {
152  delete(tmpDirectory);
153  }
154  }
155 
162  @NotNull
163  private static AnimationObjects readAnimations(@NotNull final File archDirectory, @NotNull final File collectedDirectory) {
164  final ArchFaceProvider archFaceProvider = new ArchFaceProvider();
165  final FaceObjects faceObjects = new TestFaceObjects();
166  final ResourceIcons resourceIcons = new ResourceIcons();
167  final FaceObjectProviders faceObjectProviders = new FaceObjectProviders(1, faceObjects, resourceIcons);
168  final AnimationObjects animationObjects = new TestAnimationObjects();
169  final ArchetypeFactory<TestGameObject, TestMapArchObject, TestArchetype> archetypeFactory = new TestArchetypeFactory(faceObjectProviders, animationObjects);
170  final ArchetypeSet<TestGameObject, TestMapArchObject, TestArchetype> archetypeSet = new DefaultArchetypeSet<>(archetypeFactory, null);
171  final GameObjectFactory<TestGameObject, TestMapArchObject, TestArchetype> gameObjectFactory = new TestGameObjectFactory(faceObjectProviders, animationObjects);
172  final TestArchetypeBuilder archetypeBuilder = new TestArchetypeBuilder(gameObjectFactory);
173  final AbstractArchetypeParser<TestGameObject, TestMapArchObject, TestArchetype, ?> archetypeParser = new TestArchetypeParser(archetypeBuilder, animationObjects, archetypeSet);
174  final AbstractResourcesReader<TestGameObject> filesResourcesReader = new TestFilesResourcesReader(archDirectory, archetypeSet, archetypeParser, archFaceProvider, collectedDirectory, null, animationObjects, faceObjects);
175  final List<TestGameObject> invObjects = new ArrayList<>();
176  final ErrorView errorView = new TestErrorView();
177  filesResourcesReader.read(errorView, invObjects);
178  return animationObjects;
179  }
180 
188  private static void createAnimationFile(@NotNull final File directory, @NotNull final String animName) throws IOException {
189  if (!directory.isDirectory()) {
190  Assert.assertTrue(directory.mkdirs());
191  }
192 
193  final File file = new File(directory, animName + ".anim");
194  Assert.assertFalse(file.exists());
195  try (OutputStream fileOutputStream = new FileOutputStream(file)) {
196  try (Writer outputStreamWriter = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)) {
197  try (Writer bufferedWriter = new BufferedWriter(outputStreamWriter)) {
198  bufferedWriter.append("anim ").append(animName).append("\n");
199  bufferedWriter.append("face1\n");
200  bufferedWriter.append("face2\n");
201  bufferedWriter.append("mina\n");
202  }
203  }
204  }
205  }
206 
211  private static void delete(@NotNull final File file) {
212  //noinspection ResultOfMethodCallIgnored
213  file.delete();
214 
215  if (file.isDirectory()) {
216  final File[] files = file.listFiles();
217  if (files != null) {
218  for (final File subFile : files) {
219  delete(subFile);
220  }
221  }
222  }
223 
224  if (file.exists()) {
225  Assert.assertTrue(file.delete());
226  }
227  }
228 
229 }
net.sf.gridarta.model.archetype.TestArchetype
An Archetype implementation for testing purposes.
Definition: TestArchetype.java:30
net.sf.gridarta.model.gameobject.GameObjectFactory
Abstract factory for creating GameObject instances.
Definition: GameObjectFactory.java:31
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.model.resource.AbstractFilesResourcesReaderTest.readAnimations
static AnimationObjects readAnimations(@NotNull final File archDirectory, @NotNull final File collectedDirectory)
Reads resources from individual files.
Definition: AbstractFilesResourcesReaderTest.java:163
net.sf.gridarta.model.io.AbstractArchetypeParser
Abstract base implementation of ArchetypeParser.
Definition: AbstractArchetypeParser.java:47
files
Standard Edition Runtime Environment README Import and export control rules on cryptographic software vary from country to country The Java Cryptography Java provides two different sets of cryptographic policy files
Definition: README.txt:26
net.sf.gridarta.model.anim.AnimationObjects
AnimationObjects is a container for AnimationObjects.
Definition: AnimationObjects.java:30
net.sf.gridarta.model.face.ArchFaceProvider
Implementation of FaceProvider which reads images from the arch directory.
Definition: ArchFaceProvider.java:38
net.sf.gridarta.model.gameobject.TestGameObject
A GameObject implementation for testing purposes.
Definition: TestGameObject.java:34
net.sf.gridarta.model.resource.AbstractResourcesReader
Abstract base class for archetype set loader classes.
Definition: AbstractResourcesReader.java:60
net.sf.gridarta.model.resource.AbstractFilesResourcesReaderTest.testAnimationPaths
void testAnimationPaths()
checks that animations read from .anim files have correct path names.
Definition: AbstractFilesResourcesReaderTest.java:86
directory
This document describes some hints and requirements for general development on the CrossfireEditor If you plan to make changes to the editor code or setup please read the following and keep it in derived from a basic editor application called Gridder by Pasi Ker�nen so please communicate with best through the cf devel mailing before considering any fundamental changes About code DO NOT USE TABS No matter what Java development platform you are please configure insert indent Tabs are displayed totally different in every editor and there are millions of different editors out there The insertion of tabs in the source code is messing up the syntax formatting in a way that is UNREPAIRABLE Apart from please keep code indentation accurate This is not just good it helps to keep code readable and in that way dramatically decreases the chance for overlooked bugs Everyone is welcomed to correct indentation errors wherever they are spotted Before you start to do this please double check that your editor is really configured to insert spaces Line feeds may be checked in either in windows or in unix linux style All reasonable text and java editors can deal with both linefeed formats Converting line feeds is but in this case please make sure that only linefeed characters are changed and nothing else is affected Due to the platform independent nature of the editor has the potential to run on almost any given operating system the build process differs greatly between systems as well as java environments In the several people have attempted to add build scripts along with structural changes to optimize the setup on one particular system environment which has led to conflict Please do *not *attempt to change the structure or any directories for the mere purpose of improving a build process or performance in a java environment Build scripts may be placed in the root directory
Definition: Developer_README.txt:45
net.sf
net.sf.gridarta.model.data.NamedObjects.get
E get(@NotNull String objectName)
Gets a AbstractNamedObject.
net.sf.gridarta.model.data.NamedObjects.size
int size()
Get the number of objects.
net.sf.gridarta.model.errorview.ErrorView
Interface for classes displaying error messages.
Definition: ErrorView.java:28
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.face.FaceObjectProviders
Provider for faces of GameObjects and Archetypes.
Definition: FaceObjectProviders.java:46
net.sf.gridarta.model.anim.TestAnimationObjects
An AnimationObjects for regression tests.
Definition: TestAnimationObjects.java:26
net.sf.gridarta.model.anim.AnimationObject.getAnimName
String getAnimName()
Get the animName, which is the name of the animation as usable by the "animations" attribute.
net.sf.gridarta.model.resource.AbstractFilesResourcesReaderTest.PATTERN_DEFAULT_KEY
static final Pattern PATTERN_DEFAULT_KEY
The Pattern for matching validator keys for default values.
Definition: AbstractFilesResourcesReaderTest.java:79
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.model.errorview
Definition: ErrorView.java:20
net.sf.gridarta.model.gameobject.TestGameObjectFactory
A GameObjectFactory for regression tests.
Definition: TestGameObjectFactory.java:34
net.sf.gridarta.model.archetype.ArchetypeFactory
A factory for creating Archetype instances.
Definition: ArchetypeFactory.java:30
net.sf.gridarta.model.resource.AbstractFilesResourcesReaderTest.createAnimationFile
static void createAnimationFile(@NotNull final File directory, @NotNull final String animName)
Creates a new .anim file.
Definition: AbstractFilesResourcesReaderTest.java:188
net.sf.gridarta.model.resource.TestFilesResourcesReader
An AbstractFilesResourcesReader for regression tests.
Definition: TestFilesResourcesReader.java:39
net.sf.gridarta.model.face.FaceObjects
FaceObjects is a container for FaceObjects.
Definition: FaceObjects.java:31
net.sf.gridarta.model.errorview.TestErrorView
An ErrorView suitable for unit tests.
Definition: TestErrorView.java:30
net.sf.gridarta.model.resource.AbstractFilesResourcesReaderTest
Regression tests for AbstractFilesResourcesReader.
Definition: AbstractFilesResourcesReaderTest.java:73
net.sf.gridarta.model.archetypeset.ArchetypeSet
Interface that captures similarities between different ArchetypeSet implementations.
Definition: ArchetypeSet.java:37
net.sf.gridarta.model.resource.AbstractResourcesReader.read
abstract FaceProvider read(@NotNull ErrorView errorView, @NotNull List< G > invObjects)
Reads the resources.
net.sf.gridarta.model.archetype.TestArchetypeBuilder
An AbstractArchetypeBuilder for regression tests.
Definition: TestArchetypeBuilder.java:31
net.sf.gridarta.model.archetype.TestArchetypeFactory
An ArchetypeFactory implementation for testing purposes.
Definition: TestArchetypeFactory.java:32
net.sf.gridarta.model.io
Reading and writing of maps, handling of paths.
Definition: AbstractAnimationObjectsReader.java:20
net.sf.gridarta.model
net.sf.gridarta.model.io.TestArchetypeParser
An ArchetypeParser for regression tests.
Definition: TestArchetypeParser.java:38
net.sf.gridarta.model.face
The face is the appearance of an object.
Definition: AbstractFaceObjects.java:20
net.sf.gridarta.model.data.NamedObject.getPath
String getPath()
Get the path of this AbstractNamedObject.
net.sf.gridarta.model.anim
Gridarta can handle frame information of animations and allow the selection of an animation using a t...
Definition: AbstractAnimationObjects.java:20
net.sf.gridarta.model.maparchobject.TestMapArchObject
A MapArchObject implementation for testing purposes.
Definition: TestMapArchObject.java:28
net.sf.gridarta.model.anim.AnimationObject
An AnimationObject reflects the animation ("@code anim\n @endcode " ...
Definition: AnimationObject.java:30
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.utils.ResourceIcons
Creates ImageIcon instances from resources.
Definition: ResourceIcons.java:46
net.sf.gridarta.model.archetypeset
Definition: ArchetypeSet.java:20
net.sf.gridarta.model.archetypeset.DefaultArchetypeSet
Base implementation of ArchetypeSet.
Definition: DefaultArchetypeSet.java:44
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.model.face.TestFaceObjects
A FaceObjects for regression tests.
Definition: TestFaceObjects.java:30