🏷️ Created Language domain with tests
This commit is contained in:
parent
a756c76631
commit
104814a633
|
@ -0,0 +1,58 @@
|
|||
package domain
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/language/display"
|
||||
)
|
||||
|
||||
type Language struct {
|
||||
code string
|
||||
lang string
|
||||
name string
|
||||
dir string
|
||||
}
|
||||
|
||||
func NewLanguage(tag language.Tag) Language {
|
||||
out := Language{dir: "ltr"}
|
||||
|
||||
switch tag {
|
||||
case language.Und:
|
||||
return out
|
||||
case language.Arabic, language.Persian, language.Hebrew, language.Urdu:
|
||||
out.dir = "rtl"
|
||||
}
|
||||
|
||||
out.name = strings.ToLower(display.Self.Name(tag))
|
||||
out.code = tag.String()
|
||||
|
||||
base, _ := tag.Base()
|
||||
out.lang = base.String()
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (l Language) Lang() string {
|
||||
return l.lang
|
||||
}
|
||||
|
||||
func (l Language) Code() string {
|
||||
return l.code
|
||||
}
|
||||
|
||||
func (l Language) Dir() string {
|
||||
return l.dir
|
||||
}
|
||||
|
||||
func (l Language) Name() string {
|
||||
return l.name
|
||||
}
|
||||
|
||||
func (l Language) String() string {
|
||||
return l.code
|
||||
}
|
||||
|
||||
func (l Language) GoString() string {
|
||||
return "domain.Language(" + l.code + ")"
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package domain_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
|
||||
"source.toby3d.me/toby3d/home/internal/domain"
|
||||
)
|
||||
|
||||
func TestLanguage_Lang(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for name, tc := range map[string]struct {
|
||||
input language.Tag
|
||||
expect string
|
||||
}{
|
||||
"2letter": {language.Make("en"), "en"},
|
||||
"3letter": {language.Make("eng"), "en"},
|
||||
"region": {language.Make("en-US"), "en"},
|
||||
"und": {language.Und, ""},
|
||||
} {
|
||||
name, tc := name, tc
|
||||
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if actual := domain.NewLanguage(tc.input).Lang(); actual != tc.expect {
|
||||
t.Errorf("Lang() = %s, want %s", actual, tc.expect)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestLanguage_Code(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for name, tc := range map[string]struct {
|
||||
input language.Tag
|
||||
expect string
|
||||
}{
|
||||
"2letter": {language.Make("en"), "en"},
|
||||
"3letter": {language.Make("eng"), "en"},
|
||||
"region": {language.Make("en-US"), "en-US"},
|
||||
"und": {language.Und, ""},
|
||||
} {
|
||||
name, tc := name, tc
|
||||
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if actual := domain.NewLanguage(tc.input).Code(); actual != tc.expect {
|
||||
t.Errorf("Code() = %s, want %s", actual, tc.expect)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestLanguage_Dir(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for name, tc := range map[string]struct {
|
||||
input language.Tag
|
||||
expect string
|
||||
}{
|
||||
"2letter": {language.Make("en"), "ltr"},
|
||||
"rtl": {language.Urdu, "rtl"},
|
||||
"3letter": {language.Make("eng"), "ltr"},
|
||||
"region": {language.Make("en-US"), "ltr"},
|
||||
"und": {language.Und, "ltr"},
|
||||
} {
|
||||
name, tc := name, tc
|
||||
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if actual := domain.NewLanguage(tc.input).Dir(); actual != tc.expect {
|
||||
t.Errorf("Dir() = %s, want %s", actual, tc.expect)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestLanguage_Name(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
for name, tc := range map[string]struct {
|
||||
input language.Tag
|
||||
expect string
|
||||
}{
|
||||
"localized": {language.Russian, "русский"},
|
||||
"2letter": {language.Make("en"), "english"},
|
||||
"3letter": {language.Make("eng"), "english"},
|
||||
"region": {language.Make("en-US"), "american english"},
|
||||
"und": {language.Und, ""},
|
||||
} {
|
||||
name, tc := name, tc
|
||||
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if actual := domain.NewLanguage(tc.input).Name(); actual != tc.expect {
|
||||
t.Errorf("Name() = %s, want %s", actual, tc.expect)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue