parser_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package parser
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. func Test_Parser(t *testing.T) {
  8. input := `
  9. FROM model1
  10. ADAPTER adapter1
  11. LICENSE MIT
  12. PARAMETER param1 value1
  13. PARAMETER param2 value2
  14. TEMPLATE template1
  15. `
  16. reader := strings.NewReader(input)
  17. commands, err := Parse(reader)
  18. assert.Nil(t, err)
  19. expectedCommands := []Command{
  20. {Name: "model", Args: "model1"},
  21. {Name: "adapter", Args: "adapter1"},
  22. {Name: "license", Args: "MIT"},
  23. {Name: "param1", Args: "value1"},
  24. {Name: "param2", Args: "value2"},
  25. {Name: "template", Args: "template1"},
  26. }
  27. assert.Equal(t, expectedCommands, commands)
  28. }
  29. func Test_Parser_NoFromLine(t *testing.T) {
  30. input := `
  31. PARAMETER param1 value1
  32. PARAMETER param2 value2
  33. `
  34. reader := strings.NewReader(input)
  35. _, err := Parse(reader)
  36. assert.ErrorContains(t, err, "no FROM line")
  37. }
  38. func Test_Parser_MissingValue(t *testing.T) {
  39. input := `
  40. FROM foo
  41. PARAMETER param1
  42. `
  43. reader := strings.NewReader(input)
  44. _, err := Parse(reader)
  45. assert.ErrorContains(t, err, "missing value for [param1]")
  46. }
  47. func Test_Parser_Messages(t *testing.T) {
  48. input := `
  49. FROM foo
  50. MESSAGE system You are a Parser. Always Parse things.
  51. MESSAGE user Hey there!
  52. MESSAGE assistant Hello, I want to parse all the things!
  53. `
  54. reader := strings.NewReader(input)
  55. commands, err := Parse(reader)
  56. assert.Nil(t, err)
  57. expectedCommands := []Command{
  58. {Name: "model", Args: "foo"},
  59. {Name: "message", Args: "system: You are a Parser. Always Parse things."},
  60. {Name: "message", Args: "user: Hey there!"},
  61. {Name: "message", Args: "assistant: Hello, I want to parse all the things!"},
  62. }
  63. assert.Equal(t, expectedCommands, commands)
  64. }
  65. func Test_Parser_Messages_BadRole(t *testing.T) {
  66. input := `
  67. FROM foo
  68. MESSAGE badguy I'm a bad guy!
  69. `
  70. reader := strings.NewReader(input)
  71. _, err := Parse(reader)
  72. assert.ErrorContains(t, err, "role must be one of \"system\", \"user\", or \"assistant\"")
  73. }