Skip to content

Commit 410112d

Browse files
committed
Go: override methods which generates error checks instead of hacking output
1 parent 5ddee1e commit 410112d

File tree

1 file changed

+22
-5
lines changed
  • translator/src/main/scala/io/kaitai/struct/testtranslator/specgenerators

1 file changed

+22
-5
lines changed

translator/src/main/scala/io/kaitai/struct/testtranslator/specgenerators/GoSG.scala

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import _root_.io.kaitai.struct.datatype.{DataType, EndOfStreamError, KSError}
44
import _root_.io.kaitai.struct.exprlang.Ast
55
import _root_.io.kaitai.struct.languages.GoCompiler
66
import _root_.io.kaitai.struct.testtranslator.{Main, TestAssert, TestEquals, TestSpec}
7-
import _root_.io.kaitai.struct.translators.GoTranslator
8-
import _root_.io.kaitai.struct.{ClassTypeProvider, RuntimeConfig, StringLanguageOutputWriter, Utils}
7+
import _root_.io.kaitai.struct.translators.{GoTranslator, TypeProvider}
8+
import _root_.io.kaitai.struct.{ClassTypeProvider, ImportList, RuntimeConfig, StringLanguageOutputWriter, Utils}
99

1010
class GoSG(spec: TestSpec, provider: ClassTypeProvider) extends BaseGenerator(spec) {
1111
/**
@@ -14,15 +14,32 @@ class GoSG(spec: TestSpec, provider: ClassTypeProvider) extends BaseGenerator(sp
1414
*/
1515
class GoOutputWriter(indentStr: String) extends StringLanguageOutputWriter(indentStr) {
1616
override def puts(s: String): Unit = {
17-
val mangled = s.replace(REPLACER, "r.").replaceAll("return err$", "t.Fatal(err)")
18-
super.puts(mangled)
17+
super.puts(s.replace(REPLACER, "r."))
18+
}
19+
}
20+
21+
/**
22+
* Special wrapper around translator that catches all attempts to write error
23+
* check and turns it into assertion.
24+
*/
25+
class GoTestTranslator(
26+
out: StringLanguageOutputWriter,
27+
provider: TypeProvider,
28+
importList: ImportList,
29+
) extends GoTranslator(out, provider, importList) {
30+
override def outAddErrCheck(): Unit = {
31+
out.puts("if err != nil {")
32+
out.inc
33+
out.puts("t.Fatal(err)")
34+
out.dec
35+
out.puts("}")
1936
}
2037
}
2138

2239
override val out = new GoOutputWriter(indentStr)
2340
val compiler = new GoCompiler(provider, RuntimeConfig())
2441
val className = GoCompiler.types2class(List(spec.id))
25-
val translator = new GoTranslator(out, provider, importList)
42+
val translator = new GoTestTranslator(out, provider, importList)
2643

2744
override def fileName(name: String): String = s"${name}_test.go"
2845

0 commit comments

Comments
 (0)