214 lines
5.6 KiB
Go
214 lines
5.6 KiB
Go
package inflection
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
var inflections = map[string]string{
|
|
"star": "stars",
|
|
"STAR": "STARS",
|
|
"Star": "Stars",
|
|
"bus": "buses",
|
|
"fish": "fish",
|
|
"mouse": "mice",
|
|
"query": "queries",
|
|
"ability": "abilities",
|
|
"agency": "agencies",
|
|
"movie": "movies",
|
|
"archive": "archives",
|
|
"index": "indices",
|
|
"wife": "wives",
|
|
"safe": "saves",
|
|
"half": "halves",
|
|
"move": "moves",
|
|
"salesperson": "salespeople",
|
|
"person": "people",
|
|
"spokesman": "spokesmen",
|
|
"man": "men",
|
|
"woman": "women",
|
|
"basis": "bases",
|
|
"diagnosis": "diagnoses",
|
|
"diagnosis_a": "diagnosis_as",
|
|
"datum": "data",
|
|
"medium": "media",
|
|
"stadium": "stadia",
|
|
"analysis": "analyses",
|
|
"node_child": "node_children",
|
|
"child": "children",
|
|
"experience": "experiences",
|
|
"day": "days",
|
|
"comment": "comments",
|
|
"foobar": "foobars",
|
|
"newsletter": "newsletters",
|
|
"old_news": "old_news",
|
|
"news": "news",
|
|
"series": "series",
|
|
"species": "species",
|
|
"quiz": "quizzes",
|
|
"perspective": "perspectives",
|
|
"ox": "oxen",
|
|
"photo": "photos",
|
|
"buffalo": "buffaloes",
|
|
"tomato": "tomatoes",
|
|
"dwarf": "dwarves",
|
|
"elf": "elves",
|
|
"information": "information",
|
|
"equipment": "equipment",
|
|
"criterion": "criteria",
|
|
}
|
|
|
|
// storage is used to restore the state of the global variables
|
|
// on each test execution, to ensure no global state pollution
|
|
type storage struct {
|
|
singulars RegularSlice
|
|
plurals RegularSlice
|
|
irregulars IrregularSlice
|
|
uncountables []string
|
|
}
|
|
|
|
var backup = storage{}
|
|
|
|
func init() {
|
|
AddIrregular("criterion", "criteria")
|
|
copy(backup.singulars, singularInflections)
|
|
copy(backup.plurals, pluralInflections)
|
|
copy(backup.irregulars, irregularInflections)
|
|
copy(backup.uncountables, uncountableInflections)
|
|
}
|
|
|
|
func restore() {
|
|
copy(singularInflections, backup.singulars)
|
|
copy(pluralInflections, backup.plurals)
|
|
copy(irregularInflections, backup.irregulars)
|
|
copy(uncountableInflections, backup.uncountables)
|
|
}
|
|
|
|
func TestPlural(t *testing.T) {
|
|
for key, value := range inflections {
|
|
if v := Plural(strings.ToUpper(key)); v != strings.ToUpper(value) {
|
|
t.Errorf("%v's plural should be %v, but got %v", strings.ToUpper(key), strings.ToUpper(value), v)
|
|
}
|
|
|
|
if v := Plural(strings.Title(key)); v != strings.Title(value) {
|
|
t.Errorf("%v's plural should be %v, but got %v", strings.Title(key), strings.Title(value), v)
|
|
}
|
|
|
|
if v := Plural(key); v != value {
|
|
t.Errorf("%v's plural should be %v, but got %v", key, value, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSingular(t *testing.T) {
|
|
for key, value := range inflections {
|
|
if v := Singular(strings.ToUpper(value)); v != strings.ToUpper(key) {
|
|
t.Errorf("%v's singular should be %v, but got %v", strings.ToUpper(value), strings.ToUpper(key), v)
|
|
}
|
|
|
|
if v := Singular(strings.Title(value)); v != strings.Title(key) {
|
|
t.Errorf("%v's singular should be %v, but got %v", strings.Title(value), strings.Title(key), v)
|
|
}
|
|
|
|
if v := Singular(value); v != key {
|
|
t.Errorf("%v's singular should be %v, but got %v", value, key, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAddPlural(t *testing.T) {
|
|
defer restore()
|
|
ln := len(pluralInflections)
|
|
AddPlural("", "")
|
|
if ln+1 != len(pluralInflections) {
|
|
t.Errorf("Expected len %d, got %d", ln+1, len(pluralInflections))
|
|
}
|
|
}
|
|
|
|
func TestAddSingular(t *testing.T) {
|
|
defer restore()
|
|
ln := len(singularInflections)
|
|
AddSingular("", "")
|
|
if ln+1 != len(singularInflections) {
|
|
t.Errorf("Expected len %d, got %d", ln+1, len(singularInflections))
|
|
}
|
|
}
|
|
|
|
func TestAddIrregular(t *testing.T) {
|
|
defer restore()
|
|
ln := len(irregularInflections)
|
|
AddIrregular("", "")
|
|
if ln+1 != len(irregularInflections) {
|
|
t.Errorf("Expected len %d, got %d", ln+1, len(irregularInflections))
|
|
}
|
|
}
|
|
|
|
func TestAddUncountable(t *testing.T) {
|
|
defer restore()
|
|
ln := len(uncountableInflections)
|
|
AddUncountable("", "")
|
|
if ln+2 != len(uncountableInflections) {
|
|
t.Errorf("Expected len %d, got %d", ln+2, len(uncountableInflections))
|
|
}
|
|
}
|
|
|
|
func TestGetPlural(t *testing.T) {
|
|
plurals := GetPlural()
|
|
if len(plurals) != len(pluralInflections) {
|
|
t.Errorf("Expected len %d, got %d", len(plurals), len(pluralInflections))
|
|
}
|
|
}
|
|
|
|
func TestGetSingular(t *testing.T) {
|
|
singular := GetSingular()
|
|
if len(singular) != len(singularInflections) {
|
|
t.Errorf("Expected len %d, got %d", len(singular), len(singularInflections))
|
|
}
|
|
}
|
|
|
|
func TestGetIrregular(t *testing.T) {
|
|
irregular := GetIrregular()
|
|
if len(irregular) != len(irregularInflections) {
|
|
t.Errorf("Expected len %d, got %d", len(irregular), len(irregularInflections))
|
|
}
|
|
}
|
|
|
|
func TestGetUncountable(t *testing.T) {
|
|
uncountables := GetUncountable()
|
|
if len(uncountables) != len(uncountableInflections) {
|
|
t.Errorf("Expected len %d, got %d", len(uncountables), len(uncountableInflections))
|
|
}
|
|
}
|
|
|
|
func TestSetPlural(t *testing.T) {
|
|
defer restore()
|
|
SetPlural(RegularSlice{{}, {}})
|
|
if len(pluralInflections) != 2 {
|
|
t.Errorf("Expected len 2, got %d", len(pluralInflections))
|
|
}
|
|
}
|
|
|
|
func TestSetSingular(t *testing.T) {
|
|
defer restore()
|
|
SetSingular(RegularSlice{{}, {}})
|
|
if len(singularInflections) != 2 {
|
|
t.Errorf("Expected len 2, got %d", len(singularInflections))
|
|
}
|
|
}
|
|
|
|
func TestSetIrregular(t *testing.T) {
|
|
defer restore()
|
|
SetIrregular(IrregularSlice{{}, {}})
|
|
if len(irregularInflections) != 2 {
|
|
t.Errorf("Expected len 2, got %d", len(irregularInflections))
|
|
}
|
|
}
|
|
|
|
func TestSetUncountable(t *testing.T) {
|
|
defer restore()
|
|
SetUncountable([]string{"", ""})
|
|
if len(uncountableInflections) != 2 {
|
|
t.Errorf("Expected len 2, got %d", len(uncountableInflections))
|
|
}
|
|
}
|