46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
|
package generator
|
||
|
|
||
|
import "io"
|
||
|
import "fmt"
|
||
|
import "testing"
|
||
|
import "strings"
|
||
|
import "git.tebibyte.media/sashakoshka/fspl/parser"
|
||
|
import "git.tebibyte.media/sashakoshka/fspl/analyzer"
|
||
|
|
||
|
func testString (test *testing.T, correct string, input string) {
|
||
|
testReader(test, correct, strings.NewReader(input))
|
||
|
}
|
||
|
|
||
|
func testReader (test *testing.T, correct string, inputs ...io.Reader) {
|
||
|
ast := parser.Tree { }
|
||
|
for index, stream := range inputs {
|
||
|
err := ast.Parse(fmt.Sprintf("stream%d.fspl", index), stream)
|
||
|
if err != nil && err != io.EOF{
|
||
|
test.Error("parser returned error: ", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
tree := analyzer.Tree { }
|
||
|
err := tree.Analyze(ast)
|
||
|
if err != nil {
|
||
|
test.Error("analyzer returned error: ", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
output := new(strings.Builder)
|
||
|
err = NativeTarget().Generate(tree, output)
|
||
|
if err != nil {
|
||
|
test.Error("generator returned error: ", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
got := output.String()
|
||
|
if got != correct {
|
||
|
test.Logf("results do not match")
|
||
|
test.Logf("got:\n%v", got)
|
||
|
test.Logf("correct:\n%v", correct)
|
||
|
test.Fail()
|
||
|
}
|
||
|
}
|