algomin
Version:
Algomin - Viszualizing Distributed Algorithms
180 lines (139 loc) • 6.24 kB
JavaScript
import {Algomin} from "./Algomin";
import {Model} from "./model/Model";
const root_div = document.createElement('div');
let algomin = new Algomin(root_div);
beforeEach(() => {
algomin.reset();
});
test('1: Check if parsed wait duration equals algorithm duration correctly', () => {
algomin.parseExpression("wait(duration=1000)");
expect(Model.algorithm_duration).toBe(1000);
});
test('2: Check if Node gets created', () => {
algomin.parseExpression("Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')");
const node = Model.shape.get("Node1");
expect(node.label).toBe("Node1");
});
test('3: Check if Message gets created', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n");
const node1 = Model.shape.get("Node1");
const node2 = Model.shape.get("Node2");
const message = Model.message.messages[0];
expect(node1.label).toBe("Node1");
expect(node2.label).toBe("Node2");
expect(message.label).toBe("2");
expect(Model.algorithm_duration).toBe(3000);
});
test('4: Check if Node gets killed', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n" +
"Node1.kill()");
const node1 = Model.shape.get("Node1");
expect(node1.deathTime).toBe(3000);
});
test('5: Check Stop functionality', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n");
algomin.start()
algomin.controller.handlePlayButtonClick()
expect(algomin.model.running).toBe(false);
});
test('6: Check Play functionality', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n");
algomin.start()
algomin.controller.handlePlayButtonClick()
algomin.controller.handlePlayButtonClick()
expect(algomin.model.running).toBe(true);
});
test('7: Check Slider functionality', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n");
algomin.start()
algomin.controller.handleSliderInput(1200)
expect(algomin.model.running).toBe(false);
expect(Model.time).toBe(1200);
});
test('8: Check Message visibility on', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=3000)\n");
algomin.start()
algomin.controller.handleSliderInput(1200)
const message = Model.message.messages[0];
expect(algomin.model.running).toBe(false);
expect(Model.time).toBe(1200);
expect(message.isVisible()).toBe(true);
});
test('9: Check Message visibility off', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=5000)\n");
algomin.start()
algomin.controller.handleSliderInput(4200)
const message = Model.message.messages[0];
expect(algomin.model.running).toBe(false);
expect(Model.time).toBe(4200);
expect(message.isVisible()).toBe(false);
});
test('10: Check View Control and Canvas', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=5000)\n");
algomin.start()
expect(typeof algomin.view.slider).toBe("object");
expect(typeof algomin.view.time_text).toBe("object");
expect(typeof algomin.view.play_button).toBe("object");
expect(typeof algomin.view.canvas).toBe("object");
});
test('11: Test Play Button click', () => {
algomin.parseExpression("" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=5000)\n");
algomin.start()
algomin.view.play_button.click()
expect(algomin.model.running).toBe(false);
algomin.view.play_button.click()
expect(algomin.model.running).toBe(true);
});
test('12: Test Message visibility in movement', () => {
algomin.parseExpression("" +
"wait(duration=2000)\n" +
"Node1 = shape(x=43, y=10, w=100, h=100, label='Node1')\n" +
"Node2 = shape(x=75, y=30, w=100, h=100, label='Node2')\n" +
"Node1.sendMessage(target=Node2, message='2', speed=3000)\n" +
"wait(duration=5000)\n");
algomin.start();
algomin.model.stop();
const message = Model.message.messages[0];
algomin.controller.setGlobalTime(1000);
expect(message.isVisible()).toBe(false);
algomin.controller.setGlobalTime(3000);
expect(message.isVisible()).toBe(true);
algomin.controller.setGlobalTime(6000);
expect(algomin.model.running).toBe(false);
});