1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package ini
- import (
- "reflect"
- "strings"
- "testing"
- )
- func TestLoad(t *testing.T) {
- src := `
- # Comments are ignored
- herp = derp
- [foo]
- hello=world
- whitespace should = not matter
- ; sneaky semicolon-style comment
- multiple = equals = signs
- [bar]
- this = that`
- file, err := Load(strings.NewReader(src))
- if err != nil {
- t.Fatal(err)
- }
- check := func(section, key, expect string) {
- if value, _ := file.Get(section, key); value != expect {
- t.Errorf("Get(%q, %q): expected %q, got %q", section, key, expect, value)
- }
- }
- check("", "herp", "derp")
- check("foo", "hello", "world")
- check("foo", "whitespace should", "not matter")
- check("foo", "multiple", "equals = signs")
- check("bar", "this", "that")
- }
- func TestSyntaxError(t *testing.T) {
- src := `
- # Line 2
- [foo]
- bar = baz
- # Here's an error on line 6:
- wut?
- herp = derp`
- _, err := Load(strings.NewReader(src))
- t.Logf("%T: %v", err, err)
- if err == nil {
- t.Fatal("expected an error, got nil")
- }
- syntaxErr, ok := err.(ErrSyntax)
- if !ok {
- t.Fatal("expected an error of type ErrSyntax")
- }
- if syntaxErr.Line != 6 {
- t.Fatal("incorrect line number")
- }
- if syntaxErr.Source != "wut?" {
- t.Fatal("incorrect source")
- }
- }
- func TestDefinedSectionBehaviour(t *testing.T) {
- check := func(src string, expect File) {
- file, err := Load(strings.NewReader(src))
- if err != nil {
- t.Fatal(err)
- }
- if !reflect.DeepEqual(file, expect) {
- t.Errorf("expected %v, got %v", expect, file)
- }
- }
- // No sections for an empty file
- check("", File{})
- // Default section only if there are actually values for it
- check("foo=bar", File{"": {"foo": "bar"}})
- // User-defined sections should always be present, even if empty
- check("[a]\n[b]\nfoo=bar", File{
- "a": {},
- "b": {"foo": "bar"},
- })
- check("foo=bar\n[a]\nthis=that", File{
- "": {"foo": "bar"},
- "a": {"this": "that"},
- })
- }
|