parser_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package muesli
  2. import (
  3. _ "strings"
  4. "testing"
  5. )
  6. func HelperFailOnErrors(ast * Ast, expected int, test *testing.T) {
  7. if ast == nil {
  8. test.Errorf("Parse failed, AST is nil.")
  9. return
  10. }
  11. if ast.IsNone() {
  12. test.Errorf("Parse failed, %d parse errors expected", expected)
  13. }
  14. errors := ast.Errors()
  15. if len(errors) != expected {
  16. test.Log("Parse errors:\n")
  17. for _, err := range errors {
  18. test.Logf("%s\n", err.String())
  19. }
  20. test.Errorf("There were %d parse errors, %d expected", len(errors), expected)
  21. }
  22. }
  23. func HelperParseAndFailOnErrors(prog string, expected int,
  24. parsefunc func(*Parser) *Ast, test *testing.T) {
  25. defer func(){
  26. err := recover()
  27. if err != nil {
  28. test.Errorf("Parse error: %s", err)
  29. }
  30. }()
  31. parser := NewParserFromString(prog)
  32. parser.SetLogger(&testLogger{})
  33. ast := parsefunc(parser)
  34. HelperFailOnErrors(ast, expected, test)
  35. if ast != nil {
  36. ast.Display()
  37. }
  38. }
  39. func TestParser(test *testing.T) {
  40. com := `puts "hello"
  41. say ( add 5 10 ) .`
  42. parser := NewParserFromString(com)
  43. ast := parser.Parse()
  44. if ast != nil {
  45. ast.Display()
  46. }
  47. }
  48. func TestParser2(test *testing.T) {
  49. com := `puts "hello"
  50. say ( add 5 10 ) .`
  51. HelperParseAndFailOnErrors(com, 0, (*Parser).Parse, test)
  52. }
  53. func TestParenthesis(test *testing.T) {
  54. HelperParseAndFailOnErrors(`( add 5 10 ) `, 0, (*Parser).Parse, test)
  55. // HelperParseAndFailOnErrors(`( add 5 10 ) `, 0, (*Parser).ParseParenthesis, test)
  56. // HelperParseAndFailOnErrors(`add 5 10 `, 0, (*Parser).ParseCommand, test)
  57. }
  58. func TestClosed(test *testing.T) {
  59. HelperParseAndFailOnErrors(`( add 5 10 ) `, 0, (*Parser).ParseStatement, test)
  60. // HelperParseAndFailOnErrors(`( add 5 10 ) `, 0, (*Parser).ParseParenthesis, test)
  61. // HelperParseAndFailOnErrors(`add 5 10 `, 0, (*Parser).ParseCommand, test)
  62. }
  63. func TestClosedWithError(test *testing.T) {
  64. HelperParseAndFailOnErrors(`( add 5 10 ) ) `, 0, (*Parser).ParseStatement, test)
  65. // HelperParseAndFailOnErrors(`( add 5 10 ) `, 0, (*Parser).ParseParenthesis, test)
  66. // HelperParseAndFailOnErrors(`add 5 10 `, 0, (*Parser).ParseCommand, test)
  67. }
  68. func TestParseDesignFile(test *testing.T) {
  69. parser, err := NewParserFromFilename("design_muesli.muesli")
  70. if err != nil {
  71. test.Errorf("Error parsingfile : %s", err)
  72. return
  73. }
  74. parser.SetLogger(&testLogger{})
  75. ast := parser.Parse()
  76. if ast != nil {
  77. ast.Display()
  78. }
  79. }