Add key value parsing tests
This commit is contained in:
parent
a5d4cd727b
commit
73ea9d304b
170
key-value/key-value_test.go
Normal file
170
key-value/key-value_test.go
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
package keyValue
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
import "testing"
|
||||||
|
import "git.tebibyte.media/tomo/xdg/locale"
|
||||||
|
|
||||||
|
func testParseString (test *testing.T, input string, correct File) {
|
||||||
|
got, err := Parse(strings.NewReader(input))
|
||||||
|
if err != nil {
|
||||||
|
test.Fatal("Parse function returned error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fail := func (v ...any) {
|
||||||
|
test.Logf (
|
||||||
|
"\n---input file---\n%s\n---correct---\n%v\n---got---\n%v\n",
|
||||||
|
input, correct, got)
|
||||||
|
test.Log(v...)
|
||||||
|
test.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(got) != len(correct) {
|
||||||
|
fail("number of groups is different")
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, group := range correct {
|
||||||
|
gotGroup, ok := got[name]
|
||||||
|
if !ok { fail("did not get group", name) }
|
||||||
|
|
||||||
|
if len(gotGroup) != len(group) {
|
||||||
|
fail("number of entries in", name, "is different")
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, entry := range group {
|
||||||
|
gotEntry, ok := gotGroup[key]
|
||||||
|
if !ok { fail("did not get key", name, ">", key) }
|
||||||
|
|
||||||
|
if gotEntry.Value != entry.Value {
|
||||||
|
fail("value of ", name, ">", key, "is different")
|
||||||
|
}
|
||||||
|
if len(gotEntry.Localized) != len(entry.Localized) {
|
||||||
|
fail("number of localized values in", name, ">", key, "is different")
|
||||||
|
}
|
||||||
|
|
||||||
|
for loc, localized := range entry.Localized {
|
||||||
|
gotLocalized, ok := gotEntry.Localized[loc]
|
||||||
|
if !ok { fail("did not get value", name, ">", key, ">", loc) }
|
||||||
|
if gotLocalized != localized {
|
||||||
|
fail("value of", name, ">", key, ">", loc, "is different")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testEntry (value string) Entry {
|
||||||
|
entry := newEntry()
|
||||||
|
entry.Value = value
|
||||||
|
return entry
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseEmpty (test *testing.T) {
|
||||||
|
testParseString(test,
|
||||||
|
``,
|
||||||
|
File { })}
|
||||||
|
|
||||||
|
func TestParseFooReader (test *testing.T) {
|
||||||
|
// Directly from the spec
|
||||||
|
testParseString(test, `
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Foo Viewer
|
||||||
|
Comment=The best viewer for Foo objects available!
|
||||||
|
TryExec=fooview
|
||||||
|
Exec=fooview %F
|
||||||
|
Icon=fooview
|
||||||
|
MimeType=image/x-foo;
|
||||||
|
Actions=Gallery;Create;
|
||||||
|
|
||||||
|
[Desktop Action Gallery]
|
||||||
|
Exec=fooview --gallery
|
||||||
|
Name=Browse Gallery
|
||||||
|
|
||||||
|
[Desktop Action Create]
|
||||||
|
Exec=fooview --create-new
|
||||||
|
Name=Create a new Foo!
|
||||||
|
Icon=fooview-new
|
||||||
|
`,
|
||||||
|
File {
|
||||||
|
"Desktop Entry": Group {
|
||||||
|
"Version": testEntry("1.0"),
|
||||||
|
"Type": testEntry("Application"),
|
||||||
|
"Name": testEntry("Foo Viewer"),
|
||||||
|
"Comment": testEntry("The best viewer for Foo objects available!"),
|
||||||
|
"TryExec": testEntry("fooview"),
|
||||||
|
"Exec": testEntry("fooview %F"),
|
||||||
|
"Icon": testEntry("fooview"),
|
||||||
|
"MimeType": testEntry("image/x-foo;"),
|
||||||
|
"Actions": testEntry("Gallery;Create;"),
|
||||||
|
},
|
||||||
|
"Desktop Action Gallery": Group {
|
||||||
|
"Exec": testEntry("fooview --gallery"),
|
||||||
|
"Name": testEntry("Browse Gallery"),
|
||||||
|
},
|
||||||
|
"Desktop Action Create": Group {
|
||||||
|
"Exec": testEntry("fooview --create-new"),
|
||||||
|
"Name": testEntry("Create a new Foo!"),
|
||||||
|
"Icon": testEntry("fooview-new"),
|
||||||
|
},
|
||||||
|
})}
|
||||||
|
|
||||||
|
func TestParseFooReaderLocalized (test *testing.T) {
|
||||||
|
testParseString(test, `
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Foo Viewer
|
||||||
|
Comment=The best viewer for Foo objects available!
|
||||||
|
TryExec=fooview
|
||||||
|
Exec=fooview %F
|
||||||
|
Icon=fooview
|
||||||
|
MimeType=image/x-foo;
|
||||||
|
Actions=Gallery;Create;
|
||||||
|
|
||||||
|
[Desktop Action Gallery]
|
||||||
|
Exec=fooview --gallery
|
||||||
|
Name=Browse Gallery
|
||||||
|
|
||||||
|
[Desktop Action Create]
|
||||||
|
Exec=fooview --create-new
|
||||||
|
Name=Create a new Foo!
|
||||||
|
Name[en_US]=Create a new Foo!
|
||||||
|
Name[xx_XX.UTF-8]=Zweep zoop flooble glorp
|
||||||
|
Icon=fooview-new
|
||||||
|
`,
|
||||||
|
File {
|
||||||
|
"Desktop Entry": Group {
|
||||||
|
"Version": testEntry("1.0"),
|
||||||
|
"Type": testEntry("Application"),
|
||||||
|
"Name": testEntry("Foo Viewer"),
|
||||||
|
"Comment": testEntry("The best viewer for Foo objects available!"),
|
||||||
|
"TryExec": testEntry("fooview"),
|
||||||
|
"Exec": testEntry("fooview %F"),
|
||||||
|
"Icon": testEntry("fooview"),
|
||||||
|
"MimeType": testEntry("image/x-foo;"),
|
||||||
|
"Actions": testEntry("Gallery;Create;"),
|
||||||
|
},
|
||||||
|
"Desktop Action Gallery": Group {
|
||||||
|
"Exec": testEntry("fooview --gallery"),
|
||||||
|
"Name": testEntry("Browse Gallery"),
|
||||||
|
},
|
||||||
|
"Desktop Action Create": Group {
|
||||||
|
"Exec": testEntry("fooview --create-new"),
|
||||||
|
"Name": Entry {
|
||||||
|
Value: "Create a new Foo!",
|
||||||
|
Localized: map[locale.Locale] string {
|
||||||
|
locale.Locale {
|
||||||
|
Lang: "en",
|
||||||
|
Country: "US",
|
||||||
|
}: "Create a new Foo!",
|
||||||
|
locale.Locale {
|
||||||
|
Lang: "xx",
|
||||||
|
Country: "XX",
|
||||||
|
Encoding: "UTF-8",
|
||||||
|
}: "Zweep zoop flooble glorp",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"Icon": testEntry("fooview-new"),
|
||||||
|
},
|
||||||
|
})}
|
Loading…
Reference in New Issue
Block a user