/* eslint-env jest */
/**
* @fileoverview Enforce links may not point to just #.
* @author Ethan Cohen
*/
// -----------------------------------------------------------------------------
// Requirements
// -----------------------------------------------------------------------------
import { RuleTester } from 'eslint';
import parserOptionsMapper from '../../__util__/parserOptionsMapper';
import rule from '../../../src/rules/href-no-hash';
// -----------------------------------------------------------------------------
// Tests
// -----------------------------------------------------------------------------
const ruleTester = new RuleTester();
const expectedError = {
message: 'Links must not point to "#". Use a more descriptive href or use a button instead.',
type: 'JSXOpeningElement',
};
const components = [{
components: ['Anchor', 'Link'],
}];
const specialLink = [{
specialLink: ['hrefLeft', 'hrefRight'],
}];
const componentsAndSpecialLink = [{
components: ['Anchor'],
specialLink: ['hrefLeft'],
}];
ruleTester.run('href-no-hash', rule, {
valid: [
// DEFAULT ELEMENT 'a' TESTS
{ code: ';' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '
' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: '' },
{ code: 'test' },
{ code: '' },
// CUSTOM ELEMENT TEST FOR ARRAY OPTION
{ code: ';', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: ';', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
{ code: '', options: components },
// CUSTOM PROP TESTS
{ code: ';', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: 'test', options: specialLink },
{ code: '', options: specialLink },
{ code: ';', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: '', options: specialLink },
{ code: 'test', options: specialLink },
{ code: '', options: specialLink },
// CUSTOM BOTH COMPONENTS AND SPECIALLINK TESTS
{ code: ';', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: '', options: componentsAndSpecialLink },
{ code: 'test', options: componentsAndSpecialLink },
].map(parserOptionsMapper),
invalid: [
// DEFAULT ELEMENT 'a' TESTS
{ code: '', errors: [expectedError] },
{ code: '', errors: [expectedError] },
{ code: '', errors: [expectedError] },
// CUSTOM ELEMENT TEST FOR ARRAY OPTION
{ code: '', errors: [expectedError], options: components },
{ code: '', errors: [expectedError], options: components },
{
code: '',
errors: [expectedError],
options: components,
},
{ code: '', errors: [expectedError], options: components },
{ code: '', errors: [expectedError], options: components },
{
code: '',
errors: [expectedError],
options: components,
},
// CUSTOM PROP TESTS
{ code: '', errors: [expectedError], options: specialLink },
{ code: '', errors: [expectedError], options: specialLink },
{
code: '',
errors: [expectedError],
options: specialLink,
},
{ code: '', errors: [expectedError], options: specialLink },
{ code: '', errors: [expectedError], options: specialLink },
{
code: '',
errors: [expectedError],
options: specialLink,
},
// CUSTOM BOTH COMPONENTS AND SPECIALLINK TESTS
{ code: '', errors: [expectedError], options: componentsAndSpecialLink },
{ code: '', errors: [expectedError], options: componentsAndSpecialLink },
{
code: '',
errors: [expectedError],
options: componentsAndSpecialLink,
},
].map(parserOptionsMapper),
});