gosuki/pkg/browsers/mozilla/prefs_test.go

262 lines
4.6 KiB
Go
Raw Normal View History

2018-12-03 18:51:01 +00:00
package mozilla
import (
2018-12-04 17:06:30 +00:00
"bufio"
2018-12-03 18:51:01 +00:00
"fmt"
"io/ioutil"
"os"
"testing"
2018-12-04 17:06:30 +00:00
"time"
2018-12-03 18:51:01 +00:00
)
const (
TestPrefBool = "test.pref.bool"
TestPrefNumber = "test.pref.number"
TestPrefString = "test.pref.string"
TempFileName = "prefs-test.js"
)
var (
TestPrefs = map[string]Pref{
"BOOL": Pref{
name: "test.pref.bool",
value: true,
rawval: "true",
},
"TRUE": Pref{
name: "test.pref.bool.true",
value: true,
rawval: "true",
},
"FALSE": Pref{
name: "test.pref.bool.false",
value: false,
rawval: "false",
},
"NUMBER": Pref{
name: "test.pref.number",
value: 42,
rawval: "42",
},
"STRING": Pref{
name: "test.pref.string",
value: "test string",
rawval: "test string",
},
}
TestPrefsBool = map[string]Pref{
"TRUE": TestPrefs["TRUE"],
"FALSE": TestPrefs["FALE"],
}
prefsTempFile *os.File
)
type Pref struct {
name string
value interface{}
rawval string
}
func tempFile(name string) *os.File {
f, err := ioutil.TempFile("", name)
if err != nil {
panic(err)
}
return f
}
func writeTestPrefFile(f *os.File, p Pref) {
switch v := p.value.(type) {
case string:
fmt.Fprintf(f, "user_pref(\"%s\", \"%s\");\n", p.name, v)
case bool:
fmt.Fprintf(f, "user_pref(\"%s\", %t);\n", p.name, v)
case int:
fmt.Fprintf(f, "user_pref(\"%s\", %d);\n", p.name, v)
default:
fmt.Fprintf(f, "user_pref(\"%s\", %v);\n", p.name, v)
}
err := f.Sync()
if err != nil {
panic(err)
}
}
func resetTestPrefFile(f *os.File) {
err := f.Truncate(0)
if err != nil {
panic(err)
}
2018-12-04 17:06:30 +00:00
f.Seek(0, 0)
f.Sync()
2018-12-03 18:51:01 +00:00
}
func TestFindPref(t *testing.T) {
resetTestPrefFile(prefsTempFile)
for _, c := range TestPrefs {
// Write the pref to pref file
writeTestPrefFile(prefsTempFile, c)
t.Run(c.name, func(t *testing.T) {
res, err := FindPref(prefsTempFile.Name(), c.name)
if err != nil {
t.Error(err)
}
if res != c.rawval {
t.Fail()
}
})
}
}
func TestGetPrefBool(t *testing.T) {
resetTestPrefFile(prefsTempFile)
for _, c := range []string{"TRUE", "FALSE"} {
writeTestPrefFile(prefsTempFile, TestPrefs[c])
t.Run(c, func(t *testing.T) {
res, err := GetPrefBool(prefsTempFile.Name(), TestPrefs[c].name)
if err != nil {
t.Error(err)
}
if res != TestPrefs[c].value {
t.Fail()
}
})
}
// Not a boolean
writeTestPrefFile(prefsTempFile, TestPrefs["STRING"])
t.Run("NOTBOOL", func(t *testing.T) {
_, err := GetPrefBool(prefsTempFile.Name(), TestPrefs["STRING"].name)
if err != nil &&
2018-12-04 17:06:30 +00:00
err != ErrPrefNotBool {
t.Error(err)
}
})
// Should return false for undefined pref
t.Run("NOTDEFINED", func(t *testing.T) {
val, err := GetPrefBool(prefsTempFile.Name(), "not.exists.bool")
if err != nil && err != ErrPrefNotFound {
2018-12-03 18:51:01 +00:00
t.Error(err)
}
2018-12-04 17:06:30 +00:00
if val != false {
t.Fail()
}
2018-12-03 18:51:01 +00:00
})
}
func TestSetPrefBool(t *testing.T) {
2018-12-04 17:06:30 +00:00
t.Run("APPEND", func(t *testing.T) {
2018-12-03 18:51:01 +00:00
2018-12-04 17:06:30 +00:00
resetTestPrefFile(prefsTempFile)
2018-12-03 18:51:01 +00:00
2018-12-04 17:06:30 +00:00
// Write some data to test the append behavior
writeTestPrefFile(prefsTempFile, TestPrefs["STRING"])
2018-12-03 18:51:01 +00:00
2018-12-04 17:06:30 +00:00
setVal, _ := TestPrefs["TRUE"].value.(bool)
2018-12-03 18:51:01 +00:00
2018-12-04 17:06:30 +00:00
err := SetPrefBool(prefsTempFile.Name(), TestPrefs["TRUE"].name, setVal)
2018-12-03 18:51:01 +00:00
2018-12-04 17:06:30 +00:00
if err != nil {
t.Error(err)
}
res, err := GetPrefBool(prefsTempFile.Name(), TestPrefs["TRUE"].name)
if err != nil {
t.Error(err)
}
if res != setVal {
t.Fail()
}
})
t.Run("REPLACE", func(t *testing.T) {
resetTestPrefFile(prefsTempFile)
scanner := bufio.NewScanner(prefsTempFile)
writeTestPrefFile(prefsTempFile, TestPrefs["STRING"])
writeTestPrefFile(prefsTempFile, TestPrefs["FALSE"])
prefsTempFile.Seek(0, 0)
// Check if line was replaces
var lines int
for scanner.Scan() {
lines++
}
err := SetPrefBool(prefsTempFile.Name(), TestPrefs["FALSE"].name, true)
if err != nil {
t.Error(err)
}
prefsTempFile.Seek(0, 0)
scanner = bufio.NewScanner(prefsTempFile)
// Check if line was replaces
for lines = 0; scanner.Scan(); {
lines++
}
if lines != 2 {
t.Error("SetPrefBool should replace existing Pref")
}
res, err := GetPrefBool(prefsTempFile.Name(), TestPrefs["FALSE"].name)
if err != nil {
t.Error(err)
}
if !res {
t.Fail()
}
time.Sleep(4 * time.Second)
})
2018-12-03 18:51:01 +00:00
}
2018-12-04 03:34:30 +00:00
func TestHasPref(t *testing.T) {
resetTestPrefFile(prefsTempFile)
writeTestPrefFile(prefsTempFile, TestPrefs["STRING"])
res, err := HasPref(prefsTempFile.Name(), TestPrefs["STRING"].name)
if err != nil {
t.Error(err)
}
if !res {
t.Fail()
}
}
2018-12-03 18:51:01 +00:00
func TestMain(m *testing.M) {
prefsTempFile = tempFile(TempFileName)
code := m.Run()
prefsTempFile.Close()
os.Remove(prefsTempFile.Name())
os.Exit(code)
}