Gridarta Editor
AutojoinListsTest.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 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.autojoin;
21 
29 import org.junit.Assert;
30 import org.junit.Test;
31 
36 public class AutojoinListsTest {
37 
42  @Test
44  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper();
45  autojoinListsHelper.newAutojoinListsFail("autojoin list with less than 16 valid entries");
46  autojoinListsHelper.newAutojoinListsFail("autojoin list with less than 16 valid entries", "a0");
47  autojoinListsHelper.newAutojoinListsFail("autojoin list with less than 16 valid entries", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14");
48  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");
49  autojoinListsHelper.newAutojoinListsFail("autojoin list with more than 16 valid entries", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16");
50  }
51 
56  @Test
58  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper();
59  //Check disabled for now as Daimonin uses this feature:
60  //autojoinListsHelper.newAutojoinListsFail("autojoin list contains duplicate archetype 'a0'", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a0");
61  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a0");
62  }
63 
68  @Test
70  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper();
71  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");
72  autojoinListsHelper.newAutojoinListsFail("archetype 'a4' contained in more than one autojoin list", "b0", "b1", "b2", "b3", "a4", "b5", "b6", "b7", "b8", "b9", "b10", "b11", "b12", "b13", "b14", "b15");
73  autojoinListsHelper.newAutojoinListsFail("autojoin list contains duplicate archetype 'c0'", "c0|c1|c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15");
74  autojoinListsHelper.newAutojoinListsFail("autojoin list is empty", "d0", "d1", "d2", "", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15");
75  }
76 
82  @Test
84  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
85  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
86  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");
87  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
88  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
89  final TestArchetype a0 = mapModelCreator.getArchetype("a0");
90  final TestArchetype a1 = mapModelCreator.getArchetype("a1");
91  final TestArchetype a6 = mapModelCreator.getArchetype("a6");
92  final TestArchetype a8 = mapModelCreator.getArchetype("a8");
93  mapModel.beginTransaction("TEST");
94  testMapModelHelper.insertArchetype(mapModel, 1, 0, a1, false);
95  testMapModelHelper.insertArchetype(mapModel, 0, 1, a8, false);
96 
97  // insert using autojoin
98  testMapModelHelper.insertArchetype(mapModel, 1, 1, a0, true);
99  TestMapModelHelper.checkMapContents(mapModel, "|a5|", "a10|a9|");
100 
101  // insert duplicate archetype is ignored
102  try {
103  testMapModelHelper.insertArchetype(mapModel, 1, 1, a0, true);
104  Assert.fail();
105  } catch (final IllegalArgumentException ignored) {
106  // ignore
107  }
108  TestMapModelHelper.checkMapContents(mapModel, "|a5|", "a10|a9|");
109 
110  // insert using autojoin
111  testMapModelHelper.insertArchetype(mapModel, 2, 1, a6, true);
112  TestMapModelHelper.checkMapContents(mapModel, "|a5|", "a10|a11|a8");
113 
114  // insert without autojoin
115  testMapModelHelper.insertArchetype(mapModel, 2, 0, a6, false);
116  TestMapModelHelper.checkMapContents(mapModel, "|a5|a6", "a10|a11|a8");
117  }
118 
124  @Test
126  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
127  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
128  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15");
129  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
130  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
131  final TestArchetype a4 = mapModelCreator.getArchetype("a4");
132  final TestArchetype a8 = mapModelCreator.getArchetype("a8");
133  final TestArchetype a10 = mapModelCreator.getArchetype("a10");
134  final TestArchetype a11 = mapModelCreator.getArchetype("a11");
135  mapModel.beginTransaction("TEST");
136  final TestGameObject g10 = testMapModelHelper.insertArchetype(mapModel, 1, 0, a4, false);
137  final TestGameObject g01 = testMapModelHelper.insertArchetype(mapModel, 0, 1, a10, false);
138  testMapModelHelper.insertArchetype(mapModel, 1, 1, a11, false);
139  final TestGameObject g21 = testMapModelHelper.insertArchetype(mapModel, 2, 1, a8, false);
140 
141  // remove using autojoin
142  mapModel.removeGameObject(g21, true);
143  TestMapModelHelper.checkMapContents(mapModel, "|a4|", "a10|a9|");
144 
145  // remove without autojoin
146  mapModel.removeGameObject(g10, false);
147  TestMapModelHelper.checkMapContents(mapModel, "||", "a10|a9|");
148 
149  // remove using autojoin
150  mapModel.removeGameObject(g01, true);
151  TestMapModelHelper.checkMapContents(mapModel, "||", "|a1|");
152  }
153 
160  @Test
162  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
163  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
164  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
165  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
166  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
167  final TestArchetype a0 = mapModelCreator.getArchetype("a0");
168  final TestArchetype a3 = mapModelCreator.getArchetype("a3");
169  final TestArchetype a8 = mapModelCreator.getArchetype("a8");
170  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
171  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
172  mapModel.beginTransaction("TEST");
173  testMapModelHelper.insertArchetype(mapModel, 0, 0, b5, false);
174  testMapModelHelper.insertArchetype(mapModel, 2, 0, b10, false);
175  testMapModelHelper.insertArchetype(mapModel, 0, 1, a3, false);
176  testMapModelHelper.insertArchetype(mapModel, 1, 1, a8, false);
177 
178  // insert using autojoin
179  testMapModelHelper.insertArchetype(mapModel, 1, 0, a0, true);
180  TestMapModelHelper.checkMapContents(mapModel, "b5|a6|b10", "a3|a9|");
181  }
182 
189  @Test
191  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
192  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
193  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
194  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
195  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
196  final TestArchetype a3 = mapModelCreator.getArchetype("a3");
197  final TestArchetype a8 = mapModelCreator.getArchetype("a8");
198  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
199  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
200  mapModel.beginTransaction("TEST");
201  testMapModelHelper.insertArchetype(mapModel, 0, 0, b5, false);
202  testMapModelHelper.insertArchetype(mapModel, 2, 0, b10, false);
203  testMapModelHelper.insertArchetype(mapModel, 0, 1, a3, false);
204  testMapModelHelper.insertArchetype(mapModel, 1, 1, a8, false);
205 
206  // insert using autojoin
207  testMapModelHelper.insertArchetype(mapModel, 1, 0, b10, true);
208  TestMapModelHelper.checkMapContents(mapModel, "b5|b10|b10", "a3|a8|");
209  }
210 
217  @Test
219  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
220  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
221  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
222  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
223  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
224  final TestArchetype a3 = mapModelCreator.getArchetype("a3");
225  final TestArchetype a8 = mapModelCreator.getArchetype("a8");
226  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
227  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
228  mapModel.beginTransaction("TEST");
229  testMapModelHelper.insertArchetype(mapModel, 0, 0, b5, false);
230  testMapModelHelper.insertArchetype(mapModel, 2, 0, b10, false);
231  testMapModelHelper.insertArchetype(mapModel, 0, 1, a3, false);
232  testMapModelHelper.insertArchetype(mapModel, 1, 1, a8, false);
233 
234  // insert using autojoin
235  testMapModelHelper.insertArchetype(mapModel, 1, 0, b5, true);
236  TestMapModelHelper.checkMapContents(mapModel, "b5|b5|b10", "a3|a9|");
237  }
238 
245  @Test
247  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
248  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
249  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
250  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
251  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
252  final TestArchetype a10 = mapModelCreator.getArchetype("a10");
253  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
254  final TestArchetype a11 = mapModelCreator.getArchetype("a11");
255  mapModel.beginTransaction("TEST");
256  testMapModelHelper.insertArchetype(mapModel, 0, 0, a10, false);
257  final TestGameObject g10 = testMapModelHelper.insertArchetype(mapModel, 1, 0, b10, false);
258  testMapModelHelper.insertArchetype(mapModel, 2, 0, a10, false);
259  testMapModelHelper.insertArchetype(mapModel, 1, 1, a11, false);
260 
261  // remove using autojoin
262  mapModel.removeGameObject(g10, true);
263  TestMapModelHelper.checkMapContents(mapModel, "a8||a2", "|a11|");
264  }
265 
272  @Test
274  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
275  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
276  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
277  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
278  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
279  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
280  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
281  final TestArchetype a11 = mapModelCreator.getArchetype("a11");
282  final TestArchetype a12 = mapModelCreator.getArchetype("a12");
283  mapModel.beginTransaction("TEST");
284  testMapModelHelper.insertArchetype(mapModel, 0, 0, b10, false);
285  final TestGameObject g10 = testMapModelHelper.insertArchetype(mapModel, 1, 0, a12, false);
286  testMapModelHelper.insertArchetype(mapModel, 2, 0, b5, false);
287  testMapModelHelper.insertArchetype(mapModel, 1, 1, a11, false);
288 
289  // remove using autojoin
290  mapModel.removeGameObject(g10, true);
291  TestMapModelHelper.checkMapContents(mapModel, "b10||b5", "|a10|");
292  }
293 
300  @Test
302  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
303  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
304  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
305  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 2);
306  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
307  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
308  final TestArchetype a11 = mapModelCreator.getArchetype("a11");
309  mapModel.beginTransaction("TEST");
310  testMapModelHelper.insertArchetype(mapModel, 0, 0, b10, false);
311  final TestGameObject g10 = testMapModelHelper.insertArchetype(mapModel, 1, 0, b10, false);
312  testMapModelHelper.insertArchetype(mapModel, 2, 0, b10, false);
313  testMapModelHelper.insertArchetype(mapModel, 1, 1, a11, false);
314 
315  // remove using autojoin
316  mapModel.removeGameObject(g10, true);
317  TestMapModelHelper.checkMapContents(mapModel, "b10||b10", "|a11|");
318  }
319 
326  @Test
328  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
329  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
330  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
331  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 3);
332  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
333  final TestArchetype a5 = mapModelCreator.getArchetype("a5");
334  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
335  final TestArchetype a10 = mapModelCreator.getArchetype("a10");
336  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
337  final TestArchetype a15 = mapModelCreator.getArchetype("a15");
338  mapModel.beginTransaction("TEST");
339  testMapModelHelper.insertArchetype(mapModel, 1, 0, a10, false);
340  testMapModelHelper.insertArchetype(mapModel, 0, 1, b10, false);
341  testMapModelHelper.insertArchetype(mapModel, 1, 1, a15, false);
342  testMapModelHelper.insertArchetype(mapModel, 2, 1, a5, false);
343  testMapModelHelper.insertArchetype(mapModel, 1, 2, b5, false);
344 
345  try {
346  testMapModelHelper.insertArchetype(mapModel, 1, 1, a10, true);
347  Assert.fail();
348  } catch (final IllegalArgumentException ignored) {
349  // ignore
350  }
351  try {
352  testMapModelHelper.insertArchetype(mapModel, 0, 1, b10, true);
353  Assert.fail();
354  } catch (final IllegalArgumentException ignored) {
355  // ignore
356  }
357  TestMapModelHelper.checkMapContents(mapModel, "|a10|", "b10|a15|a5", "|b5|");
358  }
359 
365  @Test
367  final TestMapModelCreator mapModelCreator = new TestMapModelCreator(false);
368  final AutojoinListsHelper autojoinListsHelper = new AutojoinListsHelper(mapModelCreator);
369  autojoinListsHelper.newAutojoinLists("a0", "a1", "a2", "a3", "a4", "a5|b5", "a6", "a7", "a8", "a9", "a10|b10", "a11", "a12", "a13", "a14", "a15");
370  final MapModel<TestGameObject, TestMapArchObject, TestArchetype> mapModel = mapModelCreator.newMapModel(3, 3);
371  final TestMapModelHelper testMapModelHelper = mapModelCreator.newTestMapModelHelper();
372  final TestArchetype a0 = mapModelCreator.getArchetype("a0");
373  final TestArchetype a5 = mapModelCreator.getArchetype("a5");
374  final TestArchetype b5 = mapModelCreator.getArchetype("b5");
375  final TestArchetype a10 = mapModelCreator.getArchetype("a10");
376  final TestArchetype b10 = mapModelCreator.getArchetype("b10");
377  mapModel.beginTransaction("TEST");
378  for (int y = 0; y < 3; y++) {
379  for (int x = 0; x < 3; x++) {
380  testMapModelHelper.insertArchetype(mapModel, x, y, a10, false);
381  }
382  }
383 
384  TestMapModelHelper.checkMapContents(mapModel, "a10|a10|a10", "a10|a10|a10", "a10|a10|a10");
385  testMapModelHelper.insertArchetype(mapModel, 1, 1, b5, true); // replace main->alt
386  TestMapModelHelper.checkMapContents(mapModel, "a10|a14|a10", "a8|b5|a2", "a10|a11|a10");
387  testMapModelHelper.insertArchetype(mapModel, 1, 1, b10, true); // replace alt->alt, different archetype
388  TestMapModelHelper.checkMapContents(mapModel, "a10|a10|a10", "a10|b10|a10", "a10|a10|a10");
389  testMapModelHelper.insertArchetype(mapModel, 1, 1, a5, true); // replace alt->main
390  TestMapModelHelper.checkMapContents(mapModel, "a10|a14|a10", "a10|a15|a10", "a10|a11|a10");
391  testMapModelHelper.insertArchetype(mapModel, 1, 1, b10, true); // replace main->alt
392  TestMapModelHelper.checkMapContents(mapModel, "a10|a10|a10", "a10|b10|a10", "a10|a10|a10");
393  try {
394  testMapModelHelper.insertArchetype(mapModel, 1, 1, b10, true); // replace alt->alt, same archetype
395  Assert.fail();
396  } catch (final IllegalArgumentException ignored) {
397  // ignore
398  }
399  TestMapModelHelper.checkMapContents(mapModel, "a10|a10|a10", "a10|b10|a10", "a10|a10|a10");
400  try {
401  testMapModelHelper.insertArchetype(mapModel, 1, 0, a0, true); // replace main->main
402  Assert.fail();
403  } catch (final IllegalArgumentException ignored) {
404  // ignore
405  }
406  TestMapModelHelper.checkMapContents(mapModel, "a10|a10|a10", "a10|b10|a10", "a10|a10|a10");
407  }
408 
409 }
MapModel< TestGameObject, TestMapArchObject, TestArchetype > newMapModel(final int w, final int h)
Creates a new MapModel instance.
A MapModel reflects the data of a map.
Definition: MapModel.java:75
void testInsertDuplicate1()
Checks that inserting duplicate archetypes with autojoin works as expected.
Helper class for regression tests to create MapModel instances.
void testRemove1()
Checks that removing with autojoin works as expected.
void testRemoveAlt2()
Checks that removing alternative archetypes with autojoin works as expected.
Implements AutojoinList related functions.
Helper class for creating MapModel instances for regression tests.
void newAutojoinListsFail(@NotNull final String expectedException, @NotNull final String... archetypeNames)
Creates a new AutojoinLists instance and expects an error.
void removeGameObject(@NotNull G gameObject, boolean join)
Delete an existing GameObject from the map.
void testInsertAlt2()
Checks that inserting alternative archetypes with autojoin works as expected.
A MapArchObject implementation for testing purposes.
void testRemoveAlt3()
Checks that removing alternative archetypes with autojoin works as expected.
Base package of all Gridarta classes.
TestGameObject insertArchetype(@NotNull final MapModel< TestGameObject, TestMapArchObject, TestArchetype > mapModel, final int x, final int y, @NotNull final BaseObject< TestGameObject, TestMapArchObject, TestArchetype, ?> archetype, final boolean join)
Inserts an archetype game object into a map model.
void testRemoveAlt1()
Checks that removing alternative archetypes with autojoin works as expected.
An Exception indicating that an Archetype name is not unique.
GameObjects are the objects based on Archetypes found on maps.
static void checkMapContents(@NotNull final MapModel< TestGameObject, TestMapArchObject, TestArchetype > mapModel, @NotNull final String... lines)
Checks for expected MapModel&#39;s contents.
void testInsertReplace1()
Checks that replacing archetypes works as expected.
TestArchetype getArchetype(@NotNull final String archetypeName)
Returns an archetype.
TestMapModelHelper newTestMapModelHelper()
Creates a new TestMapModelHelper instance.
void newAutojoinLists(@NotNull final String... archetypeNames)
Creates a new AutojoinLists instance.
void testInsert1()
Checks that inserting with autojoin works as expected.
An Archetype implementation for testing purposes.
void testWrongCount()
Checks that a wrong number of archetypes is detected.
A GameObject implementation for testing purposes.
void testInsertAlt3()
Checks that inserting alternative archetypes with autojoin works as expected.
void beginTransaction(@NotNull String name)
Starts a new transaction.
void testInsertAlt1()
Checks that inserting alternative archetypes with autojoin works as expected.
void testDuplicateArchetype1()
Checks that duplicate archetypes are detected.
void testDuplicateArchetype2()
Checks that duplicate archetypes are detected.