diff --git a/src/lib/__tests__/misc.js b/src/lib/__tests__/misc.js
index 8de4f75..155debc 100644
--- a/src/lib/__tests__/misc.js
+++ b/src/lib/__tests__/misc.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Picker, Switch, View } from 'react-native';
+import { Picker, Switch, View, Text, TextInput, Button } from 'react-native';
import { render, queryByProp, queryByTestId, cleanup } from '../../';
@@ -33,3 +33,47 @@ it('should render test', () => {
expect(getByDisplayValue(true)).toBeTruthy();
});
+
+test('selector option in queries filter out elements', () => {
+ function filterByLabel(label) {
+ return {
+ selector: ({ props }) => props.accessibilityLabel === label,
+ };
+ }
+
+ const { getByText, getByRole, getByDisplayValue, getByTitle } = render(
+ <>
+ hello world
+ hello world
+
+
+
+
+
+
+
+
+
+ >,
+ );
+
+ // more than one match:
+ expect(() => getByText(/hello world/i)).toThrow();
+ // filtered
+ getByText(/hello world/i, filterByLabel('labelled'));
+
+ // more than one match:
+ expect(() => getByRole('link')).toThrow();
+ // filtered
+ getByRole('link', filterByLabel('labelled'));
+
+ // more than one match:
+ expect(() => getByDisplayValue(/hello joe/i)).toThrow();
+ // filtered
+ getByDisplayValue(/hello joe/i, filterByLabel('labelled'));
+
+ // more than one match:
+ expect(() => getByTitle(/hello joe/i)).toThrow();
+ // filtered
+ getByTitle(/hello joe/i, filterByLabel('labelled'));
+});
diff --git a/src/lib/queries/display-value.js b/src/lib/queries/display-value.js
index 0d24904..858cd00 100644
--- a/src/lib/queries/display-value.js
+++ b/src/lib/queries/display-value.js
@@ -9,13 +9,13 @@ import {
function queryAllByDisplayValue(
container,
value,
- { filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
+ { selector = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
) {
const matcher = exact ? matches : fuzzyMatches;
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
return Array.from(container.findAll(node => validComponentFilter(node, 'displayValueComponents')))
- .filter(filter)
+ .filter(selector)
.filter(node => {
if (node.type === 'Picker') {
return matcher(node.getProp('selectedValue'), node, value, matchNormalizer);
diff --git a/src/lib/queries/role.js b/src/lib/queries/role.js
index c13044f..98117d5 100644
--- a/src/lib/queries/role.js
+++ b/src/lib/queries/role.js
@@ -50,11 +50,11 @@ const validTraits = [
'text',
];
-function queryAllByRole(container, value, { filter = n => n } = {}) {
+function queryAllByRole(container, value, { selector = n => n } = {}) {
const roleElements = container.findAll(c => c.getProp('accessibilityRole'));
const traitElements = container.findAll(c => c.getProp('accessibilityTraits'));
- return [...roleElements, ...traitElements].filter(filter).filter(node => {
+ return [...roleElements, ...traitElements].filter(selector).filter(node => {
const role = node.getProp('accessibilityRole');
const traits = node.getProp('accessibilityTraits');
diff --git a/src/lib/queries/text.js b/src/lib/queries/text.js
index 329f149..0d85ded 100644
--- a/src/lib/queries/text.js
+++ b/src/lib/queries/text.js
@@ -10,13 +10,13 @@ import {
function queryAllByText(
container,
text,
- { filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
+ { selector = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
) {
const matcher = exact ? matches : fuzzyMatches;
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
return Array.from(container.findAll(node => validComponentFilter(node, 'textComponents')))
- .filter(filter)
+ .filter(selector)
.filter(node => matcher(getNodeText(node), node, text, matchNormalizer));
}
diff --git a/src/lib/queries/title.js b/src/lib/queries/title.js
index 6879745..4bcacec 100644
--- a/src/lib/queries/title.js
+++ b/src/lib/queries/title.js
@@ -9,13 +9,13 @@ import {
function queryAllByTitle(
container,
value,
- { filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
+ { selector = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
) {
const matcher = exact ? matches : fuzzyMatches;
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
return Array.from(container.findAll(node => validComponentFilter(node, 'titleComponents')))
- .filter(filter)
+ .filter(selector)
.filter(node => matcher(node.getProp('title'), node, value, matchNormalizer));
}
diff --git a/src/lib/query-helpers.js b/src/lib/query-helpers.js
index 5c8e681..ae61d19 100644
--- a/src/lib/query-helpers.js
+++ b/src/lib/query-helpers.js
@@ -104,13 +104,13 @@ function queryAllByProp(
prop,
container,
match,
- { filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
+ { selector = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
) {
const matcher = exact ? matches : fuzzyMatches;
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
return Array.from(container.findAll(c => c.getProp(prop)))
- .filter(filter)
+ .filter(selector)
.filter(node => {
const value = node.getProp(prop);