diff --git a/tests/Makefile b/tests/Makefile index 7d2a7f9169..0f3489d4a8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -46,7 +46,9 @@ EXPECT_NAMES=\ glob \ iso646 \ libgen \ - locale \ + locale/duplocale \ + locale/newlocale \ + locale/setlocale \ math \ regex \ select \ diff --git a/tests/expected/bins_dynamic/locale.stderr b/tests/expected/bins_dynamic/locale/duplocale.stderr similarity index 100% rename from tests/expected/bins_dynamic/locale.stderr rename to tests/expected/bins_dynamic/locale/duplocale.stderr diff --git a/tests/expected/bins_static/locale.stderr b/tests/expected/bins_dynamic/locale/duplocale.stdout similarity index 100% rename from tests/expected/bins_static/locale.stderr rename to tests/expected/bins_dynamic/locale/duplocale.stdout diff --git a/tests/expected/bins_dynamic/locale/newlocale.stderr b/tests/expected/bins_dynamic/locale/newlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale/newlocale.stdout b/tests/expected/bins_dynamic/locale/newlocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale/setlocale.stderr b/tests/expected/bins_dynamic/locale/setlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale.stdout b/tests/expected/bins_dynamic/locale/setlocale.stdout similarity index 100% rename from tests/expected/bins_dynamic/locale.stdout rename to tests/expected/bins_dynamic/locale/setlocale.stdout diff --git a/tests/expected/bins_static/locale/duplocale.stderr b/tests/expected/bins_static/locale/duplocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/duplocale.stdout b/tests/expected/bins_static/locale/duplocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/newlocale.stderr b/tests/expected/bins_static/locale/newlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/newlocale.stdout b/tests/expected/bins_static/locale/newlocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/setlocale.stderr b/tests/expected/bins_static/locale/setlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale.stdout b/tests/expected/bins_static/locale/setlocale.stdout similarity index 100% rename from tests/expected/bins_static/locale.stdout rename to tests/expected/bins_static/locale/setlocale.stdout diff --git a/tests/locale/duplocale.c b/tests/locale/duplocale.c new file mode 100644 index 0000000000..735fbbe353 --- /dev/null +++ b/tests/locale/duplocale.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +int main() { + struct lconv *lconv0 = localeconv(); + + locale_t locale0 = uselocale(NULL); + assert(locale0 == LC_GLOBAL_LOCALE); + + locale_t locale1 = uselocale(LC_GLOBAL_LOCALE); + assert(locale1 == LC_GLOBAL_LOCALE); + + struct lconv *lconv1 = localeconv(); + assert(lconv0 == lconv1); + + locale_t locale2 = newlocale(LC_ALL_MASK, "C", (locale_t)0); + assert(locale2 != LC_GLOBAL_LOCALE); + + struct lconv *lconv2 = localeconv(); + assert(lconv2 == lconv1); + + locale_t locale3 = duplocale(locale2); + assert(locale3 != locale2); + assert(locale3 != LC_GLOBAL_LOCALE); + + locale_t locale4 = uselocale(locale3); + assert(locale4 == locale1); + + struct lconv *lconv3 = localeconv(); + assert(lconv3 != lconv2); + + // should not crash + freelocale(locale3); + freelocale(locale2); + freelocale(locale1); + return 0; +} \ No newline at end of file diff --git a/tests/locale/newlocale.c b/tests/locale/newlocale.c new file mode 100644 index 0000000000..0dbb70b5f1 --- /dev/null +++ b/tests/locale/newlocale.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +int main() { + locale_t locale0 = newlocale(LC_ALL_MASK, "C", (locale_t)0); + assert(locale0 != (locale_t)0); + + locale_t locale1 = newlocale(LC_ALL_MASK, "non-existent-locale", (locale_t)0); + assert(locale1 == (locale_t)0); + + // TODO: test with existing custom locale + + return 0; +} diff --git a/tests/locale.c b/tests/locale/setlocale.c similarity index 100% rename from tests/locale.c rename to tests/locale/setlocale.c