| /** |
| * @fileoverview Disallows or enforces spaces inside computed properties. |
| * @author Jamund Ferguson |
| * @copyright 2015 Jamund Ferguson. All rights reserved. |
| */ |
| 'use strict' |
| |
| // ------------------------------------------------------------------------------ |
| // Requirements |
| // ------------------------------------------------------------------------------ |
| |
| var RuleTester = require('eslint').RuleTester |
| var rule = require('../rules/computed-property-even-spacing') |
| |
| // ------------------------------------------------------------------------------ |
| // Tests |
| // ------------------------------------------------------------------------------ |
| |
| var ruleTester = new RuleTester() |
| ruleTester.run('computed-property-even-spacing', rule, { |
| valid: [ |
| |
| // even |
| { code: 'bar[ foo ]', options: ['even'] }, |
| { code: 'bar[foo]', options: ['even'] }, |
| { code: "bar['foo']", options: ['even'] }, |
| { code: "bar[ 'foo' ]", options: ['even'] }, |
| |
| // default - never |
| { code: 'obj[foo]' }, |
| { code: "obj['foo']" }, |
| { code: 'var x = {[b]: a}', parserOptions: { ecmaVersion: 6 } }, |
| |
| // always |
| { code: 'obj[ foo ]', options: ['always'] }, |
| { code: 'obj[\nfoo\n]', options: ['always'] }, |
| { code: "obj[ 'foo' ]", options: ['always'] }, |
| { code: "obj[ 'foo' + 'bar' ]", options: ['always'] }, |
| { code: 'obj[ obj2[ foo ] ]', options: ['always'] }, |
| { code: 'obj.map(function(item) { return [\n1,\n2,\n3,\n4\n]; })', options: ['always'] }, |
| { code: "obj[ 'map' ](function(item) { return [\n1,\n2,\n3,\n4\n]; })", options: ['always'] }, |
| { code: "obj[ 'for' + 'Each' ](function(item) { return [\n1,\n2,\n3,\n4\n]; })", options: ['always'] }, |
| { code: 'obj[ obj2[ foo ] ]', options: ['always'] }, |
| { code: 'var foo = obj[ 1 ]', options: ['always'] }, |
| { code: "var foo = obj[ 'foo' ];", options: ['always'] }, |
| { code: 'var foo = obj[ [1, 1] ];', options: ['always'] }, |
| |
| // always - objectLiteralComputedProperties |
| { code: 'var x = {[ "a" ]: a}', options: ['always'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var y = {[ x ]: a}', options: ['always'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var x = {[ "a" ]() {}}', options: ['always'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var y = {[ x ]() {}}', options: ['always'], parserOptions: { ecmaVersion: 6 } }, |
| |
| // always - unrelated cases |
| { code: 'var foo = {};', options: ['always'] }, |
| { code: 'var foo = [];', options: ['always'] }, |
| |
| // never |
| { code: 'obj[foo]', options: ['never'] }, |
| { code: "obj['foo']", options: ['never'] }, |
| { code: "obj['foo' + 'bar']", options: ['never'] }, |
| { code: "obj['foo'+'bar']", options: ['never'] }, |
| { code: 'obj[obj2[foo]]', options: ['never'] }, |
| { code: 'obj.map(function(item) { return [\n1,\n2,\n3,\n4\n]; })', options: ['never'] }, |
| { code: "obj['map'](function(item) { return [\n1,\n2,\n3,\n4\n]; })", options: ['never'] }, |
| { code: "obj['for' + 'Each'](function(item) { return [\n1,\n2,\n3,\n4\n]; })", options: ['never'] }, |
| { code: "obj['for' + 'Each'](function(item) { return [\n1,\n2,\n3,\n4\n]; })", options: ['never'] }, |
| { code: 'obj[\nfoo]', options: ['never'] }, |
| { code: 'obj[foo\n]', options: ['never'] }, |
| { code: 'var foo = obj[1]', options: ['never'] }, |
| { code: "var foo = obj['foo'];", options: ['never'] }, |
| { code: 'var foo = obj[[ 1, 1 ]];', options: ['never'] }, |
| |
| // never - objectLiteralComputedProperties |
| { code: 'var x = {["a"]: a}', options: ['never'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var y = {[x]: a}', options: ['never'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var x = {["a"]() {}}', options: ['never'], parserOptions: { ecmaVersion: 6 } }, |
| { code: 'var y = {[x]() {}}', options: ['never'], parserOptions: { ecmaVersion: 6 } }, |
| |
| // never - unrelated cases |
| { code: 'var foo = {};', options: ['never'] }, |
| { code: 'var foo = [];', options: ['never'] }, |
| { code: 'bar[ foo ]', options: ['even'] }, |
| |
| // even - unrelated cases |
| { code: 'const { a, ...b } = obj', options: ['even'], parserOptions: { ecmaVersion: 6, ecmaFeatures: { experimentalObjectRestSpread: true } } }, |
| { code: 'func(a, { ...b })', options: ['even'], parserOptions: { ecmaVersion: 6, ecmaFeatures: { experimentalObjectRestSpread: true } } } |
| |
| ], |
| |
| invalid: [ |
| |
| // even |
| { code: "bar[ 'foo' ]", options: ['even'], errors: [{ message: 'Expected 1 or 0 spaces around "[" and "]"' }] }, |
| { code: "bar['foo' ]", options: ['even'], errors: [{ message: 'Expected 1 or 0 spaces around "[" and "]"' }] }, |
| { code: "bar[ 'foo' ]", options: ['even'], errors: [{ message: 'Expected 1 or 0 spaces around "[" and "]"' }] }, |
| { code: "bar[ 'foo']", options: ['even'], errors: [{ message: 'Expected 1 or 0 spaces around "[" and "]"' }] }, |
| { code: "bar[\n'foo' ]", options: ['even'], errors: [{ message: 'Expected "[" and "]" to be on the same line' }] }, |
| { code: "bar[\n'foo' ]", options: ['even'], errors: [{ message: 'Expected "[" and "]" to be on the same line' }] }, |
| { code: "bar[\n'foo' ]", options: ['even'], errors: [{ message: 'Expected "[" and "]" to be on the same line' }] }, |
| { code: "bar[\n\t'foo' ]", options: ['even'], errors: [{ message: 'Expected "[" and "]" to be on the same line' }] }, |
| { code: "bar[\n\t'foo'\n]", options: ['even'], errors: [{ message: 'Expected "[" and "]" to be on the same line' }] }, |
| |
| { |
| code: 'var foo = obj[ 1];', |
| options: ['always'], |
| errors: [ |
| { |
| message: "A space is required before ']'", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[1 ];', |
| options: ['always'], |
| errors: [ |
| { |
| message: "A space is required after '['", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[ 1];', |
| options: ['never'], |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[1 ];', |
| options: ['never'], |
| errors: [ |
| { |
| message: "There should be no space before ']'", |
| type: 'MemberExpression' |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[ 1];', |
| options: ['always'], |
| errors: [ |
| { |
| message: "A space is required before ']'", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[1 ];', |
| options: ['always'], |
| errors: [ |
| { |
| message: "A space is required after '['", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'obj[ foo ]', |
| options: ['never'], |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'MemberExpression', |
| line: 1 |
| }, |
| { |
| message: "There should be no space before ']'", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'obj[foo ]', |
| options: ['never'], |
| errors: [ |
| { |
| message: "There should be no space before ']'", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'obj[ foo]', |
| options: ['never'], |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var foo = obj[1]', |
| options: ['always'], |
| errors: [ |
| { |
| message: "A space is required after '['", |
| type: 'MemberExpression', |
| line: 1 |
| }, |
| { |
| message: "A space is required before ']'", |
| type: 'MemberExpression', |
| line: 1 |
| } |
| ] |
| }, |
| |
| // always - objectLiteralComputedProperties |
| { |
| code: 'var x = {[a]: b}', |
| options: ['always'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "A space is required after '['", |
| type: 'Property', |
| line: 1 |
| }, |
| { |
| message: "A space is required before ']'", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var x = {[a ]: b}', |
| options: ['always'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "A space is required after '['", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var x = {[ a]: b}', |
| options: ['always'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "A space is required before ']'", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| |
| // never - objectLiteralComputedProperties |
| { |
| code: 'var x = {[ a ]: b}', |
| options: ['never'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'Property', |
| line: 1 |
| }, |
| { |
| message: "There should be no space before ']'", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var x = {[a ]: b}', |
| options: ['never'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "There should be no space before ']'", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var x = {[ a]: b}', |
| options: ['never'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| }, |
| { |
| code: 'var x = {[ a\n]: b}', |
| options: ['never'], |
| parserOptions: { ecmaVersion: 6 }, |
| errors: [ |
| { |
| message: "There should be no space after '['", |
| type: 'Property', |
| line: 1 |
| } |
| ] |
| } |
| |
| ] |
| }) |