1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
package command
import (
"bytes"
"testing"
"github.com/ProtonMail/gluon/rfcparser"
"github.com/stretchr/testify/require"
)
func TestParser_IDCommandGet(t *testing.T) {
input := toIMAPLine(`tag ID NIL`)
s := rfcparser.NewScanner(bytes.NewReader(input))
p := NewParser(s)
expected := Command{Tag: "tag", Payload: &IDGet{}}
cmd, err := p.Parse()
require.NoError(t, err)
require.Equal(t, expected, cmd)
require.Equal(t, "id", p.LastParsedCommand())
require.Equal(t, "tag", p.LastParsedTag())
}
func TestParser_IDCommandSetOne(t *testing.T) {
input := toIMAPLine(`tag ID ("foo" "bar")`)
s := rfcparser.NewScanner(bytes.NewReader(input))
p := NewParser(s)
expected := Command{Tag: "tag", Payload: &IDSet{Values: map[string]string{"foo": "bar"}}}
cmd, err := p.Parse()
require.NoError(t, err)
require.Equal(t, expected, cmd)
require.Equal(t, "id", p.LastParsedCommand())
require.Equal(t, "tag", p.LastParsedTag())
}
func TestParser_IDCommandSetEmpty(t *testing.T) {
expected := Command{Tag: "tag", Payload: &IDSet{
Values: map[string]string{},
}}
cmd, err := testParseCommand(`tag ID ()`)
require.NoError(t, err)
require.Equal(t, expected, cmd)
}
func TestParser_IDCommandSetMany(t *testing.T) {
expected := Command{Tag: "tag", Payload: &IDSet{
Values: map[string]string{
"foo": "bar",
"a": "",
"c": "d",
},
}}
cmd, err := testParseCommand(`tag ID ("foo" "bar" "a" NIL "c" "d")`)
require.NoError(t, err)
require.Equal(t, expected, cmd)
}
func TestParser_IDCommandFailures(t *testing.T) {
inputs := []string{
"tag ID",
"tag ID ",
"tag ID N",
"tag ID (",
`tag ID ("foo")`,
`tag ID ("foo" )`,
`tag ID ("foo""bar")`,
`tag ID (nil nil)`,
`tag ID ("foo" "bar"`,
`tag ID ("foo" "bar" "z")`,
}
for _, i := range inputs {
_, err := testParseCommand(i)
require.Error(t, err)
}
}
|