mirror of
https://github.com/denoland/std.git
synced 2024-11-21 20:50:22 +00:00
test(fmt): handle missing group separator for 1000.1 in some locales (#6117)
This commit is contained in:
parent
5cd3b5d94f
commit
3f0ef9f502
@ -4,10 +4,10 @@
|
||||
|
||||
import { format } from "./bytes.ts";
|
||||
import { assertEquals, assertThrows } from "@std/assert";
|
||||
import { stub } from "@std/testing/mock";
|
||||
|
||||
const parts = new Intl.NumberFormat().formatToParts(1000.1);
|
||||
const parts = new Intl.NumberFormat().formatToParts(10000.1);
|
||||
const decimal = parts.find(({ type }) => type === "decimal")!.value;
|
||||
const group = parts.find(({ type }) => type === "group")!.value;
|
||||
|
||||
Deno.test("format() throws on invalid input", () => {
|
||||
// deno-lint-ignore no-explicit-any
|
||||
@ -76,10 +76,6 @@ Deno.test("format() handles locale option", () => {
|
||||
assertEquals(format(0.4, { locale: true }), `0${decimal}4 B`);
|
||||
assertEquals(format(1001, { locale: true }), "1 kB");
|
||||
assertEquals(format(10.1, { locale: true }), `10${decimal}1 B`);
|
||||
assertEquals(
|
||||
format(1e30, { locale: true }),
|
||||
`1${group}000${group}000 YB`,
|
||||
);
|
||||
|
||||
assertEquals(format(-0.4, { locale: false }), "-0.4 B");
|
||||
assertEquals(format(0.4, { locale: false }), "0.4 B");
|
||||
@ -105,6 +101,41 @@ Deno.test("format() handles locale option", () => {
|
||||
assertEquals(format(1e30, {}), "1000000 YB");
|
||||
});
|
||||
|
||||
Deno.test("format() handles group separators", async (t) => {
|
||||
const tests: { locale: string; expected: string }[] = [
|
||||
{ locale: "en-US", expected: "1,000,000 YB" },
|
||||
{ locale: "es-ES", expected: "1.000.000 YB" },
|
||||
|
||||
// narrow non-breaking space
|
||||
{ locale: "fr-FR", expected: "1\u202f000\u202f000 YB" },
|
||||
|
||||
// non-breaking space
|
||||
{ locale: "pl-PL", expected: "1\u00A0000\u00A0000 YB" },
|
||||
|
||||
// https://en.wikipedia.org/wiki/Indian_numbering_system
|
||||
{ locale: "hi-IN", expected: "10,00,000 YB" },
|
||||
{ locale: "gu-IN", expected: "10,00,000 YB" },
|
||||
];
|
||||
|
||||
for (const { locale, expected } of tests) {
|
||||
await t.step(locale, () => {
|
||||
const toLocaleString = Number.prototype.toLocaleString;
|
||||
using _ = stub(
|
||||
Number.prototype,
|
||||
"toLocaleString",
|
||||
function (loc) {
|
||||
return toLocaleString.call(this, loc ?? locale);
|
||||
},
|
||||
);
|
||||
|
||||
// explicitly supplying the locale
|
||||
assertEquals(format(1e30, { locale }), expected);
|
||||
// using the default locale (mocked with stub)
|
||||
assertEquals(format(1e30, { locale: true }), expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Deno.test("format() handles signed option", () => {
|
||||
assertEquals(format(42, { signed: true }), "+42 B");
|
||||
assertEquals(format(-13, { signed: true }), "-13 B");
|
||||
|
Loading…
Reference in New Issue
Block a user