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