Files
hank/hank-godot/scripts/StoryTestCase.gd
Nat Quayle Nelson 8caad092be
Some checks failed
/ test (push) Failing after 8s
Generate GDScript
2025-10-30 19:19:36 -05:00

143 lines
4.7 KiB
GDScript

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)