#charset "us-ascii" #include #include /* To use this extension, which was created by Ben Cressey and Eric Eve, define Test objects like so: foo: Test testName = 'foo' testList = [ 'x me', 'i' ] ; bar: Test testName = 'bar' testList = [ 'look', 'listen' ] ; all: Test testName = 'all' testList = [ 'test foo', 'test bar' ] ; Alternatively, you can include the following line at the head of your file of test scripts: Test template 'testName' [testList]; ...and then use the template structure to create your test objects more conveniently: someTest: Test 'foo' ['x me', 'i']; Unless you're planning to refer to the Test object in some other part of your code, you can save a bit of typing by making it an anonymous object: Test 'foo' ['x me', 'i']; */ /* * The 'list tests' and 'list tests fully' commands can be used to list * your test scripts from within the running game. */ #ifdef __DEBUG DefineSystemAction(ListTests) execSystemAction { if(allTests.lst.length == 0) { reportFailure('There are no test scripts defined in this game. '); exit; } foreach(local testObj in allTests.lst) { "<>"; if(gAction.fully) { ": "; foreach(local txt in testObj.testList) "<>/"; } "\n"; } } fully = nil ; VerbRule(ListTests) ('list' | 'l') 'tests' (| 'fully' -> fully) : ListTestsAction verbPhrase = 'list/listing test scripts' ; /* * The 'test X' command can be used with any Test object defined in the source code: */ DefineLiteralAction(Test) execAction() { local target = getLiteral().toLower(); local script = allTests.valWhich({x: x.testName.toLower == target}); if (script) script.run(); else "Test sequence not found. "; } ; VerbRule(Test) 'test' singleLiteral : TestAction verbPhrase = 'test/testing (what)' ; class Test: object testName = 'nil' testList = [ 'z' ] testFile = 'TEST_' + testName + '.TCMD' run { "Testing sequence: \"<>\". "; local out = File.openTextFile(testFile, FileAccessWrite); testList.forEach({x: out.writeFile('>' + x + '\n')}); out.closeFile(); setScriptFile(testFile); } ; allTests: object lst() { if (lst_ == nil) initLst(); return lst_; } initLst() { lst_ = new Vector(50); local obj = firstObj(); while (obj != nil) { if(obj.ofKind(Test)) lst_.append(obj); obj = nextObj(obj); } lst_ = lst_.toList(); } valWhich(cond) { if (lst_ == nil) initLst(); return lst_.valWhich(cond); } lst_ = nil ; #endif // __DEBUG