@mapbox/query-selector-contains-node
Version:
Check whether a node is contained by any other node on the page matching a selector
150 lines (137 loc) • 3.82 kB
JavaScript
'use strict';
const querySelectorContainsElement = require('./index');
describe('querySelectorContainsElement', () => {
let container = document.createElement('div');
beforeAll(() => {
document.body.appendChild(container);
});
afterEach(() => {
container.innerHTML = '';
});
test('returns true when element matches selector', () => {
container.innerHTML = `
<div id="el" foo></div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(true);
});
test('returns true when element is child of element matching selector', () => {
container.innerHTML = `
<div foo>
<div id="el"></div>
</div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(true);
});
test('returns true when element is deeply nested descendent of element matching selector', () => {
container.innerHTML = `
<div foo>
<div>
<div>
<div></div>
</div>
</div>
<div>
<div>
<div>
<div>
<div></div>
</div>
</div>
<div>
<div>
<div id="el"></div>
</div>
</div>
</div>
</div>
</div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(true);
});
test('returns true when element is deeply nested descendent of element matching selector', () => {
container.innerHTML = `
<div>
<div>
<div>
<div foo></div>
</div>
</div>
<div>
<div foo>
<div>
<div foo>
<div></div>
</div>
</div>
<div>
<div>
<div id="el"></div>
</div>
</div>
</div>
</div>
</div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(true);
});
test('returns false when element is peer of element matching selector', () => {
container.innerHTML = `
<div foo></div>
<div id="el"></div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(false);
});
test('returns false when no element matches selector', () => {
container.innerHTML = `
<div>
<div id="el"></div>
</div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(false);
});
test('returns false when element is not a child of an element matching selector', () => {
container.innerHTML = `
<div>
<div id="el"></div>
</div>
<div foo></div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(false);
});
test('returns false in complex setup', () => {
container.innerHTML = `
<div>
<div foo>
<div>
<div foo></div>
</div>
</div>
<div>
<div>
<div>
<div foo>
<div></div>
</div>
</div>
<div>
<div>
<div id="el">
<div foo></div>
</div>
</div>
</div>
</div>
</div>
</div>
`;
const element = document.getElementById('el');
expect(querySelectorContainsElement('[foo]', element)).toBe(false);
});
});