You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.3 KiB
Go
112 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func assertError(t testing.TB, got, want error) {
|
|
t.Helper()
|
|
if got != want {
|
|
t.Errorf("got error %q want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func assertStrings(t testing.TB, got, want string) {
|
|
t.Helper()
|
|
if got != want {
|
|
t.Errorf("got %q want %q give %q", got, want, "test")
|
|
}
|
|
}
|
|
|
|
func TestSearch(t *testing.T) {
|
|
searchStr := "this is just a test"
|
|
// dictionary := map[string]string{"test": searchStr}
|
|
// use our own type
|
|
dictionary := Dictionary{"test": searchStr}
|
|
|
|
t.Run("known word", func(t *testing.T) {
|
|
got, _ := dictionary.Search("test")
|
|
want := searchStr
|
|
|
|
assertStrings(t, got, want)
|
|
})
|
|
|
|
t.Run("unknown word", func(t *testing.T) {
|
|
_, err := dictionary.Search("not-test")
|
|
|
|
assertError(t, err, ErrNotFound)
|
|
|
|
// testing for an error's string is crude since error str can be modified
|
|
// see README.md pointers_errors directory
|
|
assertStrings(t, err.Error(), ErrNotFound.Error())
|
|
})
|
|
|
|
}
|
|
|
|
func TestAdd(t *testing.T) {
|
|
|
|
t.Run("new word", func(t *testing.T) {
|
|
dictionary := Dictionary{}
|
|
word := "test"
|
|
definition := "this is just a test"
|
|
|
|
dictionary.Add(word, definition)
|
|
|
|
assertDefinition(t, dictionary, word, definition)
|
|
|
|
})
|
|
|
|
t.Run("new word", func(t *testing.T) {
|
|
word := "test"
|
|
definition := "this is just a test"
|
|
dictionary := Dictionary{word: definition}
|
|
|
|
err := dictionary.Add(word, definition)
|
|
|
|
assertError(t, err, ErrWordExists)
|
|
assertDefinition(t, dictionary, word, definition)
|
|
})
|
|
|
|
}
|
|
|
|
func assertDefinition(t testing.TB, dictionary Dictionary, word, definition string) {
|
|
t.Helper()
|
|
|
|
got, err := dictionary.Search(word)
|
|
if err != nil {
|
|
t.Fatal("should find added word:", err)
|
|
}
|
|
assertStrings(t, got, definition)
|
|
|
|
}
|
|
|
|
func TestUpdate(t *testing.T) {
|
|
updateStr := "Don't build the Torment Nexus!"
|
|
|
|
t.Run("update works", func(t *testing.T) {
|
|
dictionary := Dictionary{"test": "this is just a test"}
|
|
|
|
dictionary.Update("test", updateStr)
|
|
|
|
assertDefinition(t, dictionary, "test", updateStr)
|
|
})
|
|
|
|
t.Run("key does not exist", func(t *testing.T) {
|
|
dictionary := Dictionary{}
|
|
|
|
err := dictionary.Update("test", updateStr)
|
|
|
|
assertError(t, err, ErrWordDoesNotExist)
|
|
})
|
|
}
|
|
|
|
func TestDelete(t *testing.T) {
|
|
dictionary := Dictionary{"test": "Don't build the Torment Nexus!"}
|
|
|
|
dictionary.Delete("test")
|
|
|
|
_, err := dictionary.Search("test")
|
|
|
|
assertError(t, err, ErrNotFound)
|
|
}
|