parse_test.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package parse
  2. import (
  3. "fmt"
  4. "reflect"
  5. "testing"
  6. "github.com/xiaq/elvish/util"
  7. )
  8. var parseTests = []struct {
  9. in string
  10. wanted Node
  11. }{
  12. {"", newList(0)},
  13. {"ls", newList( // chunk
  14. 0, newList( // pipeline
  15. 0, &FormNode{ // form
  16. 0, newTerm( // term
  17. 0, &FactorNode{ // factor
  18. 0, StringFactor, newString(0, "ls", "ls")}),
  19. newTermList(2), nil}))},
  20. }
  21. func TestParse(t *testing.T) {
  22. for i, tt := range parseTests {
  23. out, err := Parse(fmt.Sprintf("<test %d>", i), tt.in)
  24. if !reflect.DeepEqual(out, tt.wanted) || err != nil {
  25. t.Errorf("Parse(*, %q) =>\n(%s, %v), want\n(%s, nil) (up to DeepEqual)", tt.in, util.DeepPrint(out), err, util.DeepPrint(tt.wanted))
  26. }
  27. }
  28. }
  29. var completeTests = []struct {
  30. in string
  31. wanted *Context
  32. }{
  33. {"", &Context{
  34. CommandContext, nil,
  35. newTermList(0), newTerm(0),
  36. &FactorNode{0, StringFactor, newString(0, "", "")}}},
  37. {"l", &Context{
  38. CommandContext, nil,
  39. newTermList(0), newTerm(0),
  40. &FactorNode{0, StringFactor, newString(0, "l", "l")}}},
  41. {"ls ", &Context{
  42. ArgContext,
  43. newTerm(0, &FactorNode{0, StringFactor, newString(0, "ls", "ls")}),
  44. newTermList(3),
  45. newTerm(3),
  46. &FactorNode{3, StringFactor, newString(3, "", "")}}},
  47. {"ls a", &Context{
  48. ArgContext,
  49. newTerm(0, &FactorNode{0, StringFactor, newString(0, "ls", "ls")}),
  50. newTermList(3),
  51. newTerm(3),
  52. &FactorNode{3, StringFactor, newString(3, "a", "a")}}},
  53. {"ls $a", &Context{
  54. ArgContext,
  55. newTerm(0, &FactorNode{0, StringFactor, newString(0, "ls", "ls")}),
  56. newTermList(3),
  57. newTerm(3),
  58. &FactorNode{3, VariableFactor, newString(4, "a", "a")}}},
  59. }
  60. func TestComplete(t *testing.T) {
  61. for i, tt := range completeTests {
  62. out, err := Complete(fmt.Sprintf("<test %d>", i), tt.in)
  63. if !reflect.DeepEqual(out, tt.wanted) || err != nil {
  64. t.Errorf("Complete(*, %q) =>\n(%s, %v), want\n(%s, nil)", tt.in, util.DeepPrint(out), err, util.DeepPrint(tt.wanted))
  65. }
  66. }
  67. }