parse_stack_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // +build go1.7
  2. package ini
  3. import (
  4. "reflect"
  5. "testing"
  6. )
  7. func newMockAST(v []rune) AST {
  8. return newASTWithRootToken(ASTKindNone, Token{raw: v})
  9. }
  10. func TestStack(t *testing.T) {
  11. cases := []struct {
  12. asts []AST
  13. expected []AST
  14. }{
  15. {
  16. asts: []AST{
  17. newMockAST([]rune("0")),
  18. newMockAST([]rune("1")),
  19. newMockAST([]rune("2")),
  20. newMockAST([]rune("3")),
  21. newMockAST([]rune("4")),
  22. },
  23. expected: []AST{
  24. newMockAST([]rune("0")),
  25. newMockAST([]rune("1")),
  26. newMockAST([]rune("2")),
  27. newMockAST([]rune("3")),
  28. newMockAST([]rune("4")),
  29. },
  30. },
  31. }
  32. for _, c := range cases {
  33. p := newParseStack(10, 10)
  34. for _, ast := range c.asts {
  35. p.Push(ast)
  36. p.MarkComplete(ast)
  37. }
  38. if e, a := len(c.expected), p.Len(); e != a {
  39. t.Errorf("expected the same legnth with %d, but received %d", e, a)
  40. }
  41. for i := len(c.expected) - 1; i >= 0; i-- {
  42. if e, a := c.expected[i], p.Pop(); !reflect.DeepEqual(e, a) {
  43. t.Errorf("stack element %d invalid: expected %v, but received %v", i, e, a)
  44. }
  45. }
  46. if e, a := len(c.expected), p.index; e != a {
  47. t.Errorf("expected %d, but received %d", e, a)
  48. }
  49. if e, a := c.asts, p.list[:p.index]; !reflect.DeepEqual(e, a) {
  50. t.Errorf("expected %v, but received %v", e, a)
  51. }
  52. }
  53. }