From 061090de7e95e8e7a97f3277bd1a72899ebd1570 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Wed, 30 Mar 2022 09:59:27 +1100 Subject: feat(lsp): add experimental testing API (#13798) Ref: denoland/vscode_deno#629 --- runtime/js/40_testing.js | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'runtime') diff --git a/runtime/js/40_testing.js b/runtime/js/40_testing.js index 3e4a57df1..abbef2ae4 100644 --- a/runtime/js/40_testing.js +++ b/runtime/js/40_testing.js @@ -750,23 +750,37 @@ return inspectArgs([error]); } + /** + * @param {string | { include?: string[], exclude?: string[] }} filter + * @returns {(def: { name: string }) => boolean} + */ function createTestFilter(filter) { + if (!filter) { + return () => true; + } + + const regex = + typeof filter === "string" && StringPrototypeStartsWith(filter, "/") && + StringPrototypeEndsWith(filter, "/") + ? new RegExp(StringPrototypeSlice(filter, 1, filter.length - 1)) + : undefined; + + const filterIsObject = filter != null && typeof filter === "object"; + return (def) => { - if (filter) { - if ( - StringPrototypeStartsWith(filter, "/") && - StringPrototypeEndsWith(filter, "/") - ) { - const regex = new RegExp( - StringPrototypeSlice(filter, 1, filter.length - 1), - ); - return RegExpPrototypeTest(regex, def.name); + if (regex) { + return RegExpPrototypeTest(regex, def.name); + } + if (filterIsObject) { + if (filter.include && !filter.include.includes(def.name)) { + return false; + } else if (filter.exclude && filter.exclude.includes(def.name)) { + return false; + } else { + return true; } - - return StringPrototypeIncludes(def.name, filter); } - - return true; + return StringPrototypeIncludes(def.name, filter); }; } -- cgit v1.2.3