143 lines
4.7 KiB
GDScript
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)
|
|
|