1 package minify 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "vimagination.zapto.org/javascript" 9 "vimagination.zapto.org/parser" 10 ) 11 12 func TestPrint(t *testing.T) { 13 for n, test := range [...]struct { 14 Input, Output string 15 }{ 16 { // 1 17 "var a = 1;", 18 "var a=1", 19 }, 20 { // 2 21 "var [a] = 1;", 22 "var[a]=1", 23 }, 24 { // 3 25 "async function a(){}", 26 "async function a(){}", 27 }, 28 { // 4 29 "typeof []", 30 "typeof[]", 31 }, 32 { // 5 33 "[] instanceof [].prototype", 34 "[]instanceof[].prototype", 35 }, 36 { // 6 37 "export * from 'a';", 38 "export*from'a'", 39 }, 40 { // 7 41 "export * as a from 'b';", 42 "export*as a from'b'", 43 }, 44 { // 8 45 "export {a, b as c, d} from 'f';", 46 "export{a,b as c,d}from'f'", 47 }, 48 { // 9 49 "import * as a from 'b';", 50 "import*as a from'b'", 51 }, 52 { // 10 53 "import {a, b as c, d} from 'e';", 54 "import{a,b as c,d}from'e'", 55 }, 56 { // 11 57 "import a from 'b';", 58 "import a from'b'", 59 }, 60 { // 12 61 "import a, {b, c} from 'e';", 62 "import a,{b,c}from'e'", 63 }, 64 { // 13 65 "a\nb\nc", 66 "a;b;c", 67 }, 68 { // 14 69 "a\n{}\nb", 70 "a;{}b", 71 }, 72 { // 15 73 "{a\nb\nc}", 74 "{a;b;c}", 75 }, 76 { // 16 77 "{a\n{}\nb}", 78 "{a;{}b}", 79 }, 80 { // 17 81 "if (a) b\nelse c", 82 "if(a)b;else c", 83 }, 84 { // 18 85 "if (a){\nb\n}\nelse{\nc\n}", 86 "if(a){b}else{c}", 87 }, 88 { // 19 89 "do a()\nwhile (1)", 90 "do a();while(1)", 91 }, 92 { // 20 93 "do{\na()\n}\nwhile (1)", 94 "do{a()}while(1)", 95 }, 96 { // 21 97 "switch(a){case a:\nb\ncase b:\n{}\ncase c: c}", 98 "switch(a){case a:b;case b:{}case c:c}", 99 }, 100 { // 22 101 "switch(a){case a:\nb\ndefault:\nc}", 102 "switch(a){case a:b;default:c}", 103 }, 104 { // 23 105 "switch(a){default:\na\ncase b: c}", 106 "switch(a){default:a;case b:c}", 107 }, 108 { // 24 109 "switch ( a ) { case []:\n1\ncase b: 2}", 110 "switch(a){case[]:1;case b:2}", 111 }, 112 { // 25 113 "switch ( a ) { case a:\na\nb\nc }", 114 "switch(a){case a:a;b;c}", 115 }, 116 { // 26 117 "class A {a\nb\nc\nd(){}\ne\n}", 118 "class A{a;b;c;d(){}e}", 119 }, 120 { // 27 121 "class A {static a = 1;static b(){}}", 122 "class A{static a=1;static b(){}}", 123 }, 124 { // 28 125 "class A {static [a] = 1;static [b](){}}", 126 "class A{static[a]=1;static[b](){}}", 127 }, 128 { // 29 129 "#a in b;", 130 "#a in b", 131 }, 132 { // 30 133 "#a in[b];", 134 "#a in[b]", 135 }, 136 { // 31 137 "import {a as b} from './c';", 138 "import{a as b}from'./c'", 139 }, 140 { // 32 141 "import * as a from './b';", 142 "import*as a from'./b'", 143 }, 144 { // 33 145 "var a = 1;", 146 "var a=1", 147 }, 148 { // 34 149 "var [a] = [1];", 150 "var[a]=[1]", 151 }, 152 { // 35 153 "function a(){}", 154 "function a(){}", 155 }, 156 { // 36 157 "(function (){})", 158 "(function(){})", 159 }, 160 { // 37 161 "async function a(){}", 162 "async function a(){}", 163 }, 164 { // 38 165 "class a extends (b) {}", 166 "class a extends(b){}", 167 }, 168 { // 39 169 "(class extends (a){})", 170 "(class extends(a){})", 171 }, 172 { // 40 173 "for (var a = 1;;){}", 174 "for(var a=1;;){}", 175 }, 176 { // 41 177 "for (var [a] = [1];;){}", 178 "for(var[a]=[1];;){}", 179 }, 180 { // 42 181 "new a();", 182 "new a()", 183 }, 184 { // 43 185 "new (a)();", 186 "new(a)()", 187 }, 188 { // 44 189 "new a;", 190 "new a", 191 }, 192 { // 45 193 "new (a);", 194 "new(a)", 195 }, 196 { // 46 197 "var a = 1, b = 2, c = 3;", 198 "var a=1,b=2,c=3", 199 }, 200 { // 47 201 "var [a, b, c, ...d] = [1, 2, 3, 4, 5], e = 4;", 202 "var[a,b,c,...d]=[1,2,3,4,5],e=4", 203 }, 204 { // 48 205 "var {a: b, c: c, d, ...e} = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}, {g} = {g: 4}, h = 5;", 206 "var{a:b,c,d,...e}={a:1,b:2,c:3,d:4,e:5,f:6},{g}={g:4},h=5", 207 }, 208 { // 49 209 "let a = 1, b = 2, c = 3;", 210 "let a=1,b=2,c=3", 211 }, 212 { // 50 213 "let [a, b, c, ...d] = [1, 2, 3, 4, 5], e = 4;", 214 "let[a,b,c,...d]=[1,2,3,4,5],e=4", 215 }, 216 { // 51 217 "let {a: b, c: c, d, ...e} = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}, {g} = {g: 4}, h = 5;", 218 "let{a:b,c,d,...e}={a:1,b:2,c:3,d:4,e:5,f:6},{g}={g:4},h=5", 219 }, 220 { // 52 221 "const a = 1, b = 2, c = 3;", 222 "const a=1,b=2,c=3", 223 }, 224 { // 53 225 "const [a, b, c, ...d] = [1, 2, 3, 4, 5], e = 4;", 226 "const[a,b,c,...d]=[1,2,3,4,5],e=4", 227 }, 228 { // 54 229 "const {a: b, c: c, d, ...e} = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}, {g} = {g: 4}, h = 5;", 230 "const{a:b,c,d,...e}={a:1,b:2,c:3,d:4,e:5,f:6},{g}={g:4},h=5", 231 }, 232 { // 55 233 "do {aThing()} while (a == 1);", 234 "do{aThing()}while(a==1)", 235 }, 236 { // 56 237 "do aThing()\nwhile (a);", 238 "do aThing();while(a)", 239 }, 240 { // 57 241 "do [a] = next(); while(a);", 242 "do[a]=next();while(a)", 243 }, 244 { // 58 245 "while ( true ) run();", 246 "while(true)run()", 247 }, 248 { // 59 249 "while ( a = someThing()) {doAThing()}", 250 "while(a=someThing()){doAThing()}", 251 }, 252 { // 60 253 "while (a && b || c)[a]=runMe();", 254 "while(a&&b||c)[a]=runMe()", 255 }, 256 { // 61 257 "for (a = 1; b < 2; c++) {}", 258 "for(a=1;b<2;c++){}", 259 }, 260 { // 62 261 "for (a = 1, b = 2, [c] = [3]; b && c; c++) run();", 262 "for(a=1,b=2,[c]=[3];b&&c;c++)run()", 263 }, 264 { // 63 265 "for ( var a = 1, b = 2; b < 6; b++) {a(), b()}", 266 "for(var a=1,b=2;b<6;b++){a(),b()}", 267 }, 268 { // 64 269 "for ( var [a] = [1]; !a; a++) {a(); b()}", 270 "for(var[a]=[1];!a;a++){a();b()}", 271 }, 272 { // 65 273 "for ( let a = 1, b = 2; b < 6; b++) {a(), b()}", 274 "for(let a=1,b=2;b<6;b++){a(),b()}", 275 }, 276 { // 66 277 "for ( let [a] = [1]; !a; a++) {a(); b()}", 278 "for(let[a]=[1];!a;a++){a();b()}", 279 }, 280 { // 67 281 "for ( const a = 1, b = 2; b < 6; b++) {a(), b()}", 282 "for(const a=1,b=2;b<6;b++){a(),b()}", 283 }, 284 { // 68 285 "for ( const [a] = [1]; !a; a++) {a(); b()}", 286 "for(const[a]=[1];!a;a++){a();b()}", 287 }, 288 { // 69 289 "for ( a of b ){}", 290 "for(a of b){}", 291 }, 292 { // 70 293 "for ( [a, b] of c ){}", 294 "for([a,b]of c){}", 295 }, 296 { // 71 297 "for ( [a, b] of [c] ){}", 298 "for([a,b]of[c]){}", 299 }, 300 { // 72 301 "for ( a in b ){}", 302 "for(a in b){}", 303 }, 304 { // 73 305 "for ( {a: a, b} in c ){}", 306 "for({a,b}in c){}", 307 }, 308 { // 74 309 "for ( {a, b: d} of {c} ){}", 310 "for({a,b:d}of{c}){}", 311 }, 312 { // 75 313 "for ( var a of b ){}", 314 "for(var a of b){}", 315 }, 316 { // 76 317 "for ( var [a, b] of c ){}", 318 "for(var[a,b]of c){}", 319 }, 320 { // 77 321 "for ( var [a, b] of [c] ){}", 322 "for(var[a,b]of[c]){}", 323 }, 324 { // 78 325 "for ( var a in b ){}", 326 "for(var a in b){}", 327 }, 328 { // 79 329 "for ( var {a: a, b} in c ){}", 330 "for(var{a,b}in c){}", 331 }, 332 { // 80 333 "for ( var {a, b: d} of {c} ){}", 334 "for(var{a,b:d}of{c}){}", 335 }, 336 { // 81 337 "for ( let a of b ){}", 338 "for(let a of b){}", 339 }, 340 { // 82 341 "for ( let [a, b] of c ){}", 342 "for(let[a,b]of c){}", 343 }, 344 { // 83 345 "for ( let [a, b] of [c] ){}", 346 "for(let[a,b]of[c]){}", 347 }, 348 { // 84 349 "for ( let a in b ){}", 350 "for(let a in b){}", 351 }, 352 { // 85 353 "for ( let {a: a, b} in c ){}", 354 "for(let{a,b}in c){}", 355 }, 356 { // 86 357 "for ( let {a, b: d} of {c} ){}", 358 "for(let{a,b:d}of{c}){}", 359 }, 360 { // 87 361 "for ( const a of b ){}", 362 "for(const a of b){}", 363 }, 364 { // 88 365 "for ( const [a, b] of c ){}", 366 "for(const[a,b]of c){}", 367 }, 368 { // 89 369 "for ( const [a, b] of [c] ){}", 370 "for(const[a,b]of[c]){}", 371 }, 372 { // 90 373 "for ( const a in b ){}", 374 "for(const a in b){}", 375 }, 376 { // 91 377 "for ( const {a: a, b} in c ){}", 378 "for(const{a,b}in c){}", 379 }, 380 { // 92 381 "for ( const {a, b: d} of {c} ){}", 382 "for(const{a,b:d}of{c}){}", 383 }, 384 { // 93 385 "for await ( const a of b) {}", 386 "for await(const a of b){}", 387 }, 388 { // 94 389 "with ( a ) {}", 390 "with(a){}", 391 }, 392 { // 95 393 "with ( a ) b;", 394 "with(a)b", 395 }, 396 { // 96 397 "label: function a(){}", 398 "label:function a(){}", 399 }, 400 { // 97 401 "label: a++", 402 "label:a++", 403 }, 404 { // 98 405 "try { a(); b() } catch ( e ) {}", 406 "try{a();b()}catch(e){}", 407 }, 408 { // 99 409 "try { a(); } finally { something() }", 410 "try{a()}finally{something()}", 411 }, 412 { // 100 413 "try { a(); } catch ( e ) { e(); } finally { something(); }", 414 "try{a()}catch(e){e()}finally{something()}", 415 }, 416 { // 101 417 "continue;", 418 "continue", 419 }, 420 { // 102 421 "continue Label;", 422 "continue Label", 423 }, 424 { // 103 425 "break;", 426 "break", 427 }, 428 { // 104 429 "break Label;", 430 "break Label", 431 }, 432 { // 105 433 "() => {return;}", 434 "()=>{return}", 435 }, 436 { // 106 437 "() => {return a;}", 438 "()=>{return a}", 439 }, 440 { // 107 441 "() => {return [a];}", 442 "()=>{return[a]}", 443 }, 444 { // 108 445 "throw 1;", 446 "throw 1", 447 }, 448 { // 109 449 "throw [a];", 450 "throw[a]", 451 }, 452 { // 110 453 "debugger;", 454 "debugger", 455 }, 456 { // 111 457 "a, b, c;", 458 "a,b,c", 459 }, 460 { // 112 461 "function* a(){yield a;}", 462 "function*a(){yield a}", 463 }, 464 { // 113 465 "function* a(){yield [a];}", 466 "function*a(){yield[a]}", 467 }, 468 { // 114 469 "function* a(){yield * a;}", 470 "function*a(){yield*a}", 471 }, 472 { // 115 473 "function* a(){yield * [a];}", 474 "function*a(){yield*[a]}", 475 }, 476 { // 116 477 "(a) => b;", 478 "(a)=>b", 479 }, 480 { // 117 481 "(a, b) => c;", 482 "(a,b)=>c", 483 }, 484 { // 118 485 "(a, b, ...c) => d;", 486 "(a,b,...c)=>d", 487 }, 488 { // 119 489 "(a, b) =>{c;\nd;}", 490 "(a,b)=>{c;d}", 491 }, 492 { // 120 493 "(a, b) => c;", 494 "(a,b)=>c", 495 }, 496 { // 121 497 "a => b;", 498 "a=>b", 499 }, 500 { // 122 501 "a => {b;c;}", 502 "a=>{b;c}", 503 }, 504 { // 123 505 "async (a) => b;", 506 "async(a)=>b", 507 }, 508 { // 124 509 "async (a, b) => c;", 510 "async(a,b)=>c", 511 }, 512 { // 125 513 "async a => b;", 514 "async a=>b", 515 }, 516 { // 126 517 "a = 1", 518 "a=1", 519 }, 520 { // 127 521 "a *= 1", 522 "a*=1", 523 }, 524 { // 128 525 "a /= 1", 526 "a/=1", 527 }, 528 { // 129 529 "a %= 1", 530 "a%=1", 531 }, 532 { // 130 533 "a += 1", 534 "a+=1", 535 }, 536 { // 131 537 "a -= 1", 538 "a-=1", 539 }, 540 { // 132 541 "a <<= 1", 542 "a<<=1", 543 }, 544 { // 133 545 "a >>= 1", 546 "a>>=1", 547 }, 548 { // 134 549 "a >>>= 1", 550 "a>>>=1", 551 }, 552 { // 135 553 "a &= 1", 554 "a&=1", 555 }, 556 { // 136 557 "a ^= 1", 558 "a^=1", 559 }, 560 { // 137 561 "a |= 1", 562 "a|=1", 563 }, 564 { // 138 565 "a **= 1", 566 "a**=1", 567 }, 568 { // 139 569 "a &&= 1", 570 "a&&=1", 571 }, 572 { // 140 573 "a ||= 1", 574 "a||=1", 575 }, 576 { // 141 577 "a ??= 1", 578 "a??=1", 579 }, 580 { // 142 581 "[a] = b", 582 "[a]=b", 583 }, 584 { // 143 585 "[a, b] = c", 586 "[a,b]=c", 587 }, 588 { // 144 589 "[a, b, c] = d", 590 "[a,b,c]=d", 591 }, 592 { // 145 593 "[a, ...b] = c", 594 "[a,...b]=c", 595 }, 596 { // 146 597 "[...a] = b", 598 "[...a]=b", 599 }, 600 { // 147 601 "[a = b] = c", 602 "[a=b]=c", 603 }, 604 { // 148 605 "[a,b = c] = d", 606 "[a,b=c]=d", 607 }, 608 { // 149 609 "[a=b,c] = d", 610 "[a=b,c]=d", 611 }, 612 { // 150 613 "[a,,b] = c", 614 "[a,,b]=c", 615 }, 616 { // 151 617 "[,a ,,b ,,c ,,,] = d", 618 "[,a,,b,,c]=d", 619 }, 620 { // 152 621 "[a, b = c, d] = e", 622 "[a,b=c,d]=e", 623 }, 624 { // 153 625 "({a} = b)", 626 "({a}=b)", 627 }, 628 { // 154 629 "({a, b} = c)", 630 "({a,b}=c)", 631 }, 632 { // 155 633 "({a, b, c} = d)", 634 "({a,b,c}=d)", 635 }, 636 { // 156 637 "({a,...b} = c)", 638 "({a,...b}=c)", 639 }, 640 { // 157 641 "({a: b, c} = d)", 642 "({a:b,c}=d)", 643 }, 644 { // 158 645 "({a: b = c, d: e} = f)", 646 "({a:b=c,d:e}=f)", 647 }, 648 { // 159 649 "({a = b, c: d, e} = f)", 650 "({a=b,c:d,e}=f)", 651 }, 652 { // 160 653 "({a = b, c: d, e} = f)", 654 "({a=b,c:d,e}=f)", 655 }, 656 { // 161 657 "a ? b : c", 658 "a?b:c", 659 }, 660 { // 162 661 "a ?? b", 662 "a??b", 663 }, 664 { // 163 665 "a ?? b ? c : d", 666 "a??b?c:d", 667 }, 668 { // 164 669 "a || b", 670 "a||b", 671 }, 672 { // 165 673 "a || b || c", 674 "a||b||c", 675 }, 676 { // 166 677 "a || b ? c : d", 678 "a||b?c:d", 679 }, 680 { // 167 681 "a && b", 682 "a&&b", 683 }, 684 { // 168 685 "a && b && c", 686 "a&&b&&c", 687 }, 688 { // 169 689 "a && b ? c : d", 690 "a&&b?c:d", 691 }, 692 { // 170 693 "a && b || c", 694 "a&&b||c", 695 }, 696 { // 171 697 "a | b", 698 "a|b", 699 }, 700 { // 172 701 "a | b | c", 702 "a|b|c", 703 }, 704 { // 173 705 "a | b | c && d || e ? f : g", 706 "a|b|c&&d||e?f:g", 707 }, 708 { // 174 709 "a ^ b", 710 "a^b", 711 }, 712 { // 175 713 "a ^ b ^ c", 714 "a^b^c", 715 }, 716 { // 176 717 "a ^ b ^ c | d && e ? f : g", 718 "a^b^c|d&&e?f:g", 719 }, 720 { // 177 721 "a & b", 722 "a&b", 723 }, 724 { // 178 725 "a & b & c", 726 "a&b&c", 727 }, 728 { // 179 729 "a & b & c ^ d | e ? f : g", 730 "a&b&c^d|e?f:g", 731 }, 732 { // 180 733 "a == b", 734 "a==b", 735 }, 736 { // 181 737 "a != b", 738 "a!=b", 739 }, 740 { // 182 741 "a === b", 742 "a===b", 743 }, 744 { // 183 745 "a !== b", 746 "a!==b", 747 }, 748 { // 184 749 "#a in b", 750 "#a in b", 751 }, 752 { // 185 753 "a < b", 754 "a<b", 755 }, 756 { // 186 757 "a > b", 758 "a>b", 759 }, 760 { // 187 761 "a <= b", 762 "a<=b", 763 }, 764 { // 188 765 "a >= b", 766 "a>=b", 767 }, 768 { // 189 769 "a instanceof b", 770 "a instanceof b", 771 }, 772 { // 190 773 "[a] instanceof [b]", 774 "[a]instanceof[b]", 775 }, 776 { // 191 777 "a in b", 778 "a in b", 779 }, 780 { // 192 781 "[a] in [b]", 782 "[a]in[b]", 783 }, 784 { // 193 785 "a << b", 786 "a<<b", 787 }, 788 { // 194 789 "a >> b", 790 "a>>b", 791 }, 792 { // 195 793 "a >>> b", 794 "a>>>b", 795 }, 796 { // 196 797 "a + b", 798 "a+b", 799 }, 800 { // 197 801 "a - b", 802 "a-b", 803 }, 804 { // 198 805 "a * b", 806 "a*b", 807 }, 808 { // 199 809 "a / b", 810 "a/b", 811 }, 812 { // 200 813 "a % b", 814 "a%b", 815 }, 816 { // 201 817 "a ** b", 818 "a**b", 819 }, 820 { // 202 821 "delete a", 822 "delete a", 823 }, 824 { // 203 825 "delete [a]", 826 "delete[a]", 827 }, 828 { // 204 829 "void a", 830 "void a", 831 }, 832 { // 205 833 "void [a]", 834 "void[a]", 835 }, 836 { // 206 837 "typeof a", 838 "typeof a", 839 }, 840 { // 207 841 "typeof [a]", 842 "typeof[a]", 843 }, 844 { // 208 845 "+a", 846 "+a", 847 }, 848 { // 209 849 "+ a", 850 "+a", 851 }, 852 { // 210 853 "-a", 854 "-a", 855 }, 856 { // 211 857 "- a", 858 "-a", 859 }, 860 { // 212 861 "~a", 862 "~a", 863 }, 864 { // 213 865 "~ a", 866 "~a", 867 }, 868 { // 214 869 "!a", 870 "!a", 871 }, 872 { // 215 873 "! a", 874 "!a", 875 }, 876 { // 216 877 "await a", 878 "await a", 879 }, 880 { // 217 881 "await [a]", 882 "await[a]", 883 }, 884 { // 218 885 "++a", 886 "++a", 887 }, 888 { // 219 889 "++ a", 890 "++a", 891 }, 892 { // 220 893 "--a", 894 "--a", 895 }, 896 { // 221 897 "-- a", 898 "--a", 899 }, 900 { // 222 901 "a++", 902 "a++", 903 }, 904 { // 223 905 "a ++", 906 "a++", 907 }, 908 { // 224 909 "a--", 910 "a--", 911 }, 912 { // 225 913 "a --", 914 "a--", 915 }, 916 { // 226 917 "new new new a", 918 "new new new a", 919 }, 920 { // 227 921 "new new new [a]", 922 "new new new[a]", 923 }, 924 { // 228 925 "a [ 0 ]", 926 "a[0]", 927 }, 928 { // 229 929 "a [ 0 ] . b", 930 "a[0].b", 931 }, 932 { // 230 933 "a [ 0 ] . #b", 934 "a[0].#b", 935 }, 936 { // 231 937 "a `b`", 938 "a`b`", 939 }, 940 { // 232 941 "super . a", 942 "super.a", 943 }, 944 { // 233 945 "super [ a ]", 946 "super[a]", 947 }, 948 { // 234 949 "super [ a ] . b", 950 "super[a].b", 951 }, 952 { // 235 953 "new . target", 954 "new.target", 955 }, 956 { // 236 957 "import . meta", 958 "import.meta", 959 }, 960 { // 237 961 "this;", 962 "this", 963 }, 964 { // 238 965 "\"a\"", 966 "\"a\"", 967 }, 968 { // 239 969 "\"a\" . indexOf", 970 "\"a\".indexOf", 971 }, 972 { // 240 973 "\"a\" [0]", 974 "\"a\"[0]", 975 }, 976 { // 241 977 "1", 978 "1", 979 }, 980 { // 242 981 "true", 982 "true", 983 }, 984 { // 243 985 "false", 986 "false", 987 }, 988 { // 244 989 "null", 990 "null", 991 }, 992 { // 245 993 "/a/", 994 "/a/", 995 }, 996 { // 246 997 "/a/.b", 998 "/a/.b", 999 }, 1000 { // 247 1001 "a", 1002 "a", 1003 }, 1004 { // 248 1005 "undefined", 1006 "undefined", 1007 }, 1008 { // 249 1009 "yield", 1010 "yield", 1011 }, 1012 { // 250 1013 "[ a ]", 1014 "[a]", 1015 }, 1016 { // 251 1017 "[ a , b ]", 1018 "[a,b]", 1019 }, 1020 { // 253 1021 "[ a ] . length", 1022 "[a].length", 1023 }, 1024 { // 253 1025 "[ a ] [ 0 ]", 1026 "[a][0]", 1027 }, 1028 { // 254 1029 "[ ... a]", 1030 "[...a]", 1031 }, 1032 { // 255 1033 "[ a, ... b]", 1034 "[a,...b]", 1035 }, 1036 { // 256 1037 "({ a })", 1038 "({a})", 1039 }, 1040 { // 257 1041 "({ a : a })", 1042 "({a})", 1043 }, 1044 { // 258 1045 "({ a: b })", 1046 "({a:b})", 1047 }, 1048 { // 259 1049 "({ a: a, b: c })", 1050 "({a,b:c})", 1051 }, 1052 { // 260 1053 "({ a, b: c, d, e })", 1054 "({a,b:c,d,e})", 1055 }, 1056 { // 261 1057 "({ [a]: b })", 1058 "({[a]:b})", 1059 }, 1060 { // 262 1061 "({ [\"a\"]: b })", 1062 "({[\"a\"]:b})", 1063 }, 1064 { // 263 1065 "({ a: b, ...c })", 1066 "({a:b,...c})", 1067 }, 1068 { // 264 1069 "({ ... a })", 1070 "({...a})", 1071 }, 1072 { // 265 1073 "({ a = b })", 1074 "({a=b})", 1075 }, 1076 { // 266 1077 "({ a = b , c = d })", 1078 "({a=b,c=d})", 1079 }, 1080 { // 267 1081 "( function ( ) { } )", 1082 "(function(){})", 1083 }, 1084 { // 268 1085 "( function a (b, c) { d(); } )", 1086 "(function a(b,c){d()})", 1087 }, 1088 { // 269 1089 "( class { } )", 1090 "(class{})", 1091 }, 1092 { // 270 1093 "( class a extends [b]{ #a; get a() { return this.#a; } } )", 1094 "(class a extends[b]{#a;get a(){return this.#a}})", 1095 }, 1096 { // 271 1097 "`abc`", 1098 "`abc`", 1099 }, 1100 { // 272 1101 "tag `abc`", 1102 "tag`abc`", 1103 }, 1104 { // 273 1105 "`abc${ def }ghi`", 1106 "`abc${def}ghi`", 1107 }, 1108 { // 274 1109 "`abc${ def }ghi${ jkl + mno }`", 1110 "`abc${def}ghi${jkl+mno}`", 1111 }, 1112 { // 275 1113 "( )", 1114 "()", 1115 }, 1116 { // 276 1117 "( a )", 1118 "(a)", 1119 }, 1120 { // 277 1121 "( a , b )", 1122 "(a,b)", 1123 }, 1124 { // 278 1125 "( a , b , c )", 1126 "(a,b,c)", 1127 }, 1128 { // 279 1129 "super ();", 1130 "super()", 1131 }, 1132 { // 280 1133 "super() . a;", 1134 "super().a", 1135 }, 1136 { // 281 1137 "super() [ a ];", 1138 "super()[a]", 1139 }, 1140 { // 282 1141 "import ( a ) ; ", 1142 "import(a)", 1143 }, 1144 { // 283 1145 "a . b ( c ) ;", 1146 "a.b(c)", 1147 }, 1148 { // 284 1149 "a [ b ] ( c ) ;", 1150 "a[b](c)", 1151 }, 1152 { // 285 1153 "a . #b ( c ) ;", 1154 "a.#b(c)", 1155 }, 1156 { // 286 1157 "a ( ) . b;", 1158 "a().b", 1159 }, 1160 { // 287 1161 "a ( ) [ b ];", 1162 "a()[b]", 1163 }, 1164 { // 288 1165 "a ( ) `b`;", 1166 "a()`b`", 1167 }, 1168 { // 289 1169 "a ( ) . #b;", 1170 "a().#b", 1171 }, 1172 { // 290 1173 "a ?. b ?. c;", 1174 "a?.b?.c", 1175 }, 1176 { // 291 1177 "a() ?. b . c() ;", 1178 "a()?.b.c()", 1179 }, 1180 { // 292 1181 "a . b ?. c() ?. #d", 1182 "a.b?.c()?.#d", 1183 }, 1184 { // 293 1185 `class a extends b { 1186 static { 1187 c(); 1188 } 1189 d = e; 1190 #f; 1191 #g = h; 1192 1193 constructor() { 1194 } 1195 1196 get i() { 1197 } 1198 1199 set j(k) {} 1200 [l](){} 1201 1202 static m() {} 1203 }`, 1204 "class a extends b{static{c()}d=e;#f;#g=h;constructor(){}get i(){}set j(k){}[l](){}static m(){}}", 1205 }, 1206 } { 1207 tk := parser.NewStringTokeniser(test.Input) 1208 m, err := javascript.ParseModule(&tk) 1209 if err != nil { 1210 t.Errorf("test %d: unexpected error: %s", n+1, err) 1211 } else { 1212 var sb strings.Builder 1213 if _, err := Print(&sb, m); err != nil { 1214 t.Errorf("test %d.1: unexpected error: %s", n+1, err) 1215 } else if str := sb.String(); str != test.Output { 1216 t.Errorf("test %d.1: expecting output %q, got %q", n+1, test.Output, str) 1217 } else { 1218 if n == 150 { 1219 aap := m.ModuleListItems[0].StatementListItem.Statement.ExpressionStatement.Expressions[0].AssignmentPattern.ArrayAssignmentPattern 1220 aap.AssignmentElements = aap.AssignmentElements[:6] 1221 } 1222 normalStr := fmt.Sprint(m) 1223 tk = parser.NewStringTokeniser(str) 1224 m, err := javascript.ParseModule(&tk) 1225 if err != nil { 1226 t.Errorf("test %d.2: unexpected error: %s", n+1, err) 1227 } else if otherStr := fmt.Sprint(m); normalStr != otherStr { 1228 t.Errorf("test %d.2: normal output not equal, expecting %s, got %s", n+1, normalStr, otherStr) 1229 } 1230 } 1231 } 1232 } 1233 } 1234