Gridarta Editor
MapMenuPreferencesTest.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.gui.mapmenu;
21 
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ResourceBundle;
25 import java.util.prefs.BackingStoreException;
26 import java.util.prefs.Preferences;
27 import javax.swing.tree.DefaultMutableTreeNode;
28 import javax.swing.tree.TreeNode;
29 import net.sf.gridarta.MainControl;
35 import net.sf.japi.swing.action.ActionBuilder;
36 import net.sf.japi.swing.action.ActionBuilderFactory;
37 import net.sf.japi.swing.action.DefaultActionBuilder;
38 import org.jetbrains.annotations.NotNull;
39 import org.junit.Assert;
40 import org.junit.BeforeClass;
41 import org.junit.Test;
42 
47 public class MapMenuPreferencesTest {
48 
53  @Test
54  public void test1() throws IOException {
55  final PathManager pathManager = new PathManager(new TestProjectSettings());
56  final MapMenuLoader pref = new MapMenuLoader("key", pathManager);
57  Assert.assertEquals(0, pref.loadNumEntries());
58  try {
59  pref.loadEntry(0);
60  Assert.fail();
61  } catch (final IOException ignored) {
62  // ignore
63  }
64  pref.saveNumEntries(2);
65  Assert.assertEquals(2, pref.loadNumEntries());
66  pref.saveEntry(1, "title1", "filename1", "directory1/sub", Type.DIR);
67  pref.saveEntry(0, "title0", "filename0", "directory0/sub", Type.MAP);
68 
69  final Result result0 = pref.loadEntry(0);
70  final MapMenuEntry mapMenuEntry0 = result0.getMapMenuEntry();
71  Assert.assertEquals("directory0/sub", result0.getDirectory());
72  Assert.assertEquals("title0", mapMenuEntry0.getTitle());
73  Assert.assertTrue(mapMenuEntry0 instanceof MapMenuEntryMap);
74  final MapMenuEntryMap mapMenuEntryMap0 = (MapMenuEntryMap) mapMenuEntry0;
75  Assert.assertEquals(pathManager.getMapFile(new File("filename0")), mapMenuEntryMap0.getMapFile());
76 
77  final Result result1 = pref.loadEntry(1);
78  final MapMenuEntry mapMenuEntry1 = result1.getMapMenuEntry();
79  Assert.assertEquals("directory1/sub", result1.getDirectory());
80  Assert.assertEquals("title1", mapMenuEntry1.getTitle());
81  Assert.assertTrue(mapMenuEntry1 instanceof MapMenuEntryDir);
82 
83  try {
84  pref.loadEntry(2);
85  Assert.fail();
86  } catch (final IOException ignored) {
87  // ignore
88  }
89  pref.removeEntry(0);
90  try {
91  pref.loadEntry(0);
92  Assert.fail();
93  } catch (final IOException ignored) {
94  // ignore
95  }
96  pref.loadEntry(1);
97  }
98 
103  @Test
104  public void test2() throws BackingStoreException {
105  final PathManager pathManager = new PathManager(new TestProjectSettings());
106  final ActionBuilder actionBuilder = new DefaultActionBuilder("net.sf.gridarta");
107  ActionBuilderFactory.getInstance().putActionBuilder("net.sf.gridarta", actionBuilder);
108  final ResourceBundle resourceBundle = ResourceBundle.getBundle("net.sf.gridarta.gui.mapmenu.testLoad1");
109  actionBuilder.addBundle(resourceBundle);
110 
111  final Preferences preferences = Preferences.userNodeForPackage(MainControl.class);
112  for (final String key : resourceBundle.keySet()) {
113  final String value = resourceBundle.getString(key);
114  preferences.put(key, value);
115  }
116 
117  final MapMenu mapMenu1 = new MapMenu("test", pathManager);
118  mapMenu1.load();
119  Assert.assertEquals(10, mapMenu1.size());
120 
121  for (final String key : preferences.keys()) {
122  preferences.remove(key);
123  }
124 
125  final MapMenu mapMenu2 = new MapMenu("test", pathManager);
126  mapMenu2.load();
127  Assert.assertEquals(0, mapMenu2.size());
128 
129  mapMenu1.saveAlways();
130 
131  mapMenu2.load();
132  Assert.assertEquals(10, mapMenu2.size());
133 
134  compareTrees(mapMenu1.getRoot(), mapMenu2.getRoot());
135  }
136 
141  @Test
142  public void test3() {
143  final PathManager pathManager = new PathManager(new TestProjectSettings());
144  final ActionBuilder actionBuilder = new DefaultActionBuilder("net.sf.gridarta");
145  ActionBuilderFactory.getInstance().putActionBuilder("net.sf.gridarta", actionBuilder);
146 
147  final MapMenu mapMenu1 = new MapMenu("test", pathManager);
148  mapMenu1.addMapMenuEntry("dir1", new MapMenuEntryMap(pathManager.getMapFile(new File("file1")), "title1"));
149  mapMenu1.addMapMenuEntry("dir2", new MapMenuEntryMap(pathManager.getMapFile(new File("file2")), "title2"));
150  final DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) mapMenu1.getRoot().getFirstChild();
151  final MapMenuEntry mapMenuEntry = (MapMenuEntry) treeNode.getUserObject();
152  mapMenuEntry.setTitle("dir2");
153 
154  mapMenu1.saveAlways();
155 
156  final MapMenu mapMenu2 = new MapMenu("test", pathManager);
157  mapMenu2.load();
158 
159  compareTrees(mapMenu1.getRoot(), mapMenu2.getRoot());
160  }
161 
168  private static void compareTrees(@NotNull final TreeNode treeNode1, @NotNull final TreeNode treeNode2) {
169  Assert.assertEquals(treeNode1.getChildCount(), treeNode2.getChildCount());
170  for (int i = 0; i < treeNode1.getChildCount(); i++) {
171  final DefaultMutableTreeNode childTreeNode1 = (DefaultMutableTreeNode) treeNode1.getChildAt(i);
172  final DefaultMutableTreeNode childTreeNode2 = (DefaultMutableTreeNode) treeNode2.getChildAt(i);
173  final MapMenuEntry mapMenuEntry1 = (MapMenuEntry) childTreeNode1.getUserObject();
174  final MapMenuEntry mapMenuEntry2 = (MapMenuEntry) childTreeNode2.getUserObject();
175  Assert.assertSame(mapMenuEntry1.getClass(), mapMenuEntry2.getClass());
176  Assert.assertEquals(mapMenuEntry1.getTitle(), mapMenuEntry2.getTitle());
177  final MapMenuEntryVisitor mapMenuEntryVisitor = new MapMenuEntryVisitor() {
178 
179  @Override
180  public void visit(@NotNull final MapMenuEntryDir mapMenuEntry) {
181  compareTrees(childTreeNode1, childTreeNode2);
182  }
183 
184  @Override
185  public void visit(@NotNull final MapMenuEntryMap mapMenuEntry) {
186  final MapMenuEntryMap mapMenuEntryMap1 = (MapMenuEntryMap) mapMenuEntry1;
187  final MapMenuEntryMap mapMenuEntryMap2 = (MapMenuEntryMap) mapMenuEntry2;
188  Assert.assertEquals(mapMenuEntryMap1.getMapFile(), mapMenuEntryMap2.getMapFile());
189  }
190 
191  };
192  mapMenuEntry1.visit(mapMenuEntryVisitor);
193  }
194  }
195 
199  @BeforeClass
200  public static void setUp() {
201  System.setProperty("java.util.prefs.PreferencesFactory", "net.sf.gridarta.preferences.FilePreferencesFactory");
202  FilePreferencesFactory.initialize("user_net_sf_gridarta", null);
203  }
204 
205 }
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Result
Result value consisting of a MapMenuEntry and its location (directory).
Definition: MapMenuLoader.java:225
net.sf.gridarta.gui.mapmenu.MapMenuLoader.saveNumEntries
void saveNumEntries(final int num)
Sets the number of entries present in the preferences.
Definition: MapMenuLoader.java:109
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest.setUp
static void setUp()
Initializes the test case.
Definition: MapMenuPreferencesTest.java:200
net.sf.gridarta.gui.mapmenu.MapMenuEntry
Abstract base class for recent and bookmark menu entries.
Definition: MapMenuEntry.java:29
net.sf.gridarta
Base package of all Gridarta classes.
net.sf
net.sf.gridarta.gui.mapmenu.MapMenuLoader.loadNumEntries
int loadNumEntries()
Returns the number of entries present in the preferences.
Definition: MapMenuLoader.java:97
net.sf.gridarta.model.io.PathManager
This class contains methods for converting relative map paths to absolute map paths and vice versa.
Definition: PathManager.java:39
net.sf.gridarta.preferences
Definition: Codec.java:20
net.sf.gridarta.preferences.FilePreferencesFactory
A PreferencesFactory which creates FilePreferences instances.
Definition: FilePreferencesFactory.java:33
net.sf.gridarta.gui
Graphical User Interface of Gridarta.
net.sf.gridarta.gui.mapmenu.MapMenu
Manages the contents of a recent or bookmark menu.
Definition: MapMenu.java:46
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest.compareTrees
static void compareTrees(@NotNull final TreeNode treeNode1, @NotNull final TreeNode treeNode2)
Compares two TreeNode instances.
Definition: MapMenuPreferencesTest.java:168
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Result.getMapMenuEntry
MapMenuEntry getMapMenuEntry()
Returns the entry.
Definition: MapMenuLoader.java:263
net
net.sf.gridarta.gui.mapmenu.MapMenuEntry.getTitle
String getTitle()
Returns the entry's title.
Definition: MapMenuEntry.java:55
net.sf.gridarta.gui.mapmenu.MapMenuLoader.removeEntry
void removeEntry(final int index)
Removes an entry.
Definition: MapMenuLoader.java:209
net.sf.gridarta.gui.mapmenu.MapMenuLoader.loadEntry
Result loadEntry(final int index)
Loads an entry from preferences.
Definition: MapMenuLoader.java:123
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest.test1
void test1()
Checks that saving and re-loading entries works as expected.
Definition: MapMenuPreferencesTest.java:54
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Result.getDirectory
String getDirectory()
Returns the entry's directory.
Definition: MapMenuLoader.java:254
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest
Regression tests for MapMenuLoader.
Definition: MapMenuPreferencesTest.java:47
net.sf.gridarta.gui.mapmenu.MapMenu.load
void load()
Loads the contents from preferences.
Definition: MapMenu.java:129
net.sf.gridarta.model.io.PathManager.getMapFile
MapFile getMapFile(@NotNull final AbsoluteMapPath mapPath)
Returns a MapFile instance from an AbsoluteMapPath.
Definition: PathManager.java:72
net.sf.gridarta.model.settings.TestProjectSettings
An ProjectSettings implementation for testing purposes.
Definition: TestProjectSettings.java:29
net.sf.gridarta.gui.mapmenu.MapMenuLoader.saveEntry
void saveEntry(final int index, @NotNull final String title, @NotNull final String filename, @NotNull final String directory, @NotNull final Type type)
Saves an entry to preferences.
Definition: MapMenuLoader.java:186
net.sf.gridarta.gui.mapmenu
Definition: AbstractMapMenuPreferences.java:20
net.sf.gridarta.gui.mapmenu.MapMenuLoader
Saves or restores MapMenu contents to Preferences.
Definition: MapMenuLoader.java:35
net.sf.gridarta.model.io
Reading and writing of maps, handling of paths.
Definition: AbstractAnimationObjectsReader.java:20
net.sf.gridarta.gui.mapmenu.MapMenuEntryMap.getMapFile
MapFile getMapFile()
Returns the map file.
Definition: MapMenuEntryMap.java:57
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Type
Preferences values for entries.
Definition: MapMenuLoader.java:41
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest.test3
void test3()
Checks that saving and re-loading a MapMenu having directories with the same name works.
Definition: MapMenuPreferencesTest.java:142
net.sf.gridarta.gui.mapmenu.MapMenuEntry.visit
abstract void visit(@NotNull MapMenuEntryVisitor visitor)
Calls the.
net.sf.gridarta.gui.mapmenu.MapMenu.size
int size()
Returns the number of entries in this menu.
Definition: MapMenu.java:350
net.sf.gridarta.model
net.sf.gridarta.gui.mapmenu.MapMenu.getRoot
DefaultMutableTreeNode getRoot()
Returns the root node.
Definition: MapMenu.java:389
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Type.DIR
DIR
Preferences value for entries representing directories.
Definition: MapMenuLoader.java:46
net.sf.gridarta.gui.mapmenu.MapMenuEntryVisitor
Interface for classes operating on MapMenuEntry instances.
Definition: MapMenuEntryVisitor.java:28
net.sf.gridarta.gui.mapmenu.MapMenuLoader.Type.MAP
MAP
Preferences value for entries representing map files.
Definition: MapMenuLoader.java:51
net.sf.gridarta.gui.mapmenu.MapMenuEntry.setTitle
void setTitle(@NotNull final String title)
Sets the entry's title.
Definition: MapMenuEntry.java:63
net.sf.gridarta.gui.mapmenu.MapMenuEntryMap
A MapMenuEntry that represents a map.
Definition: MapMenuEntryMap.java:29
net.sf.gridarta.gui.mapmenu.MapMenuEntryDir
A MapMenuEntry that represents a directory.
Definition: MapMenuEntryDir.java:28
net.sf.gridarta.gui.mapmenu.MapMenuPreferencesTest.test2
void test2()
Checks that loading a MapMenu instance works as expected.
Definition: MapMenuPreferencesTest.java:104
net.sf.gridarta.gui.mapmenu.MapMenu.addMapMenuEntry
void addMapMenuEntry(@NotNull final String directory, @NotNull final MapMenuEntry mapMenuEntry)
Adds a MapMenuEntry to this menu.
Definition: MapMenu.java:210
net.sf.gridarta.gui.mapmenu.MapMenu.saveAlways
void saveAlways()
Saves the contents to preferences.
Definition: MapMenu.java:163
net.sf.gridarta.preferences.FilePreferencesFactory.initialize
static void initialize(@NotNull final String defaultName, @Nullable final File file)
Initialize the module.
Definition: FilePreferencesFactory.java:54
net.sf.gridarta.model.settings
Definition: AbstractDefaultProjectSettings.java:20
net.sf.gridarta.MainControl
Interface used as preferences location.
Definition: MainControl.java:27