-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtranslator_test.go
More file actions
128 lines (105 loc) · 3.81 KB
/
Copy pathtranslator_test.go
File metadata and controls
128 lines (105 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Copyright 2021 Hyperscale. All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package translation
import (
"context"
"testing"
"github.com/hyperscale-stack/locale"
"github.com/stretchr/testify/assert"
"golang.org/x/text/language"
"golang.org/x/text/message/catalog"
)
func tagToContext(tag language.Tag) context.Context {
ctx := context.Background()
return locale.ToContext(ctx, tag)
}
func TestTranslator(t *testing.T) {
c := catalog.NewBuilder(catalog.Fallback(language.English))
c.SetString(language.English, "Hello World", "Hello World")
c.SetString(language.French, "Hello World", "Bonjour le monde")
trans := New([]language.Tag{language.English, language.French}, WithCatalog(c))
for _, item := range []struct {
locale language.Tag
expected language.Tag
}{
{
locale: language.Norwegian,
expected: language.English,
},
{
locale: language.French,
expected: language.French,
},
{
locale: language.English,
expected: language.English,
},
{
locale: language.Dutch,
expected: language.English,
},
} {
assert.Equal(t, item.expected, trans.GetSupportedLocale(item.locale))
}
assert.Equal(t, "Bonjour le monde", trans.Translate(tagToContext(language.French), "Hello World"))
assert.Equal(t, "Hello World", trans.Translate(tagToContext(language.English), "Hello World"))
assert.Equal(t, "Hello World", trans.Translate(tagToContext(language.Italian), "Hello World"))
}
func TestTranslatorWithDefaultLocale(t *testing.T) {
c := catalog.NewBuilder(catalog.Fallback(language.English))
c.SetString(language.English, "Hello World", "Hello World")
c.SetString(language.French, "Hello World", "Bonjour le monde")
trans := New([]language.Tag{language.English, language.French}, WithCatalog(c), WithDefaultLocale(language.French))
for _, item := range []struct {
locale language.Tag
expected language.Tag
}{
{
locale: language.Norwegian,
expected: language.French,
},
{
locale: language.French,
expected: language.French,
},
{
locale: language.English,
expected: language.English,
},
{
locale: language.Dutch,
expected: language.French,
},
} {
assert.Equal(t, item.expected, trans.GetSupportedLocale(item.locale))
}
assert.Equal(t, "Bonjour le monde", trans.Translate(tagToContext(language.French), "Hello World"))
assert.Equal(t, "Hello World", trans.Translate(tagToContext(language.English), "Hello World"))
assert.Equal(t, "Bonjour le monde", trans.Translate(tagToContext(language.Italian), "Hello World"))
}
func TestTranslatorPlural(t *testing.T) {
trans := New([]language.Tag{language.English, language.French})
totalBookCount := 1
assert.Equal(t, "One book available", trans.Translate(tagToContext(language.English), "%d books available", totalBookCount))
assert.Equal(t, "Un livre disponible", trans.Translate(tagToContext(language.French), "%d books available", totalBookCount))
totalBookCount += 1
assert.Equal(t, "2 books available", trans.Translate(tagToContext(language.English), "%d books available", totalBookCount))
assert.Equal(t, "2 livres disponibles", trans.Translate(tagToContext(language.French), "%d books available", totalBookCount))
}
func BenchmarkGetSupportedLocale(b *testing.B) {
trans := New([]language.Tag{language.English, language.French})
for i := 0; i < b.N; i++ {
trans.GetSupportedLocale(language.French)
}
}
func BenchmarkTranslate(b *testing.B) {
c := catalog.NewBuilder(catalog.Fallback(language.English))
c.SetString(language.English, "Hello World", "Hello World")
c.SetString(language.French, "Hello World", "Bonjour le monde")
trans := New([]language.Tag{language.English, language.French}, WithCatalog(c))
ctx := tagToContext(language.French)
for i := 0; i < b.N; i++ {
trans.Translate(ctx, "Hello World")
}
}