71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
import { Actor } from '../../classes/display/actor.js';
|
|
import { Box } from '../../classes/display/box.js';
|
|
import { Scene } from '../../classes/display/scene.js';
|
|
import { VM } from '../../classes/supporting/vm.js';
|
|
|
|
const contractIds = ['contract-id-1', 'contract-id-2'];
|
|
|
|
class Greeter extends Actor {
|
|
constructor(vm, value, scene) {
|
|
super('Greeter', scene);
|
|
this.vm = vm;
|
|
this.value = value;
|
|
}
|
|
|
|
hello(sender, message) {
|
|
return `${sender.name} ${this.value}: ${message}`;
|
|
}
|
|
}
|
|
|
|
class Repeater extends Actor {
|
|
constructor(vm, greeter, scene) {
|
|
super('Repeater', scene);
|
|
this.vmHandle = vm.getHandle(this);
|
|
this.greeter = greeter;
|
|
}
|
|
|
|
forward(__sender, method, message) {
|
|
return this.vmHandle.callContract(this.greeter, method, message);
|
|
}
|
|
}
|
|
|
|
describe('VM', () => {
|
|
let vm;
|
|
let sender;
|
|
let vmHandle;
|
|
let scene;
|
|
|
|
before(() => {
|
|
const rootElement = document.getElementById('scene');
|
|
const rootBox = new Box('rootBox', rootElement).flex();
|
|
scene = new Scene('VM test', rootBox).withSequenceDiagram();
|
|
vm = new VM(scene);
|
|
sender = new Actor('Sender', scene);
|
|
vm.addContract(contractIds[0], Greeter, 'world', scene);
|
|
vm.addContract(contractIds[1], Repeater, contractIds[0], scene);
|
|
vmHandle = vm.getHandle(sender);
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
await scene.sequence.startSection();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await scene.sequence.endSection();
|
|
});
|
|
|
|
it('Should exist', () => {
|
|
should.exist(vm);
|
|
});
|
|
|
|
it('Call a contract method', async () => {
|
|
(await Promise.resolve(vmHandle.callContract(contractIds[0], 'hello', 'good morning')))
|
|
.should.equal('Sender world: good morning');
|
|
});
|
|
|
|
it('Call a contract method which calls another contract method', async () => {
|
|
(await Promise.resolve(vmHandle.callContract(contractIds[1], 'forward', 'hello', 'good day')))
|
|
.should.equal('Repeater world: good day');
|
|
});
|
|
});
|