@@ -93,36 +93,87 @@ ruleTester.run('jsx-no-leaked-render', rule, {
9393 ` ,
9494 } ,
9595 {
96- options : [ { validStrategies : [ 'ternary' ] } ] ,
9796 code : `
9897 const Component = ({ elements, count }) => {
9998 return <div>{count ? <List elements={elements}/> : null}</div>
10099 }
101100 ` ,
101+ options : [ { validStrategies : [ 'ternary' ] } ] ,
102102 } ,
103103 {
104- options : [ { validStrategies : [ 'coerce' ] } ] ,
105104 code : `
106105 const Component = ({ elements, count }) => {
107106 return <div>{!!count && <List elements={elements}/>}</div>
108107 }
109108 ` ,
109+ options : [ { validStrategies : [ 'coerce' ] } ] ,
110110 } ,
111111 {
112- options : [ { validStrategies : [ 'coerce' , 'ternary' ] } ] ,
113112 code : `
114113 const Component = ({ elements, count }) => {
115114 return <div>{count ? <List elements={elements}/> : null}</div>
116115 }
117116 ` ,
117+ options : [ { validStrategies : [ 'coerce' , 'ternary' ] } ] ,
118118 } ,
119119 {
120+ code : `
121+ const Component = ({ elements, count }) => {
122+ return <div>{!!count && <List elements={elements}/>}</div>
123+ }
124+ ` ,
120125 options : [ { validStrategies : [ 'coerce' , 'ternary' ] } ] ,
126+ } ,
127+ {
121128 code : `
122129 const Component = ({ elements, count }) => {
123130 return <div>{!!count && <List elements={elements}/>}</div>
124131 }
125132 ` ,
133+ options : [ { validStrategies : [ 'coerce' ] } ] ,
134+ } ,
135+
136+ // Fixes for:
137+ // - https://github.com/jsx-eslint/eslint-plugin-react/issues/3292
138+ // - https://github.com/jsx-eslint/eslint-plugin-react/issues/3297
139+ {
140+ // It shouldn't delete valid alternate from ternary expressions when "coerce" is the only valid strategy
141+ code : `
142+ const Component = ({ elements, count }) => {
143+ return (
144+ <div>
145+ <div> {direction ? (direction === "down" ? "▼" : "▲") : ""} </div>
146+ <div>{ containerName.length > 0 ? "Loading several stuff" : "Loading" }</div>
147+ </div>
148+ )
149+ }
150+ ` ,
151+ options : [ { validStrategies : [ 'coerce' ] } ] ,
152+ } ,
153+ {
154+ // It shouldn't delete valid branches from ternary expressions when ["coerce", "ternary"] are only valid strategies
155+ code : `
156+ const Component = ({ elements, count }) => {
157+ return <div>{direction ? (direction === "down" ? "▼" : "▲") : ""}</div>
158+ }
159+ ` ,
160+ options : [ { validStrategies : [ 'coerce' , 'ternary' ] } ] ,
161+ } ,
162+ {
163+ // It shouldn't report nested logical expressions when "coerce" is the only valid strategy
164+ code : `
165+ const Component = ({ direction }) => {
166+ return (
167+ <div>
168+ <div>{!!direction && direction === "down" && "▼"}</div>
169+ <div>{direction === "down" && !!direction && "▼"}</div>
170+ <div>{direction === "down" || !!direction && "▼"}</div>
171+ <div>{(!display || display === DISPLAY.WELCOME) && <span>foo</span>}</div>
172+ </div>
173+ )
174+ }
175+ ` ,
176+ options : [ { validStrategies : [ 'coerce' ] } ] ,
126177 } ,
127178 ] ) ,
128179
0 commit comments