class_name StoryTestCase var testsDirectory: String var files: Variant = haxe_ds_StringMap.new() var lastTranscriptLine: int = 0 func _init(testsDirectory2: String, preloadedFiles = null) -> void: self.testsDirectory = testsDirectory2 if (preloadedFiles != null): self.files = preloadedFiles func testAllExamples() -> void: var exampleTranscripts: Variant = haxe_ds_StringMap.new() var exampleFolders: Array[String] = FileSystem.readDirectory(self.testsDirectory) if true: var _g: int = 0 while (_g < exampleFolders.size()): var folder: String = exampleFolders[_g] _g += 1 var files2: Array[String] = FileSystem.readDirectory("" + self.testsDirectory + "/" + folder) if true: var tempArray if true: var _g2: Array[String] = ([] as Array[String]) if true: var _g1: int = 0 while (_g1 < files2.size()): var file: String = files2[_g1] _g1 += 1 if (StringTools.endsWith(file, ".hlog")): _g2.push_back(file) tempArray = _g2 var value: Array[String] = tempArray exampleTranscripts.__set(folder, value) if true: var folder: Variant = exampleTranscripts.keys() while (folder.get("hasNext").call()): var folder2: String = folder.get("next").call() if (StringTools.startsWith(folder2, "_")): LogUtil.cleanTrace(" Skipping tests for example \"" + folder2 + "\"") continue LogUtil.cleanTrace(" Running tests for example \"" + folder2 + "\"") if true: var _g: int = 0 var _g1 = exampleTranscripts.__get(folder2) while (_g < _g1.size()): var file: String = _g1[_g] _g += 1 var disabled: bool = file.find("disabled") != -1 var debug: bool = file.find("debug") != -1 var partial: bool = file.find("partial") != -1 if (!disabled): LogUtil.cleanTrace(" Running " + file) self.validateAgainstTranscript("" + self.testsDirectory + "/" + folder2 + "/main.hank", "" + self.testsDirectory + "/" + folder2 + "/" + file, !partial, debug) func validateAgainstTranscript(storyFile: String, transcriptFile: String, fullTranscript: bool = true, debug: bool = false) -> void: var buffer: HankBuffer = HankBuffer.FromFile(transcriptFile, self.files) var transcriptLines: Array[String] = buffer.lines() var randomSeed = null if (StringTools.startsWith(transcriptLines[0], "@")): randomSeed = transcriptLines[0].substr(1).to_int() if true: var index: int = transcriptLines.find(transcriptLines[0]) if (index >= 0): transcriptLines.remove_at(index) true else: false var story: Story = null story = Story.FromFile(storyFile, self.files, randomSeed) story.hInterface.addVariable("DEBUG", debug) var i: int = 0 while (i < transcriptLines.size()): var line: String = transcriptLines[i] self.lastTranscriptLine = i if (StringTools.startsWith(line, "#")): var tempArray var _this: String = StringTools.trim(line.substr(1)) tempArray = Array(Array(_this.split(":")), Variant.Type.TYPE_STRING, "", null) var parts: Array[String] = tempArray HankAssert.equals(StringTools.trim(parts[1]), story.hInterface.evaluateExpr(parts[0], story.nodeScopes), null) i += 1 continue var frame: Variant = story.nextFrame() if (StringTools.startsWith(line, "*")): var choices: Array[String] = [] while true: choices.push_back(line.substr(2)) var tempIndex i += 1 tempIndex = i line = transcriptLines[tempIndex] if !(line != null && StringTools.startsWith(line, "*")): break var tempArray1 var _g: Array[Variant] = ([] as Array[Variant]) var _g1: int = 0 while (_g1 < choices.size()): var choice: String = choices[_g1] _g1 += 1 _g.push_back(([] as Array[Variant])) tempArray1 = _g HankAssert.equals({ "_index": 1, "choices": choices, "tags": tempArray1 }, frame, null) continue else: if (StringTools.startsWith(line, ">")): var tempRight var s: String = line.substr(1) var l: int = s.length() var r: int = 0 while (r < l && StringTools.isSpace(s, r)): r += 1 if (r > 0): tempRight = s.substr(r, l - r) else: tempRight = s line = tempRight var firstColonIdx: int = line.find(":") if (firstColonIdx == -1): assert(false, str("Choice line in transcript does not specify expected output: > " + line)) var index: int = line.substr(0, firstColonIdx).to_int() - 1 var expectedOutput: String = StringTools.trim(line.substr(firstColonIdx + 1)) var output: String = story.choose(index) HankAssert.equals(expectedOutput, output, null) else: if (line.length() > 0): HankAssert.equals({ "_index": 0, "text": line }, frame, null) if (frame == { "_index": 2 }): break i += 1 if (fullTranscript): HankAssert.equals({ "_index": 2 }, story.nextFrame(), null)