955f7683af
If an error occurs when parsing the content-type, check if the content-type is quoted; if so, remove quotes. If this is not the case, then return a text/plain content-type as a sane fallback option, so that the message can be at least viewed in plaintext. Fixes: https://todo.sr.ht/~rjarry/aerc/44 Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package lib
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"git.sr.ht/~rjarry/aerc/models"
|
|
)
|
|
|
|
func TestMessageInfoParser(t *testing.T) {
|
|
rootDir := "testdata/message/valid"
|
|
msgFiles, err := ioutil.ReadDir(rootDir)
|
|
die(err)
|
|
|
|
for _, fi := range msgFiles {
|
|
if fi.IsDir() {
|
|
continue
|
|
}
|
|
|
|
p := fi.Name()
|
|
t.Run(p, func(t *testing.T) {
|
|
m := newMockRawMessageFromPath(filepath.Join(rootDir, p))
|
|
mi, err := MessageInfo(m)
|
|
if err != nil {
|
|
t.Fatal("Failed to create MessageInfo with:", err)
|
|
}
|
|
|
|
if perr := mi.Error; perr != nil {
|
|
t.Fatal("Expected no parsing error, but got:", mi.Error)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMessageInfoHandledError(t *testing.T) {
|
|
rootDir := "testdata/message/invalid"
|
|
msgFiles, err := ioutil.ReadDir(rootDir)
|
|
die(err)
|
|
|
|
for _, fi := range msgFiles {
|
|
if fi.IsDir() {
|
|
continue
|
|
}
|
|
|
|
p := fi.Name()
|
|
t.Run(p, func(t *testing.T) {
|
|
m := newMockRawMessageFromPath(filepath.Join(rootDir, p))
|
|
mi, err := MessageInfo(m)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if perr := mi.Error; perr == nil {
|
|
t.Fatal("Expected MessageInfo.Error, got none")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
type mockRawMessage struct {
|
|
path string
|
|
}
|
|
|
|
func newMockRawMessageFromPath(p string) *mockRawMessage {
|
|
return &mockRawMessage{
|
|
path: p,
|
|
}
|
|
}
|
|
|
|
func (m *mockRawMessage) NewReader() (io.ReadCloser, error) {
|
|
return os.Open(m.path)
|
|
}
|
|
func (m *mockRawMessage) ModelFlags() ([]models.Flag, error) { return nil, nil }
|
|
func (m *mockRawMessage) Labels() ([]string, error) { return nil, nil }
|
|
func (m *mockRawMessage) UID() uint32 { return 0 }
|
|
|
|
func die(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|