191 lines
5 KiB
Go
191 lines
5 KiB
Go
package ini
|
|
|
|
import (
|
|
"bufio"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
var (
|
|
dict Dict
|
|
err error
|
|
)
|
|
|
|
func init() {
|
|
dict, err = Load("example.ini")
|
|
}
|
|
|
|
func TestLoad(t *testing.T) {
|
|
if err != nil {
|
|
t.Error("Example: load error:", err)
|
|
}
|
|
}
|
|
|
|
func TestLoadFileWithSpaces(t *testing.T) {
|
|
if err := ioutil.WriteFile("testLoadFileWithSpaces.ini", []byte(" "), 0777); err != nil {
|
|
t.Error("Unable to write test file")
|
|
}
|
|
defer os.Remove("testLoadFileWithSpaces.ini")
|
|
|
|
if _, err := Load("testLoadFileWithSpaces.ini"); err != nil {
|
|
t.Error("Load: Couldn't load ini file with line consisting only of spaces.")
|
|
}
|
|
}
|
|
|
|
func TestWrite(t *testing.T) {
|
|
d, err := Load("empty.ini")
|
|
if err != nil {
|
|
t.Error("Example: load error:", err)
|
|
}
|
|
d.SetString("", "key", "value")
|
|
tempFile, err := ioutil.TempFile("", "")
|
|
if err != nil {
|
|
t.Error("Write: Couldn't create temp file.", err)
|
|
}
|
|
err = Write(tempFile.Name(), &d)
|
|
if err != nil {
|
|
t.Error("Write: Couldn't write to temp config file.", err)
|
|
}
|
|
contents, err := ioutil.ReadFile(tempFile.Name())
|
|
if err != nil {
|
|
t.Error("Write: Couldn't read from the temp config file.", err)
|
|
}
|
|
if string(contents) != "key = value\n\n" {
|
|
t.Error("Write: Contents of the config file doesn't match the expected.")
|
|
}
|
|
}
|
|
|
|
func TestGetBool(t *testing.T) {
|
|
b, found := dict.GetBool("pizza", "ham")
|
|
if !found || !b {
|
|
t.Error("Example: parse error for key ham of section pizza.")
|
|
}
|
|
b, found = dict.GetBool("pizza", "mushrooms")
|
|
if !found || !b {
|
|
t.Error("Example: parse error for key mushrooms of section pizza.")
|
|
}
|
|
b, found = dict.GetBool("pizza", "capres")
|
|
if !found || b {
|
|
t.Error("Example: parse error for key capres of section pizza.")
|
|
}
|
|
b, found = dict.GetBool("pizza", "cheese")
|
|
if !found || b {
|
|
t.Error("Example: parse error for key cheese of section pizza.")
|
|
}
|
|
}
|
|
|
|
func TestGetStringIntAndDouble(t *testing.T) {
|
|
str, found := dict.GetString("wine", "grape")
|
|
if !found || str != "Cabernet Sauvignon" {
|
|
t.Error("Example: parse error for key grape of section wine.")
|
|
}
|
|
i, found := dict.GetInt("wine", "year")
|
|
if !found || i != 1989 {
|
|
t.Error("Example: parse error for key year of section wine.")
|
|
}
|
|
str, found = dict.GetString("wine", "country")
|
|
if !found || str != "Spain" {
|
|
t.Error("Example: parse error for key grape of section wine.")
|
|
}
|
|
d, found := dict.GetDouble("wine", "alcohol")
|
|
if !found || d != 12.5 {
|
|
t.Error("Example: parse error for key grape of section wine.")
|
|
}
|
|
}
|
|
|
|
func TestSetBoolAndStringAndIntAndDouble(t *testing.T) {
|
|
dict.SetBool("pizza", "ham", false)
|
|
b, found := dict.GetBool("pizza", "ham")
|
|
if !found || b {
|
|
t.Error("Example: bool set error for key ham of section pizza.")
|
|
}
|
|
dict.SetString("pizza", "ham", "no")
|
|
n, found := dict.GetString("pizza", "ham")
|
|
if !found || n != "no" {
|
|
t.Error("Example: string set error for key ham of section pizza.")
|
|
}
|
|
dict.SetInt("wine", "year", 1978)
|
|
i, found := dict.GetInt("wine", "year")
|
|
if !found || i != 1978 {
|
|
t.Error("Example: int set error for key year of section wine.")
|
|
}
|
|
dict.SetDouble("wine", "not-exists", 5.6)
|
|
d, found := dict.GetDouble("wine", "not-exists")
|
|
if !found || d != 5.6 {
|
|
t.Error("Example: float set error for not existing key for wine.")
|
|
}
|
|
}
|
|
|
|
func TestDelete(t *testing.T) {
|
|
d, err := Load("empty.ini")
|
|
if err != nil {
|
|
t.Error("Example: load error:", err)
|
|
}
|
|
d.SetString("pizza", "ham", "yes")
|
|
d.Delete("pizza", "ham")
|
|
_, found := d.GetString("pizza", "ham")
|
|
if found {
|
|
t.Error("Example: delete error for key ham of section pizza.")
|
|
}
|
|
if len(d.GetSections()) > 1 {
|
|
t.Error("Only a single section should exist after deletion.")
|
|
}
|
|
}
|
|
|
|
func TestGetNotExist(t *testing.T) {
|
|
_, found := dict.GetString("not", "exist")
|
|
if found {
|
|
t.Error("There is no key exist of section not.")
|
|
}
|
|
}
|
|
|
|
func TestGetSections(t *testing.T) {
|
|
sections := dict.GetSections()
|
|
if len(sections) != 3 {
|
|
t.Error("The number of sections is wrong:", len(sections))
|
|
}
|
|
for _, section := range sections {
|
|
if section != "" && section != "pizza" && section != "wine" {
|
|
t.Errorf("Section '%s' should not be exist.", section)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestString(t *testing.T) {
|
|
d, err := Load("empty.ini")
|
|
if err != nil {
|
|
t.Error("Example: load error:", err)
|
|
}
|
|
d.SetBool("", "key1", true)
|
|
d.SetString("section1", "key1", "value2")
|
|
d.SetInt("section1", "key2", 5)
|
|
d.SetDouble("section1", "key3", 1.3)
|
|
d.SetDouble("section2", "key1", 5.0)
|
|
reader := strings.NewReader(d.String())
|
|
d2, err := LoadReader(bufio.NewReader(reader))
|
|
if err != nil {
|
|
t.Error("Example: load error:", err)
|
|
}
|
|
b, found := d2.GetBool("", "key1")
|
|
if !found || !b {
|
|
t.Errorf("Stringify failed for key1")
|
|
}
|
|
s, found := d2.GetString("section1", "key1")
|
|
if !found || s != "value2" {
|
|
t.Error("Stringify failed for section1, key1")
|
|
}
|
|
i, found := d2.GetInt("section1", "key2")
|
|
if !found || i != 5 {
|
|
t.Error("Stringify failed for section1, key2")
|
|
}
|
|
db, found := d2.GetDouble("section1", "key3")
|
|
if !found || db != 1.3 {
|
|
t.Error("Stringify failed for section1, key3")
|
|
}
|
|
db, found = d2.GetDouble("section2", "key1")
|
|
if !found || db != 5.0 {
|
|
t.Error("Stringify failed for section2, key1")
|
|
}
|
|
}
|