179 lines
5.3 KiB
Plaintext
179 lines
5.3 KiB
Plaintext
|
import expect from 'expect';
|
||
|
import mayContainChildComponent from '../../../src/util/mayContainChildComponent';
|
||
|
import JSXAttributeMock from '../../../__mocks__/JSXAttributeMock';
|
||
|
import JSXElementMock from '../../../__mocks__/JSXElementMock';
|
||
|
import JSXExpressionContainerMock from '../../../__mocks__/JSXExpressionContainerMock';
|
||
|
|
||
|
describe('mayContainChildComponent', () => {
|
||
|
describe('no FancyComponent', () => {
|
||
|
it('should return false', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('span', [], []),
|
||
|
]),
|
||
|
]),
|
||
|
]),
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('img', [
|
||
|
JSXAttributeMock('src', 'some/path'),
|
||
|
]),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
5,
|
||
|
)).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
describe('contains an indicated component', () => {
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('input'),
|
||
|
]),
|
||
|
'input',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('FancyComponent is outside of default depth, should return false', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
)).toBe(false);
|
||
|
});
|
||
|
it('FancyComponent is inside of custom depth, should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
2,
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('deep nesting, should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('span', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
]),
|
||
|
]),
|
||
|
]),
|
||
|
]),
|
||
|
JSXElementMock('span', [], []),
|
||
|
JSXElementMock('img', [
|
||
|
JSXAttributeMock('src', 'some/path'),
|
||
|
]),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
6,
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
describe('Intederminate situations', () => {
|
||
|
describe('expression container children', () => {
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXExpressionContainerMock('mysteryBox'),
|
||
|
]),
|
||
|
'FancyComponent',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('Glob name matching', () => {
|
||
|
describe('component name contains question mark ? - match any single character', () => {
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'Fanc?Co??onent',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('should return false', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'FancyComponent?',
|
||
|
)).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('component name contains asterisk * - match zero or more characters', () => {
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'Fancy*',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'*Component',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('should return true', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('FancyComponent'),
|
||
|
]),
|
||
|
'Fancy*C*t',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('using a custom elementType function', () => {
|
||
|
it('should return true when the custom elementType returns the proper name', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('CustomInput'),
|
||
|
]),
|
||
|
'input',
|
||
|
2,
|
||
|
() => 'input',
|
||
|
)).toBe(true);
|
||
|
});
|
||
|
it('should return false when the custom elementType returns a wrong name', () => {
|
||
|
expect(mayContainChildComponent(
|
||
|
JSXElementMock('div', [], [
|
||
|
JSXElementMock('CustomInput'),
|
||
|
]),
|
||
|
'input',
|
||
|
2,
|
||
|
() => 'button',
|
||
|
)).toBe(false);
|
||
|
});
|
||
|
});
|
||
|
});
|