UNPKG

algomin

Version:

Algomin - Viszualizing Distributed Algorithms

180 lines (139 loc) 6.24 kB
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); });