Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 3393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3404 | 3404 |
| 3405 static const ParserFlag always_flags[] = {kAllowClasses}; | 3405 static const ParserFlag always_flags[] = {kAllowClasses}; |
| 3406 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, | 3406 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
| 3407 always_flags, arraysize(always_flags)); | 3407 always_flags, arraysize(always_flags)); |
| 3408 } | 3408 } |
| 3409 | 3409 |
| 3410 | 3410 |
| 3411 TEST(NoErrorsMethodDefinition) { | 3411 TEST(NoErrorsMethodDefinition) { |
| 3412 const char* context_data[][2] = {{"({", "});"}, | 3412 const char* context_data[][2] = {{"({", "});"}, |
| 3413 {"'use strict'; ({", "});"}, | 3413 {"'use strict'; ({", "});"}, |
| 3414 {"({*", "});"}, | |
| 3415 {"'use strict'; ({*", "});"}, | |
| 3414 {NULL, NULL}}; | 3416 {NULL, NULL}}; |
| 3415 | 3417 |
| 3416 const char* object_literal_body_data[] = { | 3418 const char* object_literal_body_data[] = { |
| 3417 "m() {}", | 3419 "m() {}", |
| 3418 "m(x) { return x; }", | 3420 "m(x) { return x; }", |
| 3419 "m(x, y) {}, n() {}", | 3421 "m(x, y) {}, n() {}", |
| 3420 "set(x, y) {}", | 3422 "set(x, y) {}", |
| 3421 "get(x, y) {}", | 3423 "get(x, y) {}", |
| 3422 NULL | 3424 NULL |
| 3423 }; | 3425 }; |
| 3424 | 3426 |
| 3425 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; | 3427 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; |
| 3426 RunParserSyncTest(context_data, object_literal_body_data, kSuccess, NULL, 0, | 3428 RunParserSyncTest(context_data, object_literal_body_data, kSuccess, NULL, 0, |
| 3427 always_flags, arraysize(always_flags)); | 3429 always_flags, arraysize(always_flags)); |
| 3428 } | 3430 } |
| 3429 | 3431 |
| 3430 | 3432 |
| 3431 TEST(MethodDefinitionNames) { | 3433 TEST(MethodDefinitionNames) { |
| 3432 const char* context_data[][2] = {{"({", "(x, y) {}});"}, | 3434 const char* context_data[][2] = {{"({", "(x, y) {}});"}, |
| 3433 {"'use strict'; ({", "(x, y) {}});"}, | 3435 {"'use strict'; ({", "(x, y) {}});"}, |
| 3436 {"({*", "(x, y) {}});"}, | |
| 3437 {"'use strict'; ({*", "(x, y) {}});"}, | |
| 3434 {NULL, NULL}}; | 3438 {NULL, NULL}}; |
| 3435 | 3439 |
| 3436 const char* name_data[] = { | 3440 const char* name_data[] = { |
| 3437 "m", | 3441 "m", |
| 3438 "'m'", | 3442 "'m'", |
| 3439 "\"m\"", | 3443 "\"m\"", |
| 3440 "\"m n\"", | 3444 "\"m n\"", |
| 3441 "true", | 3445 "true", |
| 3442 "false", | 3446 "false", |
| 3443 "null", | 3447 "null", |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3498 | 3502 |
| 3499 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; | 3503 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; |
| 3500 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, | 3504 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, |
| 3501 always_flags, arraysize(always_flags)); | 3505 always_flags, arraysize(always_flags)); |
| 3502 } | 3506 } |
| 3503 | 3507 |
| 3504 | 3508 |
| 3505 TEST(MethodDefinitionStrictFormalParamereters) { | 3509 TEST(MethodDefinitionStrictFormalParamereters) { |
| 3506 const char* context_data[][2] = {{"({method(", "){}});"}, | 3510 const char* context_data[][2] = {{"({method(", "){}});"}, |
| 3507 {"'use strict'; ({method(", "){}});"}, | 3511 {"'use strict'; ({method(", "){}});"}, |
| 3512 {"({*method(", "){}});"}, | |
| 3513 {"'use strict'; ({*method(", "){}});"}, | |
| 3508 {NULL, NULL}}; | 3514 {NULL, NULL}}; |
| 3509 | 3515 |
| 3510 const char* params_data[] = { | 3516 const char* params_data[] = { |
| 3511 "x, x", | 3517 "x, x", |
| 3512 "x, y, x", | 3518 "x, y, x", |
| 3513 "eval", | 3519 "eval", |
| 3514 "arguments", | 3520 "arguments", |
| 3515 "var", | 3521 "var", |
| 3516 "const", | 3522 "const", |
| 3517 NULL | 3523 NULL |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 3533 "x: 1, x() {}", | 3539 "x: 1, x() {}", |
| 3534 "x() {}, x: 1", | 3540 "x() {}, x: 1", |
| 3535 "x() {}, get x() {}", | 3541 "x() {}, get x() {}", |
| 3536 "x() {}, set x(_) {}", | 3542 "x() {}, set x(_) {}", |
| 3537 "x() {}, x() {}", | 3543 "x() {}, x() {}", |
| 3538 "x() {}, y() {}, x() {}", | 3544 "x() {}, y() {}, x() {}", |
| 3539 "x() {}, \"x\"() {}", | 3545 "x() {}, \"x\"() {}", |
| 3540 "x() {}, 'x'() {}", | 3546 "x() {}, 'x'() {}", |
| 3541 "0() {}, '0'() {}", | 3547 "0() {}, '0'() {}", |
| 3542 "1.0() {}, 1: 1", | 3548 "1.0() {}, 1: 1", |
| 3549 | |
| 3550 "x: 1, *x() {}", | |
| 3551 "*x() {}, x: 1", | |
| 3552 "*x() {}, get x() {}", | |
| 3553 "*x() {}, set x(_) {}", | |
| 3554 "*x() {}, *x() {}", | |
| 3555 "*x() {}, y() {}, *x() {}", | |
| 3556 "*x() {}, *\"x\"() {}", | |
| 3557 "*x() {}, *'x'() {}", | |
| 3558 "*0() {}, *'0'() {}", | |
| 3559 "*1.0() {}, 1: 1", | |
| 3560 | |
| 3543 NULL | 3561 NULL |
| 3544 }; | 3562 }; |
| 3545 | 3563 |
| 3546 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; | 3564 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; |
| 3547 RunParserSyncTest(context_data, params_data, kError, NULL, 0, | 3565 RunParserSyncTest(context_data, params_data, kError, NULL, 0, |
| 3548 always_flags, arraysize(always_flags)); | 3566 always_flags, arraysize(always_flags)); |
| 3549 } | 3567 } |
| 3550 | 3568 |
| 3551 | 3569 |
| 3552 TEST(NoErrorsClassExpression) { | 3570 TEST(ClassExpressionNoErrors) { |
| 3553 const char* context_data[][2] = {{"(", ");"}, | 3571 const char* context_data[][2] = {{"(", ");"}, |
| 3554 {"var C = ", ";"}, | 3572 {"var C = ", ";"}, |
| 3555 {"bar, ", ";"}, | 3573 {"bar, ", ";"}, |
| 3556 {NULL, NULL}}; | 3574 {NULL, NULL}}; |
| 3557 const char* class_data[] = { | 3575 const char* class_data[] = { |
| 3558 "class {}", | 3576 "class {}", |
| 3559 "class name {}", | 3577 "class name {}", |
| 3560 "class extends F {}", | 3578 "class extends F {}", |
| 3561 "class name extends F {}", | 3579 "class name extends F {}", |
| 3562 "class extends (F, G) {}", | 3580 "class extends (F, G) {}", |
| 3563 "class name extends (F, G) {}", | 3581 "class name extends (F, G) {}", |
| 3564 "class extends class {} {}", | 3582 "class extends class {} {}", |
| 3565 "class name extends class {} {}", | 3583 "class name extends class {} {}", |
| 3566 "class extends class base {} {}", | 3584 "class extends class base {} {}", |
| 3567 "class name extends class base {} {}", | 3585 "class name extends class base {} {}", |
| 3568 NULL}; | 3586 NULL}; |
| 3569 | 3587 |
| 3570 static const ParserFlag always_flags[] = {kAllowClasses}; | 3588 static const ParserFlag always_flags[] = {kAllowClasses}; |
| 3571 RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0, | 3589 RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0, |
| 3572 always_flags, arraysize(always_flags)); | 3590 always_flags, arraysize(always_flags)); |
| 3573 } | 3591 } |
| 3574 | 3592 |
| 3575 | 3593 |
| 3576 TEST(NoErrorsClassDeclaration) { | 3594 TEST(ClassDeclarationNoErrors) { |
| 3577 const char* context_data[][2] = {{"", ""}, | 3595 const char* context_data[][2] = {{"", ""}, |
| 3578 {"{", "}"}, | 3596 {"{", "}"}, |
| 3579 {"if (true) {", "}"}, | 3597 {"if (true) {", "}"}, |
| 3580 {NULL, NULL}}; | 3598 {NULL, NULL}}; |
| 3581 const char* statement_data[] = { | 3599 const char* statement_data[] = { |
| 3582 "class name {}", | 3600 "class name {}", |
| 3583 "class name extends F {}", | 3601 "class name extends F {}", |
| 3584 "class name extends (F, G) {}", | 3602 "class name extends (F, G) {}", |
| 3585 "class name extends class {} {}", | 3603 "class name extends class {} {}", |
| 3586 "class name extends class base {} {}", | 3604 "class name extends class base {} {}", |
| 3587 NULL}; | 3605 NULL}; |
| 3588 | 3606 |
| 3589 static const ParserFlag always_flags[] = {kAllowClasses}; | 3607 static const ParserFlag always_flags[] = {kAllowClasses}; |
| 3590 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 3608 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
| 3591 always_flags, arraysize(always_flags)); | 3609 always_flags, arraysize(always_flags)); |
| 3592 } | 3610 } |
| 3593 | 3611 |
| 3594 | 3612 |
| 3595 TEST(NoErrorsClassBody) { | 3613 TEST(ClassBodyNoErrors) { |
| 3596 // Tests that parser and preparser accept valid class syntax. | 3614 // Tests that parser and preparser accept valid class syntax. |
| 3597 const char* context_data[][2] = {{"(class {", "});"}, | 3615 const char* context_data[][2] = {{"(class {", "});"}, |
| 3598 {"(class extends Base {", "});"}, | 3616 {"(class extends Base {", "});"}, |
| 3599 {"class C {", "}"}, | 3617 {"class C {", "}"}, |
| 3600 {"class C extends Base {", "}"}, | 3618 {"class C extends Base {", "}"}, |
| 3601 {NULL, NULL}}; | 3619 {NULL, NULL}}; |
| 3602 const char* class_body_data[] = { | 3620 const char* class_body_data[] = { |
| 3603 ";", | 3621 ";", |
| 3604 ";;", | 3622 ";;", |
| 3605 "m() {}", | 3623 "m() {}", |
| 3606 "m() {};", | 3624 "m() {};", |
| 3607 ";m() {}", | 3625 "; m() {}", |
| 3608 "m() {}; n(x) {}", | 3626 "m() {}; n(x) {}", |
| 3609 "get x() {}", | 3627 "get x() {}", |
| 3610 "set x(v) {}", | 3628 "set x(v) {}", |
| 3611 "get() {}", | 3629 "get() {}", |
| 3612 "set() {}", | 3630 "set() {}", |
| 3631 "*g() {}", | |
| 3632 "*g() {};", | |
| 3633 "; *g() {}", | |
| 3634 "*g() {}; *h(x) {}", | |
| 3613 "static() {}", | 3635 "static() {}", |
| 3614 "static m() {}", | 3636 "static m() {}", |
| 3615 "static get x() {}", | 3637 "static get x() {}", |
| 3616 "static set x(v) {}", | 3638 "static set x(v) {}", |
| 3617 "static get() {}", | 3639 "static get() {}", |
| 3618 "static set() {}", | 3640 "static set() {}", |
| 3619 "static static() {}", | 3641 "static static() {}", |
| 3620 "static get static() {}", | 3642 "static get static() {}", |
| 3621 "static set static(v) {}", | 3643 "static set static(v) {}", |
| 3644 "*static() {}", | |
| 3645 "*get() {}", | |
| 3646 "*set() {}", | |
| 3647 "static *g() {}", | |
| 3622 NULL}; | 3648 NULL}; |
| 3623 | 3649 |
| 3624 static const ParserFlag always_flags[] = { | 3650 static const ParserFlag always_flags[] = { |
| 3625 kAllowClasses, | 3651 kAllowClasses, |
| 3626 kAllowHarmonyObjectLiterals | 3652 kAllowHarmonyObjectLiterals |
| 3627 }; | 3653 }; |
| 3628 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 3654 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
| 3629 always_flags, arraysize(always_flags)); | 3655 always_flags, arraysize(always_flags)); |
| 3630 } | 3656 } |
| 3631 | 3657 |
| 3632 | 3658 |
| 3633 TEST(MethodDefinitionstrictFormalParamereters) { | 3659 TEST(ClassPropertyNameNoErrors) { |
| 3634 const char* context_data[][2] = {{"({method(", "){}});"}, | |
| 3635 {NULL, NULL}}; | |
| 3636 | |
| 3637 const char* params_data[] = { | |
| 3638 "x, x", | |
| 3639 "x, y, x", | |
| 3640 "eval", | |
| 3641 "arguments", | |
| 3642 "var", | |
| 3643 "const", | |
| 3644 NULL | |
| 3645 }; | |
| 3646 | |
| 3647 static const ParserFlag always_flags[] = {kAllowHarmonyObjectLiterals}; | |
| 3648 RunParserSyncTest(context_data, params_data, kError, NULL, 0, | |
| 3649 always_flags, arraysize(always_flags)); | |
| 3650 } | |
| 3651 | |
| 3652 | |
| 3653 TEST(NoErrorsClassPropertyName) { | |
| 3654 const char* context_data[][2] = {{"(class {", "() {}});"}, | 3660 const char* context_data[][2] = {{"(class {", "() {}});"}, |
| 3655 {"(class { get ", "() {}});"}, | 3661 {"(class { get ", "() {}});"}, |
| 3656 {"(class { set ", "(v) {}});"}, | 3662 {"(class { set ", "(v) {}});"}, |
| 3657 {"(class { static ", "() {}});"}, | 3663 {"(class { static ", "() {}});"}, |
| 3658 {"(class { static get ", "() {}});"}, | 3664 {"(class { static get ", "() {}});"}, |
| 3659 {"(class { static set ", "(v) {}});"}, | 3665 {"(class { static set ", "(v) {}});"}, |
| 3666 {"(class { *", "() {}});"}, | |
| 3667 {"(class { static *", "() {}});"}, | |
| 3660 {"class C {", "() {}}"}, | 3668 {"class C {", "() {}}"}, |
| 3661 {"class C { get ", "() {}}"}, | 3669 {"class C { get ", "() {}}"}, |
| 3662 {"class C { set ", "(v) {}}"}, | 3670 {"class C { set ", "(v) {}}"}, |
| 3663 {"class C { static ", "() {}}"}, | 3671 {"class C { static ", "() {}}"}, |
| 3664 {"class C { static get ", "() {}}"}, | 3672 {"class C { static get ", "() {}}"}, |
| 3665 {"class C { static set ", "(v) {}}"}, | 3673 {"class C { static set ", "(v) {}}"}, |
| 3674 {"class C { *", "() {}}"}, | |
| 3675 {"class C { static *", "() {}}"}, | |
| 3666 {NULL, NULL}}; | 3676 {NULL, NULL}}; |
| 3667 const char* name_data[] = { | 3677 const char* name_data[] = { |
| 3668 "42", | 3678 "42", |
| 3669 "42.5", | 3679 "42.5", |
| 3670 "42e2", | 3680 "42e2", |
| 3671 "42e+2", | 3681 "42e+2", |
| 3672 "42e-2", | 3682 "42e-2", |
| 3673 "null", | 3683 "null", |
| 3674 "false", | 3684 "false", |
| 3675 "true", | 3685 "true", |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 3697 | 3707 |
| 3698 static const ParserFlag always_flags[] = { | 3708 static const ParserFlag always_flags[] = { |
| 3699 kAllowClasses, | 3709 kAllowClasses, |
| 3700 kAllowHarmonyObjectLiterals | 3710 kAllowHarmonyObjectLiterals |
| 3701 }; | 3711 }; |
| 3702 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, | 3712 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, |
| 3703 always_flags, arraysize(always_flags)); | 3713 always_flags, arraysize(always_flags)); |
| 3704 } | 3714 } |
| 3705 | 3715 |
| 3706 | 3716 |
| 3707 TEST(ErrorsClassExpression) { | 3717 TEST(ClassExpressionErrors) { |
| 3708 const char* context_data[][2] = {{"(", ");"}, | 3718 const char* context_data[][2] = {{"(", ");"}, |
| 3709 {"var C = ", ";"}, | 3719 {"var C = ", ";"}, |
| 3710 {"bar, ", ";"}, | 3720 {"bar, ", ";"}, |
| 3711 {NULL, NULL}}; | 3721 {NULL, NULL}}; |
| 3712 const char* class_data[] = { | 3722 const char* class_data[] = { |
| 3713 "class", | 3723 "class", |
| 3714 "class name", | 3724 "class name", |
| 3715 "class name extends", | 3725 "class name extends", |
| 3716 "class extends", | 3726 "class extends", |
| 3717 "class {", | 3727 "class {", |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 3728 | 3738 |
| 3729 static const ParserFlag always_flags[] = { | 3739 static const ParserFlag always_flags[] = { |
| 3730 kAllowClasses, | 3740 kAllowClasses, |
| 3731 kAllowHarmonyObjectLiterals | 3741 kAllowHarmonyObjectLiterals |
| 3732 }; | 3742 }; |
| 3733 RunParserSyncTest(context_data, class_data, kError, NULL, 0, | 3743 RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
| 3734 always_flags, arraysize(always_flags)); | 3744 always_flags, arraysize(always_flags)); |
| 3735 } | 3745 } |
| 3736 | 3746 |
| 3737 | 3747 |
| 3738 TEST(ErrorsClassDeclaration) { | 3748 TEST(ClassDeclarationErrors) { |
| 3739 const char* context_data[][2] = {{"", ""}, | 3749 const char* context_data[][2] = {{"", ""}, |
| 3740 {"{", "}"}, | 3750 {"{", "}"}, |
| 3741 {"if (true) {", "}"}, | 3751 {"if (true) {", "}"}, |
| 3742 {NULL, NULL}}; | 3752 {NULL, NULL}}; |
| 3743 const char* class_data[] = { | 3753 const char* class_data[] = { |
| 3744 "class", | 3754 "class", |
| 3745 "class name", | 3755 "class name", |
| 3746 "class name extends", | 3756 "class name extends", |
| 3747 "class extends", | 3757 "class extends", |
| 3748 "class name {", | 3758 "class name {", |
| 3749 "class name { m }", | 3759 "class name { m }", |
| 3750 "class name { m; n }", | 3760 "class name { m; n }", |
| 3751 "class name { m: 1 }", | 3761 "class name { m: 1 }", |
| 3752 "class name { m(); n() }", | 3762 "class name { m(); n() }", |
| 3753 "class name { get m }", | 3763 "class name { get x }", |
| 3754 "class name { get m() }", | 3764 "class name { get x() }", |
| 3755 "class name { set m() {) }", // missing required param | 3765 "class name { set x() {) }", // missing required param |
| 3756 "class {}", // Name is required for declaration | 3766 "class {}", // Name is required for declaration |
| 3757 "class extends base {}", | 3767 "class extends base {}", |
| 3768 "class name { *", | |
| 3769 "class name { * }", | |
| 3770 "class name { *; }", | |
| 3771 "class name { *get x() {} }", | |
| 3772 "class name { *set x(_) {} }", | |
| 3773 "class name { *static m() {} }", | |
| 3758 NULL}; | 3774 NULL}; |
| 3759 | 3775 |
| 3760 static const ParserFlag always_flags[] = { | 3776 static const ParserFlag always_flags[] = { |
| 3761 kAllowClasses, | 3777 kAllowClasses, |
| 3762 kAllowHarmonyNumericLiterals | 3778 kAllowHarmonyNumericLiterals |
| 3763 }; | 3779 }; |
| 3764 RunParserSyncTest(context_data, class_data, kError, NULL, 0, | 3780 RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
| 3765 always_flags, arraysize(always_flags)); | 3781 always_flags, arraysize(always_flags)); |
| 3766 } | 3782 } |
| 3767 | 3783 |
| 3768 | 3784 |
| 3769 TEST(ErrorsClassName) { | 3785 TEST(ClassNameErrors) { |
| 3770 const char* context_data[][2] = {{"class ", "{}"}, | 3786 const char* context_data[][2] = {{"class ", "{}"}, |
| 3771 {"(class ", "{});"}, | 3787 {"(class ", "{});"}, |
| 3772 {"'use strict'; class ", "{}"}, | 3788 {"'use strict'; class ", "{}"}, |
| 3773 {"'use strict'; (class ", "{});"}, | 3789 {"'use strict'; (class ", "{});"}, |
| 3774 {NULL, NULL}}; | 3790 {NULL, NULL}}; |
| 3775 const char* class_name[] = { | 3791 const char* class_name[] = { |
| 3776 "arguments", | 3792 "arguments", |
| 3777 "eval", | 3793 "eval", |
| 3778 "implements", | 3794 "implements", |
| 3779 "interface", | 3795 "interface", |
| 3780 "let", | 3796 "let", |
| 3781 "package", | 3797 "package", |
| 3782 "private", | 3798 "private", |
| 3783 "protected", | 3799 "protected", |
| 3784 "public", | 3800 "public", |
| 3785 "static", | 3801 "static", |
| 3786 "var", | 3802 "var", |
| 3787 "yield", | 3803 "yield", |
| 3788 NULL}; | 3804 NULL}; |
| 3789 | 3805 |
| 3790 static const ParserFlag always_flags[] = { | 3806 static const ParserFlag always_flags[] = { |
| 3791 kAllowClasses, | 3807 kAllowClasses, |
| 3792 kAllowHarmonyObjectLiterals | 3808 kAllowHarmonyObjectLiterals |
| 3793 }; | 3809 }; |
| 3794 RunParserSyncTest(context_data, class_name, kError, NULL, 0, | 3810 RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
| 3795 always_flags, arraysize(always_flags)); | 3811 always_flags, arraysize(always_flags)); |
| 3796 } | 3812 } |
| 3797 | 3813 |
| 3798 | 3814 |
| 3799 TEST(ErrorsClassGetterParamName) { | 3815 TEST(ClassGetterParamNameErrors) { |
| 3800 const char* context_data[][2] = { | 3816 const char* context_data[][2] = { |
| 3801 {"class C { get name(", ") {} }"}, | 3817 {"class C { get name(", ") {} }"}, |
| 3802 {"(class { get name(", ") {} });"}, | 3818 {"(class { get name(", ") {} });"}, |
| 3803 {"'use strict'; class C { get name(", ") {} }"}, | 3819 {"'use strict'; class C { get name(", ") {} }"}, |
| 3804 {"'use strict'; (class { get name(", ") {} })"}, | 3820 {"'use strict'; (class { get name(", ") {} })"}, |
| 3805 {NULL, NULL} | 3821 {NULL, NULL} |
| 3806 }; | 3822 }; |
| 3807 | 3823 |
| 3808 const char* class_name[] = { | 3824 const char* class_name[] = { |
| 3809 "arguments", | 3825 "arguments", |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 3822 | 3838 |
| 3823 static const ParserFlag always_flags[] = { | 3839 static const ParserFlag always_flags[] = { |
| 3824 kAllowClasses, | 3840 kAllowClasses, |
| 3825 kAllowHarmonyObjectLiterals | 3841 kAllowHarmonyObjectLiterals |
| 3826 }; | 3842 }; |
| 3827 RunParserSyncTest(context_data, class_name, kError, NULL, 0, | 3843 RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
| 3828 always_flags, arraysize(always_flags)); | 3844 always_flags, arraysize(always_flags)); |
| 3829 } | 3845 } |
| 3830 | 3846 |
| 3831 | 3847 |
| 3832 TEST(ErrorsClassStaticPrototype) { | 3848 TEST(ClassStaticPrototypeErrors) { |
| 3833 const char* context_data[][2] = {{"class C {", "}"}, | 3849 const char* context_data[][2] = {{"class C {", "}"}, |
| 3834 {"(class {", "});"}, | 3850 {"(class {", "});"}, |
| 3835 {NULL, NULL}}; | 3851 {NULL, NULL}}; |
| 3836 | 3852 |
| 3837 const char* class_body_data[] = { | 3853 const char* class_body_data[] = { |
| 3838 "static prototype() {}", | 3854 "static prototype() {}", |
| 3839 "static get prototype() {}", | 3855 "static get prototype() {}", |
| 3840 "static set prototype(_) {}", | 3856 "static set prototype(_) {}", |
| 3857 "static *prototype() {}", | |
| 3841 NULL}; | 3858 NULL}; |
| 3842 | 3859 |
| 3843 static const ParserFlag always_flags[] = { | 3860 static const ParserFlag always_flags[] = { |
| 3844 kAllowClasses, | 3861 kAllowClasses, |
| 3845 kAllowHarmonyObjectLiterals | 3862 kAllowHarmonyObjectLiterals |
| 3846 }; | 3863 }; |
| 3847 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 3864 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
| 3848 always_flags, arraysize(always_flags)); | 3865 always_flags, arraysize(always_flags)); |
| 3849 } | 3866 } |
| 3850 | 3867 |
| 3851 | 3868 |
| 3852 TEST(ErrorsClassSpecialConstructor) { | 3869 TEST(ClassSpecialConstructorErrors) { |
| 3853 const char* context_data[][2] = {{"class C {", "}"}, | 3870 const char* context_data[][2] = {{"class C {", "}"}, |
| 3854 {"(class {", "});"}, | 3871 {"(class {", "});"}, |
| 3855 {NULL, NULL}}; | 3872 {NULL, NULL}}; |
| 3856 | 3873 |
| 3857 const char* class_body_data[] = { | 3874 const char* class_body_data[] = { |
| 3858 "get constructor() {}", | 3875 "get constructor() {}", |
| 3859 "get constructor(_) {}", | 3876 "get constructor(_) {}", |
| 3877 "*constructor() {}", | |
|
arv (Not doing code reviews)
2014/09/18 15:59:02
Andy, non static generator constructor is tested h
| |
| 3860 NULL}; | 3878 NULL}; |
| 3861 | 3879 |
| 3862 static const ParserFlag always_flags[] = { | 3880 static const ParserFlag always_flags[] = { |
| 3863 kAllowClasses, | 3881 kAllowClasses, |
| 3864 kAllowHarmonyObjectLiterals | 3882 kAllowHarmonyObjectLiterals |
| 3865 }; | 3883 }; |
| 3866 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 3884 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
| 3867 always_flags, arraysize(always_flags)); | 3885 always_flags, arraysize(always_flags)); |
| 3868 } | 3886 } |
| 3869 | 3887 |
| 3870 | 3888 |
| 3871 TEST(NoErrorsClassConstructor) { | 3889 TEST(ClassConstructorNoErrors) { |
| 3872 const char* context_data[][2] = {{"class C {", "}"}, | 3890 const char* context_data[][2] = {{"class C {", "}"}, |
| 3873 {"(class {", "});"}, | 3891 {"(class {", "});"}, |
| 3874 {NULL, NULL}}; | 3892 {NULL, NULL}}; |
| 3875 | 3893 |
| 3876 const char* class_body_data[] = { | 3894 const char* class_body_data[] = { |
| 3877 "constructor() {}", | 3895 "constructor() {}", |
| 3878 "static constructor() {}", | 3896 "static constructor() {}", |
| 3879 "static get constructor() {}", | 3897 "static get constructor() {}", |
| 3880 "static set constructor(_) {}", | 3898 "static set constructor(_) {}", |
| 3899 "static *constructor() {}", | |
| 3881 NULL}; | 3900 NULL}; |
| 3882 | 3901 |
| 3883 static const ParserFlag always_flags[] = { | 3902 static const ParserFlag always_flags[] = { |
| 3884 kAllowClasses, | 3903 kAllowClasses, |
| 3885 kAllowHarmonyObjectLiterals | 3904 kAllowHarmonyObjectLiterals |
| 3886 }; | 3905 }; |
| 3887 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 3906 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
| 3888 always_flags, arraysize(always_flags)); | 3907 always_flags, arraysize(always_flags)); |
| 3889 } | 3908 } |
| 3890 | 3909 |
| 3891 | 3910 |
| 3892 TEST(ErrorsClassMultipleConstructor) { | 3911 TEST(ClassMultipleConstructorErrors) { |
| 3893 // We currently do not allow any duplicate properties in class bodies. This | 3912 // We currently do not allow any duplicate properties in class bodies. This |
| 3894 // test ensures that when we change that we still throw on duplicate | 3913 // test ensures that when we change that we still throw on duplicate |
| 3895 // constructors. | 3914 // constructors. |
| 3896 const char* context_data[][2] = {{"class C {", "}"}, | 3915 const char* context_data[][2] = {{"class C {", "}"}, |
| 3897 {"(class {", "});"}, | 3916 {"(class {", "});"}, |
| 3898 {NULL, NULL}}; | 3917 {NULL, NULL}}; |
| 3899 | 3918 |
| 3900 const char* class_body_data[] = { | 3919 const char* class_body_data[] = { |
| 3901 "constructor() {}; constructor() {}", | 3920 "constructor() {}; constructor() {}", |
| 3902 NULL}; | 3921 NULL}; |
| 3903 | 3922 |
| 3904 static const ParserFlag always_flags[] = { | 3923 static const ParserFlag always_flags[] = { |
| 3905 kAllowClasses, | 3924 kAllowClasses, |
| 3906 kAllowHarmonyObjectLiterals | 3925 kAllowHarmonyObjectLiterals |
| 3907 }; | 3926 }; |
| 3908 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 3927 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
| 3909 always_flags, arraysize(always_flags)); | 3928 always_flags, arraysize(always_flags)); |
| 3910 } | 3929 } |
| 3911 | 3930 |
| 3912 | 3931 |
| 3913 // TODO(arv): We should allow duplicate property names. | 3932 // TODO(arv): We should allow duplicate property names. |
| 3914 // https://code.google.com/p/v8/issues/detail?id=3570 | 3933 // https://code.google.com/p/v8/issues/detail?id=3570 |
| 3915 DISABLED_TEST(NoErrorsClassMultiplePropertyNames) { | 3934 DISABLED_TEST(ClassMultiplePropertyNamesNoErrors) { |
| 3916 const char* context_data[][2] = {{"class C {", "}"}, | 3935 const char* context_data[][2] = {{"class C {", "}"}, |
| 3917 {"(class {", "});"}, | 3936 {"(class {", "});"}, |
| 3918 {NULL, NULL}}; | 3937 {NULL, NULL}}; |
| 3919 | 3938 |
| 3920 const char* class_body_data[] = { | 3939 const char* class_body_data[] = { |
| 3921 "constructor() {}; static constructor() {}", | 3940 "constructor() {}; static constructor() {}", |
| 3922 "m() {}; static m() {}", | 3941 "m() {}; static m() {}", |
| 3923 "m() {}; m() {}", | 3942 "m() {}; m() {}", |
| 3924 NULL}; | 3943 NULL}; |
| 3925 | 3944 |
| 3926 static const ParserFlag always_flags[] = { | 3945 static const ParserFlag always_flags[] = { |
| 3927 kAllowClasses, | 3946 kAllowClasses, |
| 3928 kAllowHarmonyObjectLiterals | 3947 kAllowHarmonyObjectLiterals |
| 3929 }; | 3948 }; |
| 3930 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 3949 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
| 3931 always_flags, arraysize(always_flags)); | 3950 always_flags, arraysize(always_flags)); |
| 3932 } | 3951 } |
| 3933 | 3952 |
| 3934 | 3953 |
| 3935 TEST(ErrorsClassesAreStrict) { | 3954 TEST(ClassesAreStrictErrors) { |
| 3936 const char* context_data[][2] = {{"", ""}, | 3955 const char* context_data[][2] = {{"", ""}, |
| 3937 {"(", ");"}, | 3956 {"(", ");"}, |
| 3938 {NULL, NULL}}; | 3957 {NULL, NULL}}; |
| 3939 | 3958 |
| 3940 const char* class_body_data[] = { | 3959 const char* class_body_data[] = { |
| 3941 "class C { method() { with ({}) {} } }", | 3960 "class C { method() { with ({}) {} } }", |
| 3942 "class C extends function() { with ({}) {} } {}", | 3961 "class C extends function() { with ({}) {} } {}", |
| 3962 "class C { *method() { with ({}) {} } }", | |
| 3943 NULL}; | 3963 NULL}; |
| 3944 | 3964 |
| 3945 static const ParserFlag always_flags[] = { | 3965 static const ParserFlag always_flags[] = { |
| 3946 kAllowClasses, | 3966 kAllowClasses, |
| 3947 kAllowHarmonyObjectLiterals | 3967 kAllowHarmonyObjectLiterals |
| 3948 }; | 3968 }; |
| 3949 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 3969 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
| 3950 always_flags, arraysize(always_flags)); | 3970 always_flags, arraysize(always_flags)); |
| 3951 } | 3971 } |
| OLD | NEW |