summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/console/01_console.js15
-rw-r--r--tests/integration/repl_tests.rs14
-rw-r--r--tests/specs/repl/console_log/093_console_log_format.js16
-rw-r--r--tests/specs/repl/console_log/093_console_log_format.out1
-rw-r--r--tests/specs/repl/console_log/__test__.jsonc4
-rw-r--r--tests/unit/console_test.ts8
6 files changed, 46 insertions, 12 deletions
diff --git a/ext/console/01_console.js b/ext/console/01_console.js
index d9acc958a..a977a2719 100644
--- a/ext/console/01_console.js
+++ b/ext/console/01_console.js
@@ -84,6 +84,7 @@ const {
NumberIsInteger,
NumberIsNaN,
NumberParseInt,
+ NumberParseFloat,
NumberPrototypeToFixed,
NumberPrototypeToString,
NumberPrototypeValueOf,
@@ -3010,20 +3011,18 @@ function inspectArgs(args, inspectOptions = { __proto__: null }) {
} else if (ArrayPrototypeIncludes(["d", "i"], char)) {
// Format as an integer.
const value = args[a++];
- if (typeof value == "bigint") {
- formattedArg = `${value}n`;
- } else if (typeof value == "number") {
- formattedArg = `${NumberParseInt(String(value))}`;
- } else {
+ if (typeof value === "symbol") {
formattedArg = "NaN";
+ } else {
+ formattedArg = `${NumberParseInt(value)}`;
}
} else if (char == "f") {
// Format as a floating point value.
const value = args[a++];
- if (typeof value == "number") {
- formattedArg = `${value}`;
- } else {
+ if (typeof value === "symbol") {
formattedArg = "NaN";
+ } else {
+ formattedArg = `${NumberParseFloat(value)}`;
}
} else if (ArrayPrototypeIncludes(["O", "o"], char)) {
// Format as an object.
diff --git a/tests/integration/repl_tests.rs b/tests/integration/repl_tests.rs
index 4e00398ce..9eceb2f05 100644
--- a/tests/integration/repl_tests.rs
+++ b/tests/integration/repl_tests.rs
@@ -255,6 +255,20 @@ fn console_log() {
console.write_line("'world'");
console.expect("\"world\"");
});
+
+ // https://github.com/denoland/deno/issues/21428
+ let (out, err) = util::run_and_collect_output_with_args(
+ true,
+ vec![
+ "repl",
+ "--eval-file=./../specs/repl/console_log/093_console_log_format.js",
+ ],
+ None,
+ None,
+ false,
+ );
+ assert_contains!(out, "0.5");
+ assert!(err.is_empty());
}
#[test]
diff --git a/tests/specs/repl/console_log/093_console_log_format.js b/tests/specs/repl/console_log/093_console_log_format.js
new file mode 100644
index 000000000..15022411c
--- /dev/null
+++ b/tests/specs/repl/console_log/093_console_log_format.js
@@ -0,0 +1,16 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+class Frac {
+ constructor(num, den) {
+ this.num = num;
+ this.den = den;
+ }
+ [Symbol.toPrimitive]() {
+ return this.num / this.den;
+ }
+ display() {
+ const result = this.num / this.den;
+ process.stdout.write(`${result}`);
+ }
+}
+const f = new Frac(1, 2);
+f.display();
diff --git a/tests/specs/repl/console_log/093_console_log_format.out b/tests/specs/repl/console_log/093_console_log_format.out
new file mode 100644
index 000000000..ea2303bc0
--- /dev/null
+++ b/tests/specs/repl/console_log/093_console_log_format.out
@@ -0,0 +1 @@
+0.5 \ No newline at end of file
diff --git a/tests/specs/repl/console_log/__test__.jsonc b/tests/specs/repl/console_log/__test__.jsonc
new file mode 100644
index 000000000..641bc1f68
--- /dev/null
+++ b/tests/specs/repl/console_log/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "run -A --quiet 093_console_log_format.js",
+ "output": "093_console_log_format.out"
+}
diff --git a/tests/unit/console_test.ts b/tests/unit/console_test.ts
index 878d17ae3..42cff7c70 100644
--- a/tests/unit/console_test.ts
+++ b/tests/unit/console_test.ts
@@ -1162,7 +1162,7 @@ Deno.test(function consoleTestWithIntegerFormatSpecifier() {
assertEquals(stringify("%i"), "%i");
assertEquals(stringify("%i", 42.0), "42");
assertEquals(stringify("%i", 42), "42");
- assertEquals(stringify("%i", "42"), "NaN");
+ assertEquals(stringify("%i", "42"), "42");
assertEquals(stringify("%i", 1.5), "1");
assertEquals(stringify("%i", -0.5), "0");
assertEquals(stringify("%i", ""), "NaN");
@@ -1172,7 +1172,7 @@ Deno.test(function consoleTestWithIntegerFormatSpecifier() {
assertEquals(stringify("%d", 12345678901234567890123), "1");
assertEquals(
stringify("%i", 12345678901234567890123n),
- "12345678901234567890123n",
+ "1.2345678901234568e+22",
);
});
@@ -1180,13 +1180,13 @@ Deno.test(function consoleTestWithFloatFormatSpecifier() {
assertEquals(stringify("%f"), "%f");
assertEquals(stringify("%f", 42.0), "42");
assertEquals(stringify("%f", 42), "42");
- assertEquals(stringify("%f", "42"), "NaN");
+ assertEquals(stringify("%f", "42"), "42");
assertEquals(stringify("%f", 1.5), "1.5");
assertEquals(stringify("%f", -0.5), "-0.5");
assertEquals(stringify("%f", Math.PI), "3.141592653589793");
assertEquals(stringify("%f", ""), "NaN");
assertEquals(stringify("%f", Symbol("foo")), "NaN");
- assertEquals(stringify("%f", 5n), "NaN");
+ assertEquals(stringify("%f", 5n), "5");
assertEquals(stringify("%f %f", 42, 43), "42 43");
assertEquals(stringify("%f %f", 42), "42 %f");
});