|
|
@@ -192,5 +192,72 @@ describe( 'utils', () => {
|
|
|
expect( actualDescriptor ).to.have.property( 'enumerable', expectedDescriptor.enumerable );
|
|
|
expect( actualDescriptor ).to.have.property( 'configurable', expectedDescriptor.configurable );
|
|
|
} );
|
|
|
+
|
|
|
+ it( 'copies setters and getters (with descriptors as of native classes)', () => {
|
|
|
+ class Foo {
|
|
|
+ set foo( v ) {
|
|
|
+ this._foo = v;
|
|
|
+ }
|
|
|
+ get foo() {}
|
|
|
+ }
|
|
|
+
|
|
|
+ const Mixin = {
|
|
|
+ set a( v ) {
|
|
|
+ this._a = v;
|
|
|
+ },
|
|
|
+ get a() {
|
|
|
+ return this._a;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ utils.mix( Foo, Mixin );
|
|
|
+
|
|
|
+ const actualDescriptor = Object.getOwnPropertyDescriptor( Foo.prototype, 'a' );
|
|
|
+ const expectedDescriptor = Object.getOwnPropertyDescriptor( Foo.prototype, 'foo' );
|
|
|
+
|
|
|
+ expect( actualDescriptor ).to.have.property( 'enumerable', expectedDescriptor.enumerable );
|
|
|
+ expect( actualDescriptor ).to.have.property( 'configurable', expectedDescriptor.configurable );
|
|
|
+
|
|
|
+ const foo = new Foo();
|
|
|
+
|
|
|
+ foo.a = 1;
|
|
|
+ expect( foo._a ).to.equal( 1 );
|
|
|
+
|
|
|
+ foo._a = 2;
|
|
|
+ expect( foo.a ).to.equal( 2 );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'copies symbols (with descriptors as of native classes)', () => {
|
|
|
+ const symbolA = Symbol( 'a' );
|
|
|
+ const symbolFoo = Symbol( 'foo' );
|
|
|
+
|
|
|
+ // https://github.com/jscs-dev/node-jscs/issues/2078
|
|
|
+ // jscs:disable disallowSpacesInFunction
|
|
|
+ class Foo {
|
|
|
+ [ symbolFoo ]() {
|
|
|
+ return 'foo';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const Mixin = {
|
|
|
+ [ symbolA ]() {
|
|
|
+ return 'a';
|
|
|
+ }
|
|
|
+ };
|
|
|
+ // jscs:enable disallowSpacesInFunction
|
|
|
+
|
|
|
+ utils.mix( Foo, Mixin );
|
|
|
+
|
|
|
+ const actualDescriptor = Object.getOwnPropertyDescriptor( Foo.prototype, symbolA );
|
|
|
+ const expectedDescriptor = Object.getOwnPropertyDescriptor( Foo.prototype, symbolFoo );
|
|
|
+
|
|
|
+ expect( actualDescriptor ).to.have.property( 'writable', expectedDescriptor.writable );
|
|
|
+ expect( actualDescriptor ).to.have.property( 'enumerable', expectedDescriptor.enumerable );
|
|
|
+ expect( actualDescriptor ).to.have.property( 'configurable', expectedDescriptor.configurable );
|
|
|
+
|
|
|
+ const foo = new Foo();
|
|
|
+
|
|
|
+ expect( foo[ symbolA ]() ).to.equal( 'a' );
|
|
|
+ } );
|
|
|
} );
|
|
|
} );
|