diff --git a/src/options.js b/src/options.js index 94ca533c1a..55f7709905 100644 --- a/src/options.js +++ b/src/options.js @@ -330,8 +330,10 @@ export function isTemporalString(values) { // coercion because we want to ignore false positives on e.g. empty strings. export function isNumericString(values) { for (const value of values) { - if (value == null || value === "") continue; - return typeof value === "string" && !isNaN(value); + if (value == null) continue; + if (typeof value !== "string") return false; + if (!value.trim()) continue; + return !isNaN(value); } } diff --git a/test/options-test.js b/test/options-test.js new file mode 100644 index 0000000000..55916478cc --- /dev/null +++ b/test/options-test.js @@ -0,0 +1,46 @@ +import assert from "assert"; +import {isNumericString} from "../src/options.js"; + +it("isNumericString detects numeric strings", () => { + assert.strictEqual(isNumericString(["42"]), true); +}); + +it("isNumericString doesn’t consider numbers to be strings", () => { + assert.strictEqual(isNumericString([42]), false); + assert.strictEqual(isNumericString([NaN]), false); +}); + +it("isNumericString doesn’t consider the string NaN to be numeric", () => { + assert.strictEqual(isNumericString(["NaN"]), false); +}); + +it("isNumericString ignores whitespace", () => { + assert.strictEqual(isNumericString([" 42"]), true); + assert.strictEqual(isNumericString(["42 "]), true); + assert.strictEqual(isNumericString([" 42 "]), true); +}); + +it("isNumericString ignores null", () => { + assert.strictEqual(isNumericString([null, "42", "notstring"]), true); + assert.strictEqual(isNumericString([null, "notstring", "42"]), false); +}); + +it("isNumericString ignores undefined", () => { + assert.strictEqual(isNumericString([undefined, "42", "notstring"]), true); + assert.strictEqual(isNumericString([undefined, "notstring", "42"]), false); +}); + +it("isNumericString ignores empty strings", () => { + assert.strictEqual(isNumericString(["", "42", "notstring"]), true); + assert.strictEqual(isNumericString(["", "notstring", "42"]), false); +}); + +it("isNumericString ignores whitespace strings", () => { + assert.strictEqual(isNumericString([" ", "42", "notstring"]), true); + assert.strictEqual(isNumericString([" ", "notstring", "42"]), false); +}); + +it("isNumericString only checks the first present value", () => { + assert.strictEqual(isNumericString(["42", "notstring"]), true); + assert.strictEqual(isNumericString(["notstring", "42"]), false); +});