Skip to content

Commit

Permalink
Change tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jackyho112 committed Aug 16, 2017
1 parent b180919 commit c66def5
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 184 deletions.
35 changes: 6 additions & 29 deletions lib/rules/jsx-curly-brace-presence.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,6 @@ module.exports = {
return rawStringValue.includes('\\');
}

function containsQuote(string) {
return string.match(/'|"/g);
}

/**
* Report and fix an unnecessary curly brace violation on a node
* @param {ASTNode} node - The AST node with an unnecessary JSX expression
Expand Down Expand Up @@ -95,34 +91,15 @@ module.exports = {
});
}

function wrapLiteralNodeInJSXExpression(fixer, literalNode) {
const parentType = literalNode.parent.type;
const raw = literalNode.raw;
const value = literalNode.value;
const valueContainsQuote = containsQuote(value);
let text = raw;

if (parentType === 'JSXAttribute' && valueContainsQuote) {
return fixer.replaceText(literalNode, `{${raw}}`);
}

if (parentType === 'JSXElement' && valueContainsQuote) {
// JSON.stringify is used because the value could contain both single
// and double quoted text and the method will account for both
// situations by wrapping the whole text in double qutoes and escaping
// any double quote.
return fixer.replaceText(literalNode, `{${JSON.stringify(value)}}`);
}

return fixer.replaceText(literalNode, `{"${text}"}`);
}

function reportMissingCurly(literalNode) {
context.report({
node: literalNode,
message: 'Need to wrap this literal in a JSX expression.',
fix: function(fixer) {
return wrapLiteralNodeInJSXExpression(fixer, literalNode);
const expression = literalNode.parent.type === 'JSXAttribute' ?
`{${literalNode.raw}}` : `{${JSON.stringify(literalNode.value)}}`;

return fixer.replaceText(literalNode, expression);
}
});
}
Expand Down Expand Up @@ -153,11 +130,11 @@ module.exports = {
return (
parentType === 'JSXAttribute' &&
typeof config.props === 'string' &&
config.props.split(',')[0] === ruleCondition
config.props === ruleCondition
) || (
parentType === 'JSXElement' &&
typeof config.children === 'string' &&
config.children.split(',')[0] === ruleCondition
config.children === ruleCondition
);
}

Expand Down
166 changes: 11 additions & 155 deletions tests/lib/rules/jsx-curly-brace-presence.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,14 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
code: '<MyComponent>{\'foo\'}</MyComponent>',
options: [{children: 'always'}]
},
{
code: '<MyComponent prop={\"bar\"}>foo</MyComponent>',
options: [{props: 'always'}]
},
{
code: '<MyComponent>{\"foo\"}</MyComponent>',
options: [{children: 'always'}]
},
{
code: '<MyComponent>{\'foo\'}</MyComponent>',
options: [{children: 'ignore'}]
Expand Down Expand Up @@ -225,7 +233,7 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>foo</MyComponent>',
options: [{props: 'always'}],
errors: [{message: missingCurlyMessage}]
},
Expand All @@ -235,18 +243,6 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
options: [{children: 'always'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\"bar\">foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>foo</MyComponent>',
options: [{props: 'always,single'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent>foo bar </MyComponent>',
output: '<MyComponent>{\'foo bar \'}</MyComponent>',
options: [{children: 'always,single'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent>foo bar <App/></MyComponent>',
output: '<MyComponent>{\"foo bar \"}<App/></MyComponent>',
Expand All @@ -255,7 +251,7 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
},
{
code: '<MyComponent>foo\\nbar</MyComponent>',
output: '<MyComponent>{\"foo\\nbar\"}</MyComponent>',
output: '<MyComponent>{\"foo\\\\nbar\"}</MyComponent>',
options: [{children: 'always'}],
errors: [{message: missingCurlyMessage}]
},
Expand All @@ -269,148 +265,8 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>{\"foo\"}</MyComponent>',
options: ['always'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>{\'foo\'}</MyComponent>',
options: ['always,single'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>{\"foo\"}</MyComponent>',
options: ['always,double'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>{\'foo\'}</MyComponent>',
options: [{props: 'always,double', children: 'always,single'}],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\"bar\">foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>{\"foo\"}</MyComponent>',
options: [{props: 'always,single', children: 'always,double'}],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\"bar\">foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>{\"foo\"}</MyComponent>',
options: [{props: 'always,single', children: 'always,double'}],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\"bar\">foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>{\'foo\'}</MyComponent>',
options: [{props: 'always,single', children: 'always,single'}],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>{\"foo\"}</MyComponent>',
options: [{props: 'always,double', children: 'always,double'}],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo<App/></MyComponent>',
output: '<MyComponent prop={\"bar\"}>{\"foo\"}<App/></MyComponent>',
options: ['always,double'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'><App/>foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}><App/>{\"foo\"}</MyComponent>',
options: ['always,double'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\'>foo</MyComponent>',
output: '<MyComponent prop={\'bar\'}>foo</MyComponent>',
options: [{props: 'always,original'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\"bar\">foo</MyComponent>',
output: '<MyComponent prop={\"bar\"}>foo</MyComponent>',
options: [{props: 'always,original'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\'bar \\n "hello" foo\'>foo</MyComponent>',
output: '<MyComponent prop={\'bar \\n "hello" foo\'}>foo</MyComponent>',
options: [{props: 'always,original'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\"bar \\n bar \'hello\' foo \">foo</MyComponent>',
output: '<MyComponent prop={\"bar \\n bar \'hello\' foo \"}>foo</MyComponent>',
options: [{props: 'always,original'}],
errors: [{message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\'bar \\n bar \"hello\" foo \'>foo</MyComponent>',
output: '<MyComponent prop={\'bar \\n bar \"hello\" foo \'}>{"foo"}</MyComponent>',
options: ['always,original'],
errors: [{message: missingCurlyMessage}, {message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\'foo\'>foo \\n \'bar\' "foo"</MyComponent>',
output: '<MyComponent prop={\'foo\'}>{"foo \\\\n \'bar\' \\"foo\\""}</MyComponent>',
options: ['always,original'],
errors: [{message: missingCurlyMessage}, {message: missingCurlyMessage}]
},
{
code: '<MyComponent prop=\'bar\"bar\"foo\'>foo"bar"</MyComponent>',
output: '<MyComponent prop={\'bar\"bar\"foo\'}>{\"foo\\"bar\\"\"}</MyComponent>',
options: ['always,single'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop=\'bar\"bar\"foo\'>foo"bar"</MyComponent>',
output: '<MyComponent prop={\'bar\"bar\"foo\'}>{\"foo\\"bar\\"\"}</MyComponent>',
options: ['always,double'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop="bar\'bar\'foo">foo\'bar\'</MyComponent>',
output: '<MyComponent prop={"bar\'bar\'foo"}>{"foo\'bar\'"}</MyComponent>',
options: ['always,single'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
},
{
code: '<MyComponent prop="bar\'bar\'foo">foo\'bar\'</MyComponent>',
output: '<MyComponent prop={"bar\'bar\'foo"}>{"foo\'bar\'"}</MyComponent>',
options: ['always,double'],
options: ['always'],
errors: [
{message: missingCurlyMessage}, {message: missingCurlyMessage}
]
Expand Down

0 comments on commit c66def5

Please sign in to comment.