From 3635c98e4272dd830c2d7c14d45bd3aa9fcf7a4a Mon Sep 17 00:00:00 2001 From: David Murdoch Date: Tue, 16 Nov 2021 13:30:37 -0500 Subject: [PATCH 1/4] make the quiet flag actually work --- .../ethereum/options/src/logging-options.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/chains/ethereum/options/src/logging-options.ts b/src/chains/ethereum/options/src/logging-options.ts index 98fd0dd85e..26530d5266 100644 --- a/src/chains/ethereum/options/src/logging-options.ts +++ b/src/chains/ethereum/options/src/logging-options.ts @@ -87,12 +87,20 @@ export const LoggingOptions: Definitions = { legacyName: "debug", cliType: "boolean" }, + quiet: { + normalize, + cliDescription: "Set to `true` to disable logging.", + default: () => false, + cliAliases: ["q", "quiet"], + cliType: "boolean" + }, logger: { normalize, cliDescription: "An object, like `console`, that implements a `log` function.", disableInCLI: true, - default: () => logger, + // disable the default logger if `quiet` is `true` + default: config => (config.quiet ? { log: () => {} } : logger), legacyName: "logger" }, verbose: { @@ -102,12 +110,5 @@ export const LoggingOptions: Definitions = { legacyName: "verbose", cliAliases: ["v", "verbose"], cliType: "boolean" - }, - quiet: { - normalize, - cliDescription: "Set to `true` to disable logging.", - default: () => false, - cliAliases: ["q", "quiet"], - cliType: "boolean" } }; From 54abf0035274a740b035bcd6ba40ba8e7e142c53 Mon Sep 17 00:00:00 2001 From: David Murdoch Date: Tue, 16 Nov 2021 13:48:20 -0500 Subject: [PATCH 2/4] add quiet flag test --- .../ethereum/options/tests/index.test.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/chains/ethereum/options/tests/index.test.ts b/src/chains/ethereum/options/tests/index.test.ts index cf92b31de0..21cf945700 100644 --- a/src/chains/ethereum/options/tests/index.test.ts +++ b/src/chains/ethereum/options/tests/index.test.ts @@ -2,6 +2,36 @@ import assert from "assert"; import { EthereumDefaults, EthereumOptionsConfig } from "../src"; describe("EthereumOptionsConfig", () => { + describe("options", () => { + it("logs via console.log by default", () => { + const message = "message"; + const options = EthereumOptionsConfig.normalize({}); + let logged = false; + console.log = (msg: string) => { + logged = true; + assert.strictEqual(msg, message); + }; + options.logging.logger.log(message); + assert.strictEqual(logged, true); + }); + + it("disables the logger when the quiet flag is used", () => { + const options = EthereumOptionsConfig.normalize({ + logging: { quiet: true } + }); + let logged = false; + const log = console.log; + try { + console.log = () => { + logged = true; + }; + options.logging.logger.log("message"); + } finally { + console.log = log; + } + assert.strictEqual(logged, false); + }); + }); describe(".normalize", () => { it("returns an options object with all default namespaces", () => { const options = EthereumOptionsConfig.normalize({}); From a07d097c172f1519d514391b16d813fba74ef682 Mon Sep 17 00:00:00 2001 From: David Murdoch Date: Tue, 16 Nov 2021 15:10:46 -0500 Subject: [PATCH 3/4] make the default logger `spy`able --- .../ethereum/options/src/logging-options.ts | 6 ++-- .../ethereum/options/tests/index.test.ts | 29 ++++++++----------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/chains/ethereum/options/src/logging-options.ts b/src/chains/ethereum/options/src/logging-options.ts index 26530d5266..da7fd8c0e7 100644 --- a/src/chains/ethereum/options/src/logging-options.ts +++ b/src/chains/ethereum/options/src/logging-options.ts @@ -77,8 +77,6 @@ export type LoggingConfig = { }; }; -const logger: Logger = { log: console.log }; - export const LoggingOptions: Definitions = { debug: { normalize, @@ -100,7 +98,9 @@ export const LoggingOptions: Definitions = { "An object, like `console`, that implements a `log` function.", disableInCLI: true, // disable the default logger if `quiet` is `true` - default: config => (config.quiet ? { log: () => {} } : logger), + default: config => ({ + log: config.quiet ? () => {} : console.log + }), legacyName: "logger" }, verbose: { diff --git a/src/chains/ethereum/options/tests/index.test.ts b/src/chains/ethereum/options/tests/index.test.ts index 21cf945700..d8b50773f1 100644 --- a/src/chains/ethereum/options/tests/index.test.ts +++ b/src/chains/ethereum/options/tests/index.test.ts @@ -1,35 +1,30 @@ import assert from "assert"; import { EthereumDefaults, EthereumOptionsConfig } from "../src"; +import sinon from "sinon"; describe("EthereumOptionsConfig", () => { describe("options", () => { + let spy: any; + beforeEach(() => { + spy = sinon.spy(console, "log"); + }); + afterEach(() => { + spy.restore(); + }); it("logs via console.log by default", () => { const message = "message"; const options = EthereumOptionsConfig.normalize({}); - let logged = false; - console.log = (msg: string) => { - logged = true; - assert.strictEqual(msg, message); - }; options.logging.logger.log(message); - assert.strictEqual(logged, true); + assert.strictEqual(spy.withArgs(message).callCount, 1); }); it("disables the logger when the quiet flag is used", () => { + const message = "message"; const options = EthereumOptionsConfig.normalize({ logging: { quiet: true } }); - let logged = false; - const log = console.log; - try { - console.log = () => { - logged = true; - }; - options.logging.logger.log("message"); - } finally { - console.log = log; - } - assert.strictEqual(logged, false); + options.logging.logger.log(message); + assert.strictEqual(spy.withArgs(message).callCount, 0); }); }); describe(".normalize", () => { From 6b863d3eb686f686a4ded4c9a61f0c5d006652db Mon Sep 17 00:00:00 2001 From: David Murdoch Date: Tue, 16 Nov 2021 15:17:20 -0500 Subject: [PATCH 4/4] include package.json --- src/chains/ethereum/options/package-lock.json | 117 ++++++++++++++++++ src/chains/ethereum/options/package.json | 1 + 2 files changed, 118 insertions(+) diff --git a/src/chains/ethereum/options/package-lock.json b/src/chains/ethereum/options/package-lock.json index 1cc5b5be36..94ba4fac33 100644 --- a/src/chains/ethereum/options/package-lock.json +++ b/src/chains/ethereum/options/package-lock.json @@ -4,6 +4,41 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, "@types/mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", @@ -488,6 +523,12 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -503,6 +544,12 @@ "argparse": "^2.0.1" } }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -512,6 +559,12 @@ "p-locate": "^5.0.0" } }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -591,6 +644,30 @@ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, + "nise": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -648,6 +725,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -761,6 +847,31 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "sinon": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", + "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^8.1.0", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -860,6 +971,12 @@ "resolve": ">=1.9.0" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "typescript": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", diff --git a/src/chains/ethereum/options/package.json b/src/chains/ethereum/options/package.json index c662b67c6f..2f1e2f0d12 100644 --- a/src/chains/ethereum/options/package.json +++ b/src/chains/ethereum/options/package.json @@ -60,6 +60,7 @@ "@types/seedrandom": "3.0.1", "cross-env": "7.0.3", "mocha": "9.1.3", + "sinon": "12.0.1", "ts-node": "9.1.1", "ttypescript": "1.5.12", "typescript": "4.1.3"