2015-12-10 22:27:03 +01:00
|
|
|
package sql
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"testing"
|
2015-12-11 02:28:18 +01:00
|
|
|
"time"
|
2015-12-10 22:27:03 +01:00
|
|
|
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
var store Store
|
|
|
|
|
|
|
|
func (s *Store) init() (dirName string, err error) {
|
|
|
|
|
|
|
|
dirName, err = ioutil.TempDir("", "piken")
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
databaseName := path.Join(dirName, "piken.sqlite3")
|
|
|
|
|
|
|
|
if err := s.Open(databaseName); err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
2015-12-10 22:27:03 +01:00
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
return dirName, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Insert some data for testing.
|
|
|
|
func (s *Store) fixture() {
|
|
|
|
s.db.Exec(`INSERT INTO unicode_data (codepoint, name, category)
|
2015-12-10 22:27:03 +01:00
|
|
|
VALUES ('1F60E', 'SMILING FACE WITH SUNGLASSES', 'So')`)
|
2015-12-11 02:10:10 +01:00
|
|
|
s.db.Exec(`INSERT INTO unicode_data (codepoint, name, category)
|
2015-12-10 22:27:03 +01:00
|
|
|
VALUES ('1F602', 'FACE WITH TEARS OF JOY', 'So')`)
|
2015-12-11 02:10:10 +01:00
|
|
|
s.db.Exec(`INSERT INTO unicode_data (codepoint, name, category)
|
2015-12-10 22:27:03 +01:00
|
|
|
VALUES ('1F4D7', 'GREEN BOOK', 'So')`)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSearch(t *testing.T) {
|
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
dirName, err := store.init()
|
2015-12-10 22:27:03 +01:00
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
2015-12-11 02:10:10 +01:00
|
|
|
defer os.RemoveAll(dirName)
|
|
|
|
defer store.Close()
|
2015-12-10 22:27:03 +01:00
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
store.fixture()
|
2015-12-10 22:27:03 +01:00
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
data, err := store.SearchUnicode("cat")
|
2015-12-10 22:27:03 +01:00
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
assert.Equal(t, data, []UnicodeData(nil))
|
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
data, err = store.SearchUnicode("book")
|
2015-12-10 22:27:03 +01:00
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
assert.Equal(t, len(data), 1)
|
|
|
|
assert.Equal(t, data[0].CodePoint, "1F4D7")
|
|
|
|
assert.Equal(t, data[0].Name, "GREEN BOOK")
|
|
|
|
assert.Equal(t, data[0].Category, "So")
|
|
|
|
|
|
|
|
// Search is case insensitive
|
2015-12-11 02:10:10 +01:00
|
|
|
data, err = store.SearchUnicode("fAcE")
|
2015-12-10 22:27:03 +01:00
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
assert.Equal(t, len(data), 2)
|
|
|
|
assert.Equal(t, data[0].CodePoint, "1F60E")
|
|
|
|
assert.Equal(t, data[0].Name, "SMILING FACE WITH SUNGLASSES")
|
|
|
|
assert.Equal(t, data[0].Category, "So")
|
|
|
|
assert.Equal(t, data[1].CodePoint, "1F602")
|
|
|
|
assert.Equal(t, data[1].Name, "FACE WITH TEARS OF JOY")
|
|
|
|
assert.Equal(t, data[1].Category, "So")
|
|
|
|
|
2015-12-11 02:10:10 +01:00
|
|
|
data, err = store.SearchUnicode("face NOT sunglasses")
|
2015-12-10 22:27:03 +01:00
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
assert.Equal(t, len(data), 1)
|
|
|
|
assert.Equal(t, data[0].CodePoint, "1F602")
|
|
|
|
assert.Equal(t, data[0].Name, "FACE WITH TEARS OF JOY")
|
|
|
|
assert.Equal(t, data[0].Category, "So")
|
|
|
|
}
|
2015-12-11 02:28:18 +01:00
|
|
|
|
|
|
|
func TestLastUpdate(t *testing.T) {
|
|
|
|
dirName, err := store.init()
|
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
defer os.RemoveAll(dirName)
|
|
|
|
defer store.Close()
|
|
|
|
|
|
|
|
updateTime, err := store.GetLastUpdate("test.txt")
|
|
|
|
if err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
assert.Equal(t, updateTime, time.Unix(0, 0))
|
|
|
|
|
|
|
|
testTime, _ := time.Parse("2006-Jan-02", "1993-Jan-25")
|
|
|
|
if err := store.CreateLastUpdate("test.txt", testTime); err != nil {
|
|
|
|
assert.Error(t, err)
|
|
|
|
}
|
|
|
|
updateTime, err = store.GetLastUpdate("test.txt")
|
|
|
|
assert.Equal(t, updateTime, testTime)
|
|
|
|
|
|
|
|
}
|