diff options
author | W. Trevor King <wking@tremily.us> | 2019-03-05 21:15:01 -0800 |
---|---|---|
committer | W. Trevor King <wking@tremily.us> | 2019-03-05 22:02:50 -0800 |
commit | 69cb8639b406a6bd4b441073fcb27dc68be01fe8 (patch) | |
tree | ffd1c4da5d97d93237f6fcb22c6ee3430643bac0 /libpod/container_internal_test.go | |
parent | 40f78439459d0899de8643661b8e996a1e2460d6 (diff) | |
download | podman-69cb8639b406a6bd4b441073fcb27dc68be01fe8.tar.gz podman-69cb8639b406a6bd4b441073fcb27dc68be01fe8.tar.bz2 podman-69cb8639b406a6bd4b441073fcb27dc68be01fe8.zip |
libpod/container_internal: Split locale at the first dot, etc.
We're going to feed this into Go's BCP 47 language parser. Language
tags have the form [1]:
language
["-" script]
["-" region]
*("-" variant)
*("-" extension)
["-" privateuse]
and locales have the form [2]:
[language[_territory][.codeset][@modifier]]
The modifier is useful for collation, but Go's language-based API
[3] does not provide a way for us to supply it. This code converts
our locale to a BCP 47 language by stripping the dot and later and
replacing the first underscore, if any, with a hyphen. This will
avoid errors like [4]:
WARN[0000] failed to parse language "en_US.UTF-8": language: tag is not well-formed
when feeding language.Parse(...).
[1]: https://tools.ietf.org/html/bcp47#section-2.1
[2]: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_02
[3]: https://github.com/golang/go/issues/25340
[4]: https://github.com/containers/libpod/issues/2494
Signed-off-by: W. Trevor King <wking@tremily.us>
Diffstat (limited to 'libpod/container_internal_test.go')
-rw-r--r-- | libpod/container_internal_test.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libpod/container_internal_test.go b/libpod/container_internal_test.go index f1e2b70a7..1654af929 100644 --- a/libpod/container_internal_test.go +++ b/libpod/container_internal_test.go @@ -17,6 +17,54 @@ import ( // hookPath is the path to an example hook executable. var hookPath string +func TestLocaleToLanguage(t *testing.T) { + for _, testCase := range []struct { + locale string + language string + }{ + { + locale: "", + language: "und-u-va-posix", + }, + { + locale: "C", + language: "und-u-va-posix", + }, + { + locale: "POSIX", + language: "und-u-va-posix", + }, + { + locale: "c", + language: "und-u-va-posix", + }, + { + locale: "en", + language: "en", + }, + { + locale: "en_US", + language: "en-US", + }, + { + locale: "en.UTF-8", + language: "en", + }, + { + locale: "en_US.UTF-8", + language: "en-US", + }, + { + locale: "does-not-exist", + language: "does-not-exist", + }, + } { + t.Run(testCase.locale, func(t *testing.T) { + assert.Equal(t, testCase.language, localeToLanguage(testCase.locale)) + }) + } +} + func TestPostDeleteHooks(t *testing.T) { ctx := context.Background() dir, err := ioutil.TempDir("", "libpod_test_") |