diff --git a/cli/tests/unit/console_test.ts b/cli/tests/unit/console_test.ts index ccc8638d25..239a8bf26c 100644 --- a/cli/tests/unit/console_test.ts +++ b/cli/tests/unit/console_test.ts @@ -1395,7 +1395,8 @@ Deno.test(function consoleTable() { console.table({ a: "test", b: 1 }); assertEquals( stripColor(out.toString()), - `┌───────┬────────┐ + `\ +┌───────┬────────┐ │ (idx) │ Values │ ├───────┼────────┤ │ a │ "test" │ @@ -1408,12 +1409,28 @@ Deno.test(function consoleTable() { console.table({ a: { b: 10 }, b: { b: 20, c: 30 } }, ["c"]); assertEquals( stripColor(out.toString()), - `┌───────┬────┐ + `\ +┌───────┬────┐ │ (idx) │ c │ ├───────┼────┤ │ a │ │ │ b │ 30 │ └───────┴────┘ +`, + ); + }); + mockConsole((console, out) => { + console.table([[1, 1], [234, 2.34], [56789, 56.789]]); + assertEquals( + stripColor(out.toString()), + `\ +┌───────┬───────┬────────┐ +│ (idx) │ 0 │ 1 │ +├───────┼───────┼────────┤ +│ 0 │ 1 │ 1 │ +│ 1 │ 234 │ 2.34 │ +│ 2 │ 56789 │ 56.789 │ +└───────┴───────┴────────┘ `, ); }); @@ -1421,7 +1438,8 @@ Deno.test(function consoleTable() { console.table([1, 2, [3, [4]], [5, 6], [[7], [8]]]); assertEquals( stripColor(out.toString()), - `┌───────┬───────┬───────┬────────┐ + `\ +┌───────┬───────┬───────┬────────┐ │ (idx) │ 0 │ 1 │ Values │ ├───────┼───────┼───────┼────────┤ │ 0 │ │ │ 1 │ @@ -1437,7 +1455,8 @@ Deno.test(function consoleTable() { console.table(new Set([1, 2, 3, "test"])); assertEquals( stripColor(out.toString()), - `┌────────────┬────────┐ + `\ +┌────────────┬────────┐ │ (iter idx) │ Values │ ├────────────┼────────┤ │ 0 │ 1 │ @@ -1457,7 +1476,8 @@ Deno.test(function consoleTable() { ); assertEquals( stripColor(out.toString()), - `┌────────────┬─────┬────────┐ + `\ +┌────────────┬─────┬────────┐ │ (iter idx) │ Key │ Values │ ├────────────┼─────┼────────┤ │ 0 │ 1 │ "one" │ @@ -1476,7 +1496,8 @@ Deno.test(function consoleTable() { }); assertEquals( stripColor(out.toString()), - `┌───────┬───────────┬───────────────────┬────────┐ + `\ +┌───────┬───────────┬───────────────────┬────────┐ │ (idx) │ c │ e │ Values │ ├───────┼───────────┼───────────────────┼────────┤ │ a │ │ │ true │ @@ -1498,7 +1519,8 @@ Deno.test(function consoleTable() { ]); assertEquals( stripColor(out.toString()), - `┌───────┬────────┬──────────────────────┬────┬────────┐ + `\ +┌───────┬────────┬──────────────────────┬────┬────────┐ │ (idx) │ 0 │ 1 │ a │ Values │ ├───────┼────────┼──────────────────────┼────┼────────┤ │ 0 │ │ │ │ 1 │ @@ -1514,7 +1536,8 @@ Deno.test(function consoleTable() { console.table([]); assertEquals( stripColor(out.toString()), - `┌───────┐ + `\ +┌───────┐ │ (idx) │ ├───────┤ └───────┘ @@ -1525,7 +1548,8 @@ Deno.test(function consoleTable() { console.table({}); assertEquals( stripColor(out.toString()), - `┌───────┐ + `\ +┌───────┐ │ (idx) │ ├───────┤ └───────┘ @@ -1536,7 +1560,8 @@ Deno.test(function consoleTable() { console.table(new Set()); assertEquals( stripColor(out.toString()), - `┌────────────┐ + `\ +┌────────────┐ │ (iter idx) │ ├────────────┤ └────────────┘ @@ -1547,7 +1572,8 @@ Deno.test(function consoleTable() { console.table(new Map()); assertEquals( stripColor(out.toString()), - `┌────────────┐ + `\ +┌────────────┐ │ (iter idx) │ ├────────────┤ └────────────┘ @@ -1562,7 +1588,8 @@ Deno.test(function consoleTable() { console.table(["Hello", "你好", "Amapá"]); assertEquals( stripColor(out.toString()), - `┌───────┬─────────┐ + `\ +┌───────┬─────────┐ │ (idx) │ Values │ ├───────┼─────────┤ │ 0 │ "Hello" │ @@ -1579,7 +1606,8 @@ Deno.test(function consoleTable() { ]); assertEquals( stripColor(out.toString()), - `┌───────┬───┬───┐ + `\ +┌───────┬───┬───┐ │ (idx) │ 0 │ 1 │ ├───────┼───┼───┤ │ 0 │ 1 │ 2 │ @@ -1592,7 +1620,8 @@ Deno.test(function consoleTable() { console.table({ 1: { a: 4, b: 5 }, 2: null, 3: { b: 6, c: 7 } }, ["b"]); assertEquals( stripColor(out.toString()), - `┌───────┬───┐ + `\ +┌───────┬───┐ │ (idx) │ b │ ├───────┼───┤ │ 1 │ 5 │ @@ -1606,7 +1635,8 @@ Deno.test(function consoleTable() { console.table([{ a: 0 }, { a: 1, b: 1 }, { a: 2 }, { a: 3, b: 3 }]); assertEquals( stripColor(out.toString()), - `┌───────┬───┬───┐ + `\ +┌───────┬───┬───┐ │ (idx) │ a │ b │ ├───────┼───┼───┤ │ 0 │ 0 │ │ @@ -1624,7 +1654,8 @@ Deno.test(function consoleTable() { ); assertEquals( stripColor(out.toString()), - `┌───────┬───┬───┬───┐ + `\ +┌───────┬───┬───┬───┐ │ (idx) │ a │ b │ c │ ├───────┼───┼───┼───┤ │ 0 │ 0 │ │ │ diff --git a/ext/console/02_console.js b/ext/console/02_console.js index 0bafd532d8..a8b335b948 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -47,6 +47,7 @@ const { StringPrototypeIncludes, StringPrototypeStartsWith, TypeError, + NumberIsInteger, NumberParseInt, RegExp, RegExpPrototype, @@ -232,11 +233,6 @@ function renderRow(row, columnWidths, columnRightAlign) { return out; } -function canRightAlign(value) { - const isNumber = !isNaN(value); - return isNumber; -} - function cliTable(head, columns) { const rows = []; const columnWidths = ArrayPrototypeMap(head, (h) => getStringWidth(h)); @@ -257,7 +253,7 @@ function cliTable(head, columns) { const width = columnWidths[i] || 0; const counted = getStringWidth(value); columnWidths[i] = MathMax(width, counted); - columnRightAlign[i] &= canRightAlign(value); + columnRightAlign[i] &= NumberIsInteger(+value); } }