summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go')
-rw-r--r--vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go b/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go
index b241ad1d4..da3830a79 100644
--- a/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go
+++ b/vendor/github.com/nicksnyder/go-i18n/i18n/bundle/bundle_test.go
@@ -2,6 +2,8 @@ package bundle
import (
"fmt"
+ "strconv"
+ "sync"
"testing"
"reflect"
@@ -160,6 +162,59 @@ func TestTfuncAndLanguage(t *testing.T) {
}
}
+func TestConcurrent(t *testing.T) {
+ b := New()
+ // bootstrap bundle
+ translationID := "translation_id" // +1
+ englishLanguage := languageWithTag("en-US")
+ addFakeTranslation(t, b, englishLanguage, translationID)
+
+ tf, err := b.Tfunc(englishLanguage.Tag)
+ if err != nil {
+ t.Errorf("Tfunc(%v) = error{%q}; expected no error", []string{englishLanguage.Tag}, err)
+ }
+
+ const iterations = 1000
+ var wg sync.WaitGroup
+ wg.Add(iterations)
+
+ // Using go routines insert 1000 ints into our map.
+ go func() {
+ for i := 0; i < iterations/2; i++ {
+ // Add item to map.
+ translationID := strconv.FormatInt(int64(i), 10)
+ addFakeTranslation(t, b, englishLanguage, translationID)
+
+ // Retrieve item from map.
+ tf(translationID)
+
+ wg.Done()
+ } // Call go routine with current index.
+ }()
+
+ go func() {
+ for i := iterations / 2; i < iterations; i++ {
+ // Add item to map.
+ translationID := strconv.FormatInt(int64(i), 10)
+ addFakeTranslation(t, b, englishLanguage, translationID)
+
+ // Retrieve item from map.
+ tf(translationID)
+
+ wg.Done()
+ } // Call go routine with current index.
+ }()
+
+ // Wait for all go routines to finish.
+ wg.Wait()
+
+ // Make sure map contains 1000+1 elements.
+ count := len(b.Translations()[englishLanguage.Tag])
+ if count != iterations+1 {
+ t.Error("Expecting 1001 elements, got", count)
+ }
+}
+
func addFakeTranslation(t *testing.T, b *Bundle, lang *language.Language, translationID string) string {
translation := fakeTranslation(lang, translationID)
b.AddTranslation(lang, testNewTranslation(t, map[string]interface{}{