@@ -73,6 +73,23 @@ function testCase(message, content, errors = [], {
7373 return result ;
7474}
7575
76+ function rawTestCase ( message , code , errors = [ ] ) {
77+ if ( ! Array . isArray ( errors ) ) {
78+ errors = [ errors ] ;
79+ }
80+
81+ const result = {
82+ options : message ? [ { message} ] : [ ] ,
83+ code,
84+ } ;
85+
86+ if ( errors . length > 0 ) {
87+ result . errors = errors ;
88+ }
89+
90+ return result ;
91+ }
92+
7693const statics = [
7794 'null' ,
7895 'true' ,
@@ -180,6 +197,21 @@ ruleTester.run('assertion-arguments', rule, {
180197 testCase ( false , 't.true(true, \'message\');' ) ,
181198 testCase ( false , 't.truthy(\'unicorn\', \'message\');' ) ,
182199 testCase ( false , 't.snapshot(value, \'message\');' ) ,
200+ testCase ( false , 't.snapshot(value, {formatAsCodeBlock: true});' ) ,
201+ testCase ( false , 't.snapshot(value, {formatAsCodeBlock: true}, \'message\');' ) ,
202+ testCase ( false , 't.snapshot(value, {\'formatAsCodeBlock\': true}, \'message\');' ) ,
203+ testCase ( false , 't.snapshot(value, {[\'formatAsCodeBlock\']: true}, \'message\');' ) ,
204+ testCase ( false , 't.snapshot(value, opts, \'message\');' ) ,
205+ testCase ( false , 'const key = getKey(); t.snapshot(value, {[key]: true}, \'message\');' ) ,
206+ testCase ( false , 't.snapshot(value, {...options}, \'message\');' ) ,
207+ testCase ( false , 'const options = {...{formatAsCodeBlock: true}}; t.snapshot(value, options, \'message\');' ) ,
208+ testCase ( false , 'const options = {formatAsCodeBlock: true}; t.snapshot(value, options, \'message\');' ) ,
209+ testCase ( false , 'const options = true ? {formatAsCodeBlock: true} : {}; t.snapshot(value, options, \'message\');' ) ,
210+ testCase ( false , 'let options = {formatAsCodeBlock: true}; t.snapshot(value, options, \'message\'); options = {};' ) ,
211+ testCase ( false , 'let options = {formatAsCodeBlock: true}; function reset() { options = {}; } t.snapshot(value, options, \'message\');' ) ,
212+ testCase ( false , 'const message = \'ok\'; t.snapshot(value, message);' ) ,
213+ testCase ( false , 'const message = \'ok\'; t.snapshot(value, {formatAsCodeBlock: true}, message);' ) ,
214+ rawTestCase ( false , 'const options = {formatAsCodeBlock: true}; test(t => { t.snapshot(value, options, \'message\'); });' ) ,
183215 testCase ( false , 't.context.plan();' ) ,
184216 testCase ( false , 't.teardown(() => {});' ) ,
185217 testCase ( false , 't.timeout(100, \'message\');' ) ,
@@ -239,6 +271,15 @@ ruleTester.run('assertion-arguments', rule, {
239271 testCase ( 'always' , 't.ifError(new Error(), \'message\');' ) ,
240272 testCase ( 'always' , 't.is.skip(\'same\', \'same\', \'message\');' ) ,
241273 testCase ( 'always' , 't.snapshot(value, \'message\');' ) ,
274+ testCase ( 'always' , 't.snapshot(value, {formatAsCodeBlock: true}, \'message\');' ) ,
275+ testCase ( 'always' , 't.snapshot(value, {\'formatAsCodeBlock\': true}, \'message\');' ) ,
276+ testCase ( 'always' , 't.snapshot(value, {[\'formatAsCodeBlock\']: true}, \'message\');' ) ,
277+ testCase ( 'always' , 't.snapshot(value, opts, \'message\');' ) ,
278+ testCase ( 'always' , 'const key = getKey(); t.snapshot(value, {[key]: true});' ) ,
279+ testCase ( 'always' , 't.snapshot(value, {...options});' ) ,
280+ testCase ( 'always' , 'const options = {formatAsCodeBlock: true}; t.snapshot(value, options, \'message\');' ) ,
281+ testCase ( 'always' , 'const message = \'ok\'; t.snapshot(value, message);' ) ,
282+ testCase ( 'always' , 'const message = \'ok\'; t.snapshot(value, {formatAsCodeBlock: true}, message);' ) ,
242283 testCase ( 'always' , 't.teardown(() => {});' ) ,
243284 testCase ( 'always' , 't.timeout(100, \'message\');' ) ,
244285 testCase ( 'always' , 't.try(tt => tt.pass(\'ok\'));' ) ,
@@ -276,6 +317,12 @@ ruleTester.run('assertion-arguments', rule, {
276317 testCase ( 'never' , 't.ifError(new Error());' ) ,
277318 testCase ( 'never' , 't.is.skip(\'same\', \'same\');' ) ,
278319 testCase ( 'never' , 't.snapshot(value);' ) ,
320+ testCase ( 'never' , 't.snapshot(value, {formatAsCodeBlock: true});' ) ,
321+ testCase ( 'never' , 't.snapshot(value, {\'formatAsCodeBlock\': true});' ) ,
322+ testCase ( 'never' , 't.snapshot(value, opts);' ) ,
323+ testCase ( 'never' , 'const key = getKey(); t.snapshot(value, {[key]: true});' ) ,
324+ testCase ( 'never' , 't.snapshot(value, {...options});' ) ,
325+ testCase ( 'never' , 'const options = {formatAsCodeBlock: true}; t.snapshot(value, options);' ) ,
279326 testCase ( 'never' , 't.teardown(() => {});' ) ,
280327 testCase ( 'never' , 't.timeout(100);' ) ,
281328 testCase ( 'never' , 't.try(tt => tt.pass());' ) ,
@@ -410,6 +457,10 @@ ruleTester.run('assertion-arguments', rule, {
410457 testCase ( false , 't.ifError(new Error(), \'message\', \'extra argument\');' , tooManyError ( ) ) ,
411458 testCase ( false , 't.is.skip(\'same\', \'same\', \'message\', \'extra argument\');' , tooManyError ( ) ) ,
412459 testCase ( false , 't.snapshot(value, \'message\', \'extra argument\');' , tooManyError ( ) ) ,
460+ testCase ( false , 't.snapshot(value, TypeError, \'message\');' , tooManyError ( ) ) ,
461+ testCase ( false , 'const options = {}; t.snapshot(value, options, \'message\');' , tooManyError ( ) ) ,
462+ testCase ( false , 'const options = true ? {} : {}; t.snapshot(value, options, \'message\');' , tooManyError ( ) ) ,
463+ testCase ( false , 't.snapshot(value, {formatAsCodeBlock: true}, \'message\', \'extra argument\');' , tooManyError ( ) ) ,
413464 testCase ( false , 't.teardown(() => {}, \'extra argument\');' , tooManyError ( ) ) ,
414465 testCase ( false , 't.timeout(1, \'message\', \'extra argument\');' , tooManyError ( ) ) ,
415466
@@ -436,6 +487,13 @@ ruleTester.run('assertion-arguments', rule, {
436487 testCase ( 'always' , 't.ifError(new Error());' , missingError ) ,
437488 testCase ( 'always' , 't.is.skip(\'same\', \'same\');' , missingError ) ,
438489 testCase ( 'always' , 't.snapshot(value);' , missingError ) ,
490+ testCase ( 'always' , 't.snapshot(value, {formatAsCodeBlock: true});' , missingError ) ,
491+ testCase ( 'always' , 'const key = \'formatAsCodeBlock\'; t.snapshot(value, {[key]: true});' , missingError ) ,
492+ testCase ( 'always' , 'const options = {formatAsCodeBlock: true}; t.snapshot(value, {...options});' , missingError ) ,
493+ testCase ( 'always' , 'const options = true ? {formatAsCodeBlock: true} : {}; t.snapshot(value, options);' , missingError ) ,
494+ rawTestCase ( 'always' , 'const options = {formatAsCodeBlock: true}; test(t => { t.snapshot(value, options); });' , missingError ) ,
495+ rawTestCase ( 'always' , 'const key = \'formatAsCodeBlock\'; const options = {[key]: true}; test(t => { const key = \'other\'; t.snapshot(value, options); });' , missingError ) ,
496+ rawTestCase ( 'always' , 'const base = {formatAsCodeBlock: true}; const options = {...base}; test(t => { const base = {}; t.snapshot(value, options); });' , missingError ) ,
439497
440498 testCase ( 'never' , 't.assert(true, \'message\');' , foundError ) ,
441499 testCase ( 'never' , 't.pass(\'message\');' , foundError ) ,
@@ -458,6 +516,8 @@ ruleTester.run('assertion-arguments', rule, {
458516 testCase ( 'never' , 't.ifError(new Error(), \'message\');' , foundError ) ,
459517 testCase ( 'never' , 't.is.skip(\'same\', \'same\', \'message\');' , foundError ) ,
460518 testCase ( 'never' , 't.snapshot(value, \'message\');' , foundError ) ,
519+ testCase ( 'never' , 't.snapshot(value, {formatAsCodeBlock: true}, \'message\');' , foundError ) ,
520+ testCase ( 'never' , 't.snapshot(value, opts, \'message\');' , foundError ) ,
461521
462522 testCase ( false , 't.end(\'too many\', \'arguments\');' , tooManyError ( ) ) ,
463523 testCase ( false , 't.end.skip(\'too many\', \'arguments\');' , tooManyError ( ) ) ,
@@ -503,6 +563,12 @@ ruleTester.run('assertion-arguments', rule, {
503563 testCase ( false , 't.deepEqual({}, {}, 42);' , messageIsNotStringError ) ,
504564 testCase ( false , 't.fail({});' , messageIsNotStringError ) ,
505565 testCase ( false , 'let message = "ok"; message = false; t.assert(true, message);' , messageIsNotStringError ) ,
566+ testCase ( false , 'let message = "ok"; { message = false; } t.assert(true, message);' , messageIsNotStringError ) ,
567+ rawTestCase ( false , 'const message = true; test(t => { t.assert(true, message); });' , messageIsNotStringError ) ,
568+ testCase ( false , 't.snapshot(value, true);' , messageIsNotStringError ) ,
569+ testCase ( false , 't.snapshot(value, TypeError);' , messageIsNotStringError ) ,
570+ testCase ( false , 't.snapshot(value, {formatAsCodeBlock: true}, true);' , messageIsNotStringError ) ,
571+ testCase ( false , 'const message = true; t.snapshot(value, {formatAsCodeBlock: true}, message);' , messageIsNotStringError ) ,
506572
507573 // Error constructors are not valid assertion messages
508574 testCase ( false , 't.notThrows(() => {}, TypeError);' , messageIsNotStringError ) ,
0 commit comments