From da86096e19fc58a8b796f21cc0f8089bb64ad185 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 13 Jul 2024 11:35:15 +0200 Subject: [PATCH] Add test that demonstrates bug with language auto-detection --- pkg/i18n/i18n_test.go | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/pkg/i18n/i18n_test.go b/pkg/i18n/i18n_test.go index 7023ea40a..28b96bc4f 100644 --- a/pkg/i18n/i18n_test.go +++ b/pkg/i18n/i18n_test.go @@ -2,8 +2,11 @@ package i18n import ( "fmt" + "io" + "runtime" "testing" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" ) @@ -33,3 +36,84 @@ func TestDetectLanguage(t *testing.T) { assert.EqualValues(t, s.expected, detectLanguage(s.langDetector)) } } + +// Can't use utils.NewDummyLog() because of a cyclic dependency +func newDummyLog() *logrus.Entry { + log := logrus.New() + log.Out = io.Discard + return log.WithField("test", "test") +} + +func TestNewTranslationSetFromConfig(t *testing.T) { + if runtime.GOOS == "windows" { + // These tests are based on setting the LANG environment variable, which + // isn't respected on Windows. + t.Skip("Skipping test on Windows") + } + + scenarios := []struct { + name string + configLanguage string + envLanguage string + expected string + expectedErr bool + }{ + { + name: "configLanguage is nl", + configLanguage: "nl", + envLanguage: "en_US", + expected: "nl", + expectedErr: false, + }, + { + name: "configLanguage is an unsupported language", + configLanguage: "xy", + envLanguage: "en_US", + expectedErr: true, + }, + { + name: "auto-detection without LANG set", + configLanguage: "auto", + envLanguage: "", + expected: "en", + expectedErr: false, + }, + { + name: "auto-detection with LANG set to nl_NL", + configLanguage: "auto", + envLanguage: "nl_NL", + expected: "nl", + expectedErr: true, // Demonstrates the bug, this should be false + }, + { + name: "auto-detection with LANG set to zh-CN", + configLanguage: "auto", + envLanguage: "zh-CN", + expected: "zh-CN", + expectedErr: false, + }, + { + name: "auto-detection with LANG set to an unsupported language", + configLanguage: "auto", + envLanguage: "xy_XY", + expected: "en", + expectedErr: false, + }, + } + + for _, s := range scenarios { + t.Run(s.name, func(t *testing.T) { + log := newDummyLog() + t.Setenv("LANG", s.envLanguage) + actualTranslationSet, err := NewTranslationSetFromConfig(log, s.configLanguage) + if s.expectedErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + + expectedTranslationSet, _ := newTranslationSet(log, s.expected) + assert.Equal(t, expectedTranslationSet, actualTranslationSet) + } + }) + } +}