From d0b169a5b883fdfd40922cfde50491a855d758f5 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 12:13:19 -0700 Subject: [PATCH 1/7] fix: don't suggest for script,style tags --- src/__tests__/suggestions.js | 9 +++++++++ src/suggestions.js | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/__tests__/suggestions.js b/src/__tests__/suggestions.js index 75d6f90e..be1573d7 100644 --- a/src/__tests__/suggestions.js +++ b/src/__tests__/suggestions.js @@ -10,6 +10,15 @@ afterAll(() => { configure({throwSuggestions: false}) }) +test('dost not suggest for inline script, style', () => { + renderIntoDocument( + ``, + ) + + expect(() => screen.getByTestId('script')).not.toThrow() + expect(() => screen.getByTestId('style')).not.toThrow() +}) + test('does not suggest when using getByRole', () => { renderIntoDocument(``) diff --git a/src/suggestions.js b/src/suggestions.js index 7d109bd3..65072f98 100644 --- a/src/suggestions.js +++ b/src/suggestions.js @@ -58,7 +58,7 @@ export function getSuggestedQuery(element, variant) { } const textContent = normalize(element.textContent) - if (textContent) { + if (textContent && !element.matches('script, style')) { return makeSuggestion('Text', textContent, {variant}) } From 001179b39e9bf3c8b39d9a2c482b0e6c9403801d Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 12:44:32 -0700 Subject: [PATCH 2/7] respect custom ignores --- src/__tests__/suggestions.js | 9 ++++++++- src/query-helpers.js | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/__tests__/suggestions.js b/src/__tests__/suggestions.js index be1573d7..b5c6a1b0 100644 --- a/src/__tests__/suggestions.js +++ b/src/__tests__/suggestions.js @@ -10,7 +10,7 @@ afterAll(() => { configure({throwSuggestions: false}) }) -test('dost not suggest for inline script, style', () => { +test('does not suggest for inline script, style', () => { renderIntoDocument( ``, ) @@ -18,6 +18,13 @@ test('dost not suggest for inline script, style', () => { expect(() => screen.getByTestId('script')).not.toThrow() expect(() => screen.getByTestId('style')).not.toThrow() }) +it('respects ignores', () => { + renderIntoDocument(`foo`) + + expect(() => + screen.queryByText('foo', {ignore: 'my-thing'}), + ).not.toThrowError() +}) test('does not suggest when using getByRole', () => { renderIntoDocument(``) diff --git a/src/query-helpers.js b/src/query-helpers.js index 0b7793f0..cd4c3481 100644 --- a/src/query-helpers.js +++ b/src/query-helpers.js @@ -94,7 +94,7 @@ const wrapSingleQueryWithSuggestion = (query, queryAllByName, variant) => ( ) => { const element = query(container, ...args) const [{suggest = getConfig().throwSuggestions} = {}] = args.slice(-1) - if (suggest) { + if (element && suggest) { const suggestion = getSuggestedQuery(element, variant) if (suggestion && !queryAllByName.endsWith(suggestion.queryName)) { throw getSuggestionError(suggestion.toString(), container) @@ -111,7 +111,7 @@ const wrapAllByQueryWithSuggestion = (query, queryAllByName, variant) => ( const els = query(container, ...args) const [{suggest = getConfig().throwSuggestions} = {}] = args.slice(-1) - if (suggest) { + if (els.length && suggest) { // get a unique list of all suggestion messages. We are only going to make a suggestion if // all the suggestions are the same const uniqueSuggestionMessages = [ From 454f74c2d0ce8e4a3d3f03ea06b83933980ad72a Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 12:45:42 -0700 Subject: [PATCH 3/7] Update src/__tests__/suggestions.js --- src/__tests__/suggestions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/__tests__/suggestions.js b/src/__tests__/suggestions.js index b5c6a1b0..d2546754 100644 --- a/src/__tests__/suggestions.js +++ b/src/__tests__/suggestions.js @@ -18,7 +18,8 @@ test('does not suggest for inline script, style', () => { expect(() => screen.getByTestId('script')).not.toThrow() expect(() => screen.getByTestId('style')).not.toThrow() }) -it('respects ignores', () => { + +test('respects ignores', () => { renderIntoDocument(`foo`) expect(() => From 39ffb8f8fadc6aa1f449743b7c3cee8cfc3d0d15 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 14:21:12 -0700 Subject: [PATCH 4/7] don't suggest on nested ignore tags --- src/__tests__/suggestions.js | 10 ++++++++++ src/queries/text.js | 2 +- src/suggestions.js | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/__tests__/suggestions.js b/src/__tests__/suggestions.js index b5c6a1b0..f1c2c194 100644 --- a/src/__tests__/suggestions.js +++ b/src/__tests__/suggestions.js @@ -10,6 +10,16 @@ afterAll(() => { configure({throwSuggestions: false}) }) +test('does not suggest for nested inline style', () => { + renderIntoDocument( + `
`, + ) + + // screen.debug(screen.getByText(/hsus/)) + + expect(() => screen.getByTestId('style')).not.toThrow() +}) + test('does not suggest for inline script, style', () => { renderIntoDocument( ``, diff --git a/src/queries/text.js b/src/queries/text.js index aa7419d9..61486961 100644 --- a/src/queries/text.js +++ b/src/queries/text.js @@ -1,3 +1,4 @@ +import {wrapAllByQueryWithSuggestion} from '../query-helpers' import { fuzzyMatches, matches, @@ -5,7 +6,6 @@ import { getNodeText, buildQueries, } from './all-utils' -import {wrapAllByQueryWithSuggestion} from '../query-helpers' function queryAllByText( container, diff --git a/src/suggestions.js b/src/suggestions.js index 65072f98..c4510638 100644 --- a/src/suggestions.js +++ b/src/suggestions.js @@ -1,6 +1,7 @@ import {computeAccessibleName} from 'dom-accessibility-api' import {getRoles} from './role-helpers' import {getDefaultNormalizer} from './matches' +import {getNodeText} from './get-node-text' const normalize = getDefaultNormalizer() @@ -57,7 +58,7 @@ export function getSuggestedQuery(element, variant) { return makeSuggestion('PlaceholderText', placeholderText, {variant}) } - const textContent = normalize(element.textContent) + const textContent = normalize(getNodeText(element)) if (textContent && !element.matches('script, style')) { return makeSuggestion('Text', textContent, {variant}) } From 4b1099fd41ac63522dd5f8c8ecd5aff751bf8e91 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 14:24:13 -0700 Subject: [PATCH 5/7] remove comment --- src/__tests__/suggestions.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/__tests__/suggestions.js b/src/__tests__/suggestions.js index e05740ce..485299d5 100644 --- a/src/__tests__/suggestions.js +++ b/src/__tests__/suggestions.js @@ -15,8 +15,6 @@ test('does not suggest for nested inline style', () => { `
`, ) - // screen.debug(screen.getByText(/hsus/)) - expect(() => screen.getByTestId('style')).not.toThrow() }) From abfec863206871541c6e10cd24dce01ef3272050 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 20:01:32 -0700 Subject: [PATCH 6/7] move default tags to ignore to config --- src/config.js | 1 + src/queries/text.js | 3 ++- src/suggestions.js | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/config.js b/src/config.js index bce4d959..37ab986b 100644 --- a/src/config.js +++ b/src/config.js @@ -33,6 +33,7 @@ let config = { _disableExpensiveErrorDiagnostics: false, } +export const DEFAULT_IGNORE_TAGS = 'script, style' export function runWithExpensiveErrorDiagnosticsDisabled(callback) { try { config._disableExpensiveErrorDiagnostics = true diff --git a/src/queries/text.js b/src/queries/text.js index 61486961..4d31b6c2 100644 --- a/src/queries/text.js +++ b/src/queries/text.js @@ -1,4 +1,5 @@ import {wrapAllByQueryWithSuggestion} from '../query-helpers' +import {DEFAULT_IGNORE_TAGS} from '../config' import { fuzzyMatches, matches, @@ -15,7 +16,7 @@ function queryAllByText( exact = true, collapseWhitespace, trim, - ignore = 'script, style', + ignore = DEFAULT_IGNORE_TAGS, normalizer, } = {}, ) { diff --git a/src/suggestions.js b/src/suggestions.js index c4510638..f7bb381d 100644 --- a/src/suggestions.js +++ b/src/suggestions.js @@ -2,6 +2,8 @@ import {computeAccessibleName} from 'dom-accessibility-api' import {getRoles} from './role-helpers' import {getDefaultNormalizer} from './matches' import {getNodeText} from './get-node-text' +// eslint-disable-next-line import/no-cycle +import {DEFAULT_IGNORE_TAGS} from './config' const normalize = getDefaultNormalizer() @@ -59,7 +61,7 @@ export function getSuggestedQuery(element, variant) { } const textContent = normalize(getNodeText(element)) - if (textContent && !element.matches('script, style')) { + if (textContent && !element.matches(DEFAULT_IGNORE_TAGS)) { return makeSuggestion('Text', textContent, {variant}) } From 29cba897646f706f70371cb1d39a795ab01fcf63 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 30 May 2020 20:03:53 -0700 Subject: [PATCH 7/7] remove eslint disable --- src/suggestions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/suggestions.js b/src/suggestions.js index f7bb381d..20735889 100644 --- a/src/suggestions.js +++ b/src/suggestions.js @@ -2,7 +2,6 @@ import {computeAccessibleName} from 'dom-accessibility-api' import {getRoles} from './role-helpers' import {getDefaultNormalizer} from './matches' import {getNodeText} from './get-node-text' -// eslint-disable-next-line import/no-cycle import {DEFAULT_IGNORE_TAGS} from './config' const normalize = getDefaultNormalizer()