123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- /* eslint-env mocha */
- import assert from 'assert';
- import { getOpeningElement, setParserName } from '../helper';
- import hasProp, { hasAnyProp, hasEveryProp } from '../../src/hasProp';
- describe('hasProp', () => {
- beforeEach(() => {
- setParserName('babel');
- });
- it('should export a function', () => {
- const expected = 'function';
- const actual = typeof hasProp;
- assert.equal(actual, expected);
- });
- it('should return false if no arguments are provided', () => {
- const expected = false;
- const actual = hasProp();
- assert.equal(actual, expected);
- });
- it('should return false if the prop is absent', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = false;
- const actual = hasProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if the prop exists', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = true;
- const actual = hasProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if the prop may exist in spread loose mode', () => {
- const code = '<div {...props} />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- spreadStrict: false,
- };
- const expected = true;
- const actual = hasProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return false if the prop is considered absent in case-sensitive mode', () => {
- const code = '<div ID="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- ignoreCase: false,
- };
- const expected = false;
- const actual = hasProp(props, prop, options);
- assert.equal(actual, expected);
- });
- });
- describe('hasAnyProp tests', () => {
- it('should export a function', () => {
- const expected = 'function';
- const actual = typeof hasAnyProp;
- assert.equal(actual, expected);
- });
- it('should return false if no arguments are provided', () => {
- const expected = false;
- const actual = hasAnyProp();
- assert.equal(actual, expected);
- });
- it('should return false if the prop is absent', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = false;
- const actual = hasAnyProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return false if all props are absent in array', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = ['id', 'className'];
- const expected = false;
- const actual = hasAnyProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return false if all props are absent in space delimited string', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = 'id className';
- const expected = false;
- const actual = hasAnyProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return true if the prop exists', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = true;
- const actual = hasAnyProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if any prop exists in array', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['className', 'id'];
- const expected = true;
- const actual = hasAnyProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if any prop exists in space delimited string', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'className id';
- const expected = true;
- const actual = hasAnyProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if the prop may exist in spread loose mode', () => {
- const code = '<div {...props} />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- spreadStrict: false,
- };
- const expected = true;
- const actual = hasAnyProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return true if any prop may exist in spread loose mode', () => {
- const code = '<div {...props} />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['id', 'className'];
- const options = {
- spreadStrict: false,
- };
- const expected = true;
- const actual = hasAnyProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return false if the prop is considered absent in case-sensitive mode', () => {
- const code = '<div ID="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- ignoreCase: false,
- };
- const expected = false;
- const actual = hasAnyProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return false if all props are considered absent in case-sensitive mode', () => {
- const code = '<div ID="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['id', 'iD', 'className'];
- const options = {
- ignoreCase: false,
- };
- const expected = false;
- const actual = hasAnyProp(props, prop, options);
- assert.equal(actual, expected);
- });
- });
- describe('hasEveryProp tests', () => {
- it('should export a function', () => {
- const expected = 'function';
- const actual = typeof hasEveryProp;
- assert.equal(actual, expected);
- });
- it('should return true if no arguments are provided', () => {
- const expected = true;
- const actual = hasEveryProp();
- assert.equal(actual, expected);
- });
- it('should return false if the prop is absent', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = false;
- const actual = hasEveryProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return false if any props are absent in array', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = ['id', 'className'];
- const expected = false;
- const actual = hasEveryProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return false if all props are absent in array', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = ['id', 'className'];
- const expected = false;
- const actual = hasEveryProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return false if any props are absent in space delimited string', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = 'id className';
- const expected = false;
- const actual = hasEveryProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return false if all props are absent in space delimited string', () => {
- const code = '<div />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const propsToCheck = 'id className';
- const expected = false;
- const actual = hasEveryProp(props, propsToCheck);
- assert.equal(actual, expected);
- });
- it('should return true if the prop exists', () => {
- const code = '<div id="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const expected = true;
- const actual = hasEveryProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if all props exist in array', () => {
- const code = '<div id="foo" className="box" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['className', 'id'];
- const expected = true;
- const actual = hasEveryProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if all props exist in space delimited string', () => {
- const code = '<div id="foo" className="box" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'className id';
- const expected = true;
- const actual = hasEveryProp(props, prop);
- assert.equal(actual, expected);
- });
- it('should return true if the props may exist in spread loose mode', () => {
- const code = '<div {...props} />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- spreadStrict: false,
- };
- const expected = true;
- const actual = hasEveryProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return true if all props may exist in spread loose mode', () => {
- const code = '<div {...props} />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['id', 'className'];
- const options = {
- spreadStrict: false,
- };
- const expected = true;
- const actual = hasEveryProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return false if the prop is considered absent in case-sensitive mode', () => {
- const code = '<div ID="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = 'id';
- const options = {
- ignoreCase: false,
- };
- const expected = false;
- const actual = hasEveryProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return false if all props are considered absent in case-sensitive mode', () => {
- const code = '<div ID="foo" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['id', 'iD', 'className'];
- const options = {
- ignoreCase: false,
- };
- const expected = false;
- const actual = hasEveryProp(props, prop, options);
- assert.equal(actual, expected);
- });
- it('should return true if all props are considered present in case-sensitive mode', () => {
- const code = '<div ID="foo" className="box" />';
- const node = getOpeningElement(code);
- const { attributes: props } = node;
- const prop = ['ID', 'className'];
- const options = {
- ignoreCase: false,
- };
- const expected = true;
- const actual = hasEveryProp(props, prop, options);
- assert.equal(actual, expected);
- });
- });
|