 |
Gridarta Editor
|
Go to the documentation of this file.
20 package net.sf.gridarta.var.crossfire.model.validation.checks;
22 import java.awt.Point;
36 import net.
sf.japi.swing.action.ActionBuilder;
37 import net.
sf.japi.swing.action.ActionBuilderFactory;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 import org.junit.Assert;
41 import org.junit.BeforeClass;
42 import org.junit.Test;
47 @SuppressWarnings(
"JavaDoc")
55 final ActionBuilder actionBuilder = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
56 actionBuilder.addParent(ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta.var.crossfire"));
61 Assert.assertNull(validate(
null));
66 Assert.assertNull(validate(
"some text"));
71 Assert.assertNull(validate(
"@match hi\n" +
"1"));
76 Assert.assertEquals(
"" +
77 "SuspiciousMsgSyntaxError[match hi][a text line starts with 'match'. Maybe '@match' was intended?]" +
78 "SuspiciousMsgSyntaxError[match hi][text before @match]" +
79 "", validate(
"match hi\n" +
"1"));
84 Assert.assertEquals(
"" +
85 "SuspiciousMsgSyntaxError[match@ hi][a text line starts with 'match'. Maybe '@match' was intended?]" +
86 "SuspiciousMsgSyntaxError[match@ hi][text before @match]" +
87 "", validate(
"match@ hi\n" +
"1"));
92 Assert.assertEquals(
"" +
93 "SuspiciousMsgSyntaxError[match ho][a text line starts with 'match'. Maybe '@match' was intended?]" +
94 "", validate(
"@match hi\n" +
"1\n" +
"match ho\n" +
"2\n" +
"@match *\n" +
"3"));
99 Assert.assertEquals(
"" +
100 "SuspiciousMsgRegExError[@match hi][the word ' hi' starts with a space]" +
101 "", validate(
"@match hi\n" +
"1"));
106 Assert.assertEquals(
"" +
107 "SuspiciousMsgRegExError[@match hi| hello][the word ' hello' starts with a space]" +
108 "", validate(
"@match hi| hello\n" +
"1"));
113 Assert.assertEquals(
"" +
114 "SuspiciousMsgRegExError[@match hi |hello][the word 'hi ' ends with a space]" +
115 "", validate(
"@match hi |hello\n" +
"1"));
120 Assert.assertEquals(
"" +
121 "SuspiciousMsgKeywordError[@reply a b][the keyword ' a' after '@reply' starts with a space]" +
122 "", validate(
"@match a\n" +
"1\n" +
"@reply a b"));
127 Assert.assertEquals(
"" +
128 "SuspiciousMsgKeywordError[@reply a b][the keyword ' a' after '@reply' starts with a space]" +
129 "", validate(
"@match a\n" +
"1\n" +
"@reply a b"));
134 Assert.assertEquals(
"" +
135 "SuspiciousMsgKeywordError[@question a b][the keyword ' a' after '@question' starts with a space]" +
136 "", validate(
"@match a\n" +
"1\n" +
"@question a b"));
141 Assert.assertEquals(
"" +
142 "SuspiciousMsgKeywordError[@question a b][the keyword ' a' after '@question' starts with a space]" +
143 "", validate(
"@match a\n" +
"1\n" +
"@question a b"));
148 Assert.assertNull(validate(
"@match hi\n" +
"1\n" +
"\n" +
"2"));
153 Assert.assertEquals(
"" +
154 "SuspiciousMsgSyntaxError[][the text contains more than one consecutive empty line]" +
155 "", validate(
"@match hi\n" +
"1\n" +
"\n" +
"\n" +
"2"));
160 Assert.assertEquals(
"" +
161 "SuspiciousMsgSyntaxError[][the text starts with an empty line]" +
162 "", validate(
"@match hi\n" +
"\n" +
"2"));
167 Assert.assertEquals(
"" +
168 "SuspiciousMsgSyntaxError[][the text ends with an empty line]" +
169 "", validate(
"@match hi\n" +
"1\n" +
"\n"));
174 Assert.assertEquals(
"" +
175 "SuspiciousMsgRegExError[@match Hi][the word 'Hi' checks for upper-case letters. Matches are case-insensitive, therefore matches should be specified in lower-case letters only]" +
176 "", validate(
"@match Hi\n" +
"1\n"));
181 Assert.assertEquals(
"" +
182 "SuspiciousMsgRegExError[@match hi|hEllo][the word 'hEllo' checks for upper-case letters. Matches are case-insensitive, therefore matches should be specified in lower-case letters only]" +
183 "", validate(
"@match hi|hEllo\n" +
"1\n"));
188 Assert.assertEquals(
"" +
189 "SuspiciousMsgKeywordError[@reply A a][the word 'A' uses upper-case letters. Matches are case-insensitive, therefore replies and questions should be specified in lower-case letters only]" +
190 "", validate(
"@match a\n" +
"1\n" +
"@reply A a\n"));
195 Assert.assertEquals(
"" +
196 "SuspiciousMsgKeywordError[@question A a][the word 'A' uses upper-case letters. Matches are case-insensitive, therefore replies and questions should be specified in lower-case letters only]" +
197 "", validate(
"@match a\n" +
"1\n" +
"@question A a\n"));
202 Assert.assertEquals(
"" +
203 "SuspiciousMsgRegExError[@match a?][use of regular expression operator '?'. This is usually not useful and therefore should be avoided]" +
204 "", validate(
"@match a?\n" +
"1"));
209 Assert.assertEquals(
"" +
210 "SuspiciousMsgRegExError[@match a*][use of regular expression operator '*'. This is usually not useful and therefore should be avoided]" +
211 "", validate(
"@match a*\n" +
"1"));
216 Assert.assertEquals(
"" +
217 "SuspiciousMsgRegExError[@match a+][use of regular expression operator '+'. This is usually not useful and therefore should be avoided]" +
218 "", validate(
"@match a+\n" +
"1"));
223 Assert.assertEquals(
"" +
224 "SuspiciousMsgRegExError[@match a.][use of regular expression operator '.'. This is usually not useful and therefore should be avoided]" +
225 "", validate(
"@match a.\n" +
"1"));
230 Assert.assertEquals(
"" +
231 "SuspiciousMsgRegExError[@match \\a][use of regular expression operator '\\'. This is usually not useful and therefore should be avoided]" +
232 "", validate(
"@match \\a\n" +
"1"));
237 Assert.assertEquals(
"" +
238 "SuspiciousMsgRegExError[@match b|*a][use of regular expression operator '*'. This is usually not useful and therefore should be avoided]" +
239 "", validate(
"@match b|*a\n" +
"1"));
244 Assert.assertEquals(
"" +
245 "SuspiciousMsgSyntaxError[@xyz][unrecognized keyword: '@xyz']" +
246 "", validate(
"@match a\n" +
"@xyz\n" +
"1"));
251 Assert.assertEquals(
"" +
252 "SuspiciousMsgSyntaxError[text][text before @match]" +
253 "", validate(
"text\n" +
"@match a\n" +
"1"));
258 Assert.assertEquals(
"" +
259 "SuspiciousMsgSyntaxError[@reply a b][@reply or @question without @match]" +
260 "SuspiciousMsgSyntaxError[1][text before @match]" +
261 "SuspiciousMsgKeywordError[1][keyword 'a' in '@reply' does not appear in any @match line]" +
262 "", validate(
"@reply a b\n" +
"1"));
267 Assert.assertEquals(
"" +
268 "SuspiciousMsgSyntaxError[@question a b][@reply or @question without @match]" +
269 "SuspiciousMsgSyntaxError[1][text before @match]" +
270 "SuspiciousMsgKeywordError[1][keyword 'a' in '@question' does not appear in any @match line]" +
271 "", validate(
"@question a b\n" +
"1"));
276 Assert.assertEquals(
"" +
277 "SuspiciousMsgRegExError[@match [][unterminated character range]" +
278 "", validate(
"@match [\n" +
"1"));
283 Assert.assertEquals(
"" +
284 "SuspiciousMsgKeywordError[@match a|][empty keyword in '@match']" +
285 "", validate(
"@match a|\n" +
"1"));
290 Assert.assertEquals(
"" +
291 "SuspiciousMsgKeywordError[@match |a][empty keyword in '@match']" +
292 "", validate(
"@match |a\n" +
"1"));
297 Assert.assertEquals(
"" +
298 "SuspiciousMsgKeywordError[@match a||b][empty keyword in '@match']" +
299 "", validate(
"@match a||b\n" +
"1"));
304 Assert.assertEquals(
"" +
305 "SuspiciousMsgMatchAllTextError[@match *a][null]" +
306 "", validate(
"@match *a\n" +
"1"));
311 Assert.assertEquals(
"" +
312 "SuspiciousMsgRegExError[@match a|*a][use of regular expression operator '*'. This is usually not useful and therefore should be avoided]" +
313 "", validate(
"@match a|*a\n" +
"1"));
318 Assert.assertEquals(
"" +
319 "SuspiciousMsgKeywordError[@match a|a][duplicate keyword 'a' in '@match'. The second one will never match]" +
320 "", validate(
"@match a|a\n" +
"1"));
325 Assert.assertEquals(
"" +
326 "SuspiciousMsgKeywordError[@match a|b|a][duplicate keyword 'a' in '@match'. The second one will never match]" +
327 "", validate(
"@match a|b|a\n" +
"1"));
332 Assert.assertEquals(
"" +
333 "SuspiciousMsgKeywordError[@match a][duplicate keyword 'a' in '@match'. The second one will never match]" +
334 "", validate(
"@match a\n" +
"1\n" +
"@match a\n" +
"2"));
339 Assert.assertEquals(
"" +
340 "SuspiciousMsgKeywordError[@match c|d|e][duplicate keyword 'd' in '@match'. The second one will never match]" +
341 "", validate(
"@match a|b|d\n" +
"1\n" +
"@match c|d|e\n" +
"2"));
346 Assert.assertEquals(
"" +
347 "SuspiciousMsgMatchAllTextError[@match *|a][null]" +
348 "", validate(
"@match *|a\n" +
"1"));
353 Assert.assertEquals(
"" +
354 "SuspiciousMsgKeywordError[@match a][keyword 'a' in '@match' after '@match *'. The keyword will never match]" +
355 "", validate(
"@match *\n" +
"1\n" +
"@match a\n" +
"2"));
360 Assert.assertEquals(
"" +
361 "SuspiciousMsgKeywordError[@match *][duplicate '@match *'. The second one will never match]" +
362 "", validate(
"@match *\n" +
"1\n" +
"@match *\n" +
"2"));
367 Assert.assertEquals(
"" +
368 "SuspiciousMsgRegExError[@match a|*][use of regular expression operator '*'. This is usually not useful and therefore should be avoided]" +
369 "", validate(
"@match a|*\n" +
"1"));
374 Assert.assertEquals(
"" +
375 "SuspiciousMsgSyntaxError[@reply a b][@reply or @question without @match]" +
376 "SuspiciousMsgSyntaxError[1][text before @match]" +
377 "SuspiciousMsgKeywordError[1][keyword 'a' in '@reply' does not appear in any @match line]" +
378 "", validate(
"@reply a b\n" +
"1"));
383 Assert.assertEquals(
"" +
384 "SuspiciousMsgSyntaxError[@question a b][@reply or @question without @match]" +
385 "SuspiciousMsgKeywordError[@question a b][keyword 'a' in '@question' does not appear in any @match line]" +
386 "", validate(
"@question a b"));
391 Assert.assertEquals(
"" +
392 "SuspiciousMsgSyntaxError[@reply a b][@reply or @question without @match]" +
393 "", validate(
"@reply a b\n" +
"@match a\n" +
"1"));
398 Assert.assertEquals(
"" +
399 "SuspiciousMsgSyntaxError[@question a b][@reply or @question without @match]" +
400 "", validate(
"@question a b\n" +
"@match a\n" +
"1"));
405 Assert.assertEquals(
"" +
406 "SuspiciousMsgSyntaxError[1][text after @reply or @question]" +
407 "", validate(
"@match a\n" +
"1\n" +
"@reply a b\n" +
"1"));
412 Assert.assertEquals(
"" +
413 "SuspiciousMsgSyntaxError[1][text after @reply or @question]" +
414 "", validate(
"@match a\n" +
"1\n" +
"@question a b\n" +
"1"));
419 Assert.assertNull(validate(
"@match a\n" +
"1\n" +
"@reply a b\n" +
"@match b\n" +
"1"));
424 Assert.assertNull(validate(
"@match a\n" +
"1\n" +
"@question a b\n" +
"@match b\n" +
"1"));
429 Assert.assertEquals(
"" +
430 "SuspiciousMsgSyntaxError[@reply][missing keyword after '@reply']" +
431 "", validate(
"@match a\n" +
"1\n" +
"@reply"));
436 Assert.assertEquals(
"" +
437 "SuspiciousMsgSyntaxError[@question][missing keyword after '@question']" +
438 "", validate(
"@match a\n" +
"1\n" +
"@question"));
443 Assert.assertEquals(
"" +
444 "SuspiciousMsgKeywordError[@reply a b][the keyword ' a' after '@reply' starts with a space]" +
445 "", validate(
"@match a\n" +
"1\n" +
"@reply a b"));
450 Assert.assertEquals(
"" +
451 "SuspiciousMsgKeywordError[@question a b][the keyword ' a' after '@question' starts with a space]" +
452 "", validate(
"@match a\n" +
"1\n" +
"@question a b"));
457 Assert.assertEquals(
"" +
458 "SuspiciousMsgSyntaxError[][the text starts with an empty line]" +
459 "", validate(
"@match a\n" +
"\n" +
"1"));
464 Assert.assertEquals(
"" +
465 "SuspiciousMsgSyntaxError[@match b][@match without following text]" +
466 "", validate(
"@match a\n" +
"1\n" +
"@match b"));
471 Assert.assertNull(validate(
"@match a\n" +
"1\n" +
"\n" +
"2"));
476 Assert.assertEquals(
"" +
477 "SuspiciousMsgSyntaxError[][the text contains more than one consecutive empty line]" +
478 "", validate(
"@match a\n" +
"1\n" +
"\n" +
"\n" +
"2"));
483 Assert.assertEquals(
"" +
484 "SuspiciousMsgSyntaxError[match a][a text line starts with 'match'. Maybe '@match' was intended?]" +
485 "SuspiciousMsgSyntaxError[match a][text before @match]" +
486 "", validate(
"match a\n" +
"1"));
491 Assert.assertEquals(
"" +
492 "SuspiciousMsgSyntaxError[match b][a text line starts with 'match'. Maybe '@match' was intended?]" +
493 "", validate(
"@match a\n" +
"1\n" +
"match b"));
498 Assert.assertEquals(
"" +
499 "SuspiciousMsgSyntaxError[@match][missing keywords after '@match']" +
500 "", validate(
"@match\n" +
"1"));
505 Assert.assertEquals(
"" +
506 "SuspiciousMsgSyntaxError[@reply][missing keyword after '@reply']" +
507 "", validate(
"@match a\n" +
"1\n" +
"@reply"));
512 Assert.assertEquals(
"" +
513 "SuspiciousMsgSyntaxError[@reply a][missing text after '@reply']" +
514 "", validate(
"@match a\n" +
"1\n" +
"@reply a"));
519 Assert.assertEquals(
"" +
520 "SuspiciousMsgSyntaxError[@question][missing keyword after '@question']" +
521 "", validate(
"@match a\n" +
"1\n" +
"@question\n"));
526 Assert.assertEquals(
"" +
527 "SuspiciousMsgSyntaxError[@question a][missing text after '@question']" +
528 "", validate(
"@match a\n" +
"1\n" +
"@question a"));
534 Assert.assertEquals(
"" +
535 "SuspiciousMsgSyntaxError[@match hi][@match without following text]" +
536 "", validate(0,
"@match hi", creator));
548 Assert.assertNull(validate(0,
null, creator));
554 Assert.assertEquals(
"" +
555 "SuspiciousMsgMagicEarWithoutMessageError[][null]" +
562 Assert.assertEquals(
"" +
563 "SuspiciousMsgMagicEarWithoutMessageError[][null]" +
572 archetype.setMsgText(
"@match hi");
580 Assert.assertEquals(
"" +
581 "SuspiciousMsgSyntaxError[@reply a b][@reply or @question should not be used for a magic ear]" +
588 Assert.assertEquals(
"" +
589 "SuspiciousMsgSyntaxError[@question a b][@reply or @question should not be used for a magic ear]" +
595 Assert.assertEquals(
"" +
596 "SuspiciousMsgKeywordError[@reply b b][keyword 'b' in '@reply' does not appear in any @match line]" +
597 "", validate(
"@match a\n" +
"1\n" +
"@reply b b"));
602 Assert.assertEquals(
"" +
603 "SuspiciousMsgKeywordError[1][keyword 'b' in '@reply' does not appear in any @match line]" +
604 "", validate(
"@match a\n" +
"1\n" +
"@reply b b\n" +
"@match *\n" +
"1"));
609 Assert.assertEquals(
"" +
610 "SuspiciousMsgKeywordError[@question b b][keyword 'b' in '@question' does not appear in any @match line]" +
611 "", validate(
"@match a\n" +
"1\n" +
"@question b b"));
616 Assert.assertEquals(
"" +
617 "SuspiciousMsgKeywordError[1][keyword 'b' in '@question' does not appear in any @match line]" +
618 "", validate(
"@match a\n" +
"1\n" +
"@question b b\n" +
"@match *\n" +
"1"));
623 Assert.assertNull(validate(
"@match *\n" +
"1\n" +
"@match note\n" +
"1"));
627 private static String
validate(@Nullable
final String msg) {
629 return validate(0, msg, creator);
636 final TestGameObject mapGameObject = newGameObject(type, msg, creator);
638 final StringBuilder sb =
new StringBuilder();
640 sb.append(error.getClass().getSimpleName()).append(
"[").append(error.getParameter(0)).append(
"][").append(error.getParameter(1)).append(
"]");
642 return sb.length() == 0 ? null : sb.toString();
648 final TestGameObject gameObject = creator.newGameObject(
"test",
"name", type);
649 gameObject.setMsgText(msg);
652 map.
insertBaseObject(gameObject,
new Point(0, 0),
true,
false, creator.getTopmostInsertionMode());
657 Assert.assertNotNull(mapGameObject);
658 return mapGameObject;
An Archetype implementation for testing purposes.
void validateGameObject_replyIncomplete1_reportsError()
A GameObjectValidator that checks for "msg" values that start with "match ".
TestArchetype newArchetype(@NotNull final String archetypeName)
Creates a new TestArchetype instance but doesn't add it to the archetype set.
void validateGameObject_replyIncomplete2_reportsError()
A MapModel reflects the data of a map.
void validateGameObject_textContainsMultipleEmptyLines_reportsError()
void validateGameObject_magicEarWithReply_reportsError()
void validateGameObject_matchAllNotAtEnd3_reportsError()
void validateGameObject_wordBeginsWithStar2_reportsError()
void validateGameObject_questionIncomplete1_reportsError()
G insertBaseObject(@NotNull BaseObject< G, A, R, ?> baseObject, @NotNull Point pos, boolean allowMany, boolean join, @NotNull InsertionMode insertionMode)
Inserts a BaseObject to a map.
void validateGameObject_emptyQuestion_reportsError()
void validateGameObject_normalMsg_reportsNoError()
void validateGameObject_starNotAtStartOfLine_reportsError()
Base package of all Gridarta classes.
Super class of all errors that could occur during map validation.
void validateGameObject_magicEarWithMsg_reportsNoError()
G getFirst(@NotNull final GameObjectMatcher gameObjectMatcher)
Returns the first occurrence of a matching game object.
void endTransaction()
End a transaction.
void validateGameObject_replyStartsWithSpace_reportsError()
void validateGameObject_upperCaseCharacter1_reportsError()
A GameObject implementation for testing purposes.
void validateGameObject_magicEarWithQuestion_reportsError()
void validateGameObject_suspiciousMatchMsg1_reportsError()
void validateGameObject_noMsg_reportsNoError()
void validateGameObject_matchExcessSpace1_reportsError()
void beginTransaction(@NotNull String name)
Starts a new transaction.
void validateGameObject_questionExcessSpace2_reportsError()
void validateGameObject_singleEmptyLine_reportsNoError()
void validateGameObject_emptyWord3_reportsError()
Iterable< ValidationError< G, A, R > > getErrors()
Get all errors.
Helper class for regression tests to create MapModel instances.
void validateGameObject_wrongKeyword_reportsError()
static String validate(@Nullable final String msg)
void validateGameObject_upperCaseCharacter2_reportsError()
void validateGameObject_textAfterReply_reportsError()
void validateGameObject_upperCaseCharacter3_reportsError()
void validateGameObject_duplicateWord4_reportsError()
void validateGameObject_replyWithoutMatch_reportsError()
void validateGameObject_replyNotMatched1_reportsError()
void validateGameObject_magicEarWithoutMsg_reportsNoError()
void validateGameObject_nonMagicEarWithoutMsg_reportsNoError()
void validateGameObject_magicEarWithoutMsg1_reportsError()
void validateGameObject_questionExcessSpace1_reportsError()
void validateGameObject_suspiciousMatchMsg3_reportsError()
void validateGameObject_regexCharacter5_reportsError()
void validateGameObject_duplicateWord3_reportsError()
void validateGameObject_replyExcessSpace2_reportsError()
void validateGameObject_wordBeginsWithStar1_reportsError()
GameObjects are the objects based on Archetypes found on maps.
void validateGameObject_missingMatch3_reportsError()
void validateGameObject_replyExcessSpace1_reportsError()
Implements Crossfire archetypes.
static TestGameObject newGameObject(final int type, @Nullable final String msg, @NotNull final TestMapModelCreator creator)
void validateGameObject_regExSyntaxError1_reportsError()
void validateGameObject_magicEarWithoutMsg2_reportsError()
Main package of Gridarta4Crossfire, contains all classes specific to the Crossfire version of the Gri...
void validateGameObject_allowMatchNoteAfterMatchAll_reportsError()
void validateGameObject_duplicateWord1_reportsError()
ArchetypeSet< TestGameObject, TestMapArchObject, TestArchetype > getArchetypeSet()
Returns the ArchetypeSet.
void validateGameObject(@NotNull G gameObject, @NotNull ErrorCollector< G, A, R > errorCollector)
Validates a game object.
void validateGameObject_matchExcessSpace3_reportsError()
void validateGameObject_questionStartsWithSpace_reportsError()
void validateGameObject_textAfterQuestion_reportsError()
void validateGameObject_missingMatch4_reportsError()
ValidatorPreferences implementation for regression tests.
An interface for classes that collect errors.
void validateGameObject_matchExcessSpace2_reportsError()
void validateGameObject_duplicateEmptyLine_reportsError()
This package contains the framework for validating maps.
void validateGameObject_emptyWord4_reportsError()
void validateGameObject_textBeforeFirstEntry_reportsError()
void validateGameObject_valid2_reportsNoError()
void validateGameObject_textContainsLeadingMatch2_reportsError()
void validateGameObject_suspiciousMatchMsg2_reportsError()
MapSquare< G, A, R > getMapSquare(@NotNull Point pos)
Get the square at a specified location.
void validateGameObject_questionWithoutMatch1_reportsError()
void validateGameObject_textContainsLeadingMatch1_reportsError()
void validateGameObject_questionIncomplete2_reportsError()
void validateGameObject_textStartsWithEmptyLine_reportsError()
void validateGameObject_emptyWord2_reportsError()
void validateGameObject_matchIncomplete_reportsError()
static void setUp()
Initializes the test.
void validateGameObject_nonMagicEarWithoutText_reportsError()
void validateGameObject_regexCharacter4_reportsError()
void validateGameObject_emptyReply1_reportsError()
void validateGameObject_questionNotMatched2_reportsError()
void validateGameObject_matchAllNotAtEnd1_reportsError()
void validateGameObject_starNotAlone_reportsError()
An Exception indicating that an Archetype name is not unique.
Interface for GameObject Validators.
void validateGameObject_textContainsEmptyLine_reportsNoError()
Regression tests for SuspiciousMsgChecker.
void validateGameObject_trailingEmptyLine_reportsError()
A MapArchObject implementation for testing purposes.
Simple error collector that just collects the error in a collection for later retrieval through itera...
void validateGameObject_textEndsWithEmptyLine_reportsError()
static String validate(final int type, @Nullable final String msg, final TestMapModelCreator creator)
void validateGameObject_regexCharacter2_reportsError()
String TYPE
The attribute name of the object's type.
void validateGameObject_regexCharacter3_reportsError()
void validateGameObject_missingMatch1_reportsError()
void validateGameObject_regexCharacter1_reportsError()
void validateGameObject_valid1_reportsNoError()
void validateGameObject_matchAllNotAtEnd2_reportsError()
void validateGameObject_upperCaseCharacter4_reportsError()
void validateGameObject_missingMatch2_reportsError()
void validateGameObject_validMatchMsg_reportsNoError()
void validateGameObject_questionNotMatched1_reportsError()
void validateGameObject_leadingEmptyLine_reportsError()
void validateGameObject_duplicateWord2_reportsError()
void validateGameObject_replyNotMatched2_reportsError()