@@ -448,20 +448,36 @@ describe("compiler tests", () => {
448448 }
449449 } )
450450
451- it ( "should transform `console` calls with identifier arguments" , ( ) => {
451+ it ( "should transform `console` references and calls with identifier arguments" , ( ) => {
452452 const lines = [
453+ "console" ,
453454 "console.a(b)" ,
454- 'console["a"](b)'
455+ 'console.a("b", c)' ,
456+ 'console["a"](b)' ,
457+ "new console.Console(a)" ,
458+ "class C extends console.Console {}" ,
459+ "const a = { console }" ,
460+ "const a = { [console]: console }" ,
461+ "const a = { console() { console } }" ,
462+ "const a = () => console"
455463 ]
456464
457465 const compiled = [
466+ "_.g.console" ,
458467 "_.g.console.a(b)" ,
459- '_.g.console["a"](b)'
468+ '_.g.console.a("b", c)' ,
469+ '_.g.console["a"](b)' ,
470+ "new _.g.console.Console(a)" ,
471+ "class C extends _.g.console.Console {}" ,
472+ "const a = { console:_.g.console }" ,
473+ "const a = { [_.g.console]: _.g.console }" ,
474+ "const a = { console() { _.g.console } }" ,
475+ "const a = () => _.g.console"
460476 ]
461477
462478 lines . forEach ( ( line , index ) => {
463479 const code = [
464- 'import * as ns from "a"' ,
480+ 'import a from "a"' ,
465481 line
466482 ] . join ( "\n" )
467483
@@ -476,49 +492,64 @@ describe("compiler tests", () => {
476492
477493 it ( "should not transform other `console` use" , ( ) => {
478494 const lines = [
479- "console" ,
480- "console.log('a', 'b')" ,
481- 'console.log("a", "b")' ,
482- "console.log(`a`, `b`)" ,
483- "new console.Console(a)" ,
484- "class C extends console.Console {}" ,
485495 "typeof console" ,
486- "const a = { console }" ,
487- "const a = { [console]: console }" ,
488- "const a = { console() { console } }" ,
489- "const a = () => console"
496+ "console.a('b')" ,
497+ 'console.a("b", \'c\')' ,
498+ 'console.a("b", `c`)'
490499 ]
491500
492501 lines . forEach ( ( line ) => {
493- for ( const sourceType of sourceTypes ) {
494- const result = Compiler . compile ( line , { sourceType } )
502+ const code = [
503+ 'import a from "a"' ,
504+ line
505+ ] . join ( "\n" )
506+
507+ for ( const sourceType of modernTypes ) {
508+ const result = Compiler . compile ( code , { sourceType } )
509+ const actual = result . code . split ( "\n" ) . pop ( )
495510
496- assert . strictEqual ( result . code , line )
511+ assert . strictEqual ( actual , line )
497512 }
498513 } )
499514 } )
500515
501- it ( "should not transform shadowed `console` identifiers" , ( ) => {
516+ it ( "should not transform `console` identifiers shadowed by arguments or variables " , ( ) => {
502517 const lines = [
503- 'import console from "a"' ,
504- 'import * as console from "a"' ,
505- "export let console = {}" ,
506- "let console = {}" ,
518+ "let console = { a() {} }" ,
507519 "let a = (console) =>"
508520 ]
509521
510522 lines . forEach ( ( line ) => {
511523 const code = [
524+ 'import a from "a"' ,
525+ "{" ,
512526 line ,
513- "console"
527+ "console.a(b)" ,
528+ "}"
514529 ] . join ( "\n" )
515530
516- for ( const sourceType of sourceTypes ) {
517- if ( sourceType === SCRIPT &&
518- / ( i m | e x ) p o r t / . test ( code ) ) {
519- continue
520- }
531+ for ( const sourceType of modernTypes ) {
532+ const result = Compiler . compile ( code , { sourceType } )
521533
534+ assert . strictEqual ( result . code . includes ( "_.g" ) , false )
535+ }
536+ } )
537+ } )
538+
539+ it ( "should not transform `console` identifiers shadowed by `import` or `export` specifiers" , ( ) => {
540+ const lines = [
541+ 'import console from "a"' ,
542+ 'import * as console from "a"' ,
543+ "export let console = { a() {} }"
544+ ]
545+
546+ lines . forEach ( ( line ) => {
547+ const code = [
548+ line ,
549+ "console.a(b)"
550+ ] . join ( "\n" )
551+
552+ for ( const sourceType of modernTypes ) {
522553 const result = Compiler . compile ( code , { sourceType } )
523554
524555 assert . strictEqual ( result . code . includes ( "_.g" ) , false )
0 commit comments