mirror of
https://github.com/HeyPuter/puter.git
synced 2026-08-13 01:32:10 +00:00
Support for trait method overrides will make it possible to use putility traits with the decorator pattern while using a proxy class to avoid redundant re-implementation of proxy methods. Use of the pattern described above will occur in the implementation of client-side filesystem caching.
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
const { expect } = require('chai');
|
|
const { AdvancedBase } = require("../src/AdvancedBase");
|
|
|
|
class TestClass extends AdvancedBase {
|
|
static IMPLEMENTS = {
|
|
test_trait: {
|
|
test_method: () => 'A'
|
|
},
|
|
override_trait: {
|
|
preserved_method: () => 'B',
|
|
override_method: () => 'C',
|
|
},
|
|
}
|
|
}
|
|
|
|
class TestSubClass extends TestClass {
|
|
static IMPLEMENTS = {
|
|
override_trait: {
|
|
override_method: () => 'D',
|
|
}
|
|
}
|
|
}
|
|
|
|
describe('traits', () => {
|
|
it('instance.as', () => {
|
|
const o = new TestClass();
|
|
expect(o.as).to.be.a('function');
|
|
const ot = o.as('test_trait');
|
|
expect(ot.test_method).to.be.a('function');
|
|
expect(ot.test_method()).to.equal('A');
|
|
});
|
|
it('traits of parent', () => {
|
|
const o = new TestSubClass();
|
|
console.log(o._get_merged_static_object('IMPLEMENTS'))
|
|
expect(o.as).to.be.a('function');
|
|
const ot = o.as('test_trait');
|
|
expect(ot.test_method).to.be.a('function');
|
|
expect(ot.test_method()).to.equal('A');
|
|
})
|
|
it('trait method overrides', () => {
|
|
const o = new TestSubClass();
|
|
expect(o.as).to.be.a('function');
|
|
const ot = o.as('override_trait');
|
|
expect(ot.preserved_method).to.be.a('function');
|
|
expect(ot.override_method).to.be.a('function');
|
|
expect (ot.preserved_method()).to.equal('B');
|
|
expect (ot.override_method()).to.equal('D');
|
|
})
|
|
}); |