+'use strict';
+
+let test = function test (Serpentity) {
+
+ /* eslint no-console: 0 */
+
+ /////////////////
+ // Load the stuff
+ /////////////////
+ console.log('\n## Loading');
+ console.log('Serpentity: ' + (typeof Serpentity !== 'undefined' ? 'LOAD OK' : 'FAIL'));
+ console.log('Serpentity.Entity: ' + (typeof Serpentity !== 'undefined' && Serpentity.Entity ? 'LOAD OK' : 'FAIL'));
+ console.log('Serpentity.Component: ' + (typeof Serpentity !== 'undefined' && Serpentity.Component ? 'LOAD OK' : 'FAIL'));
+ console.log('Serpentity.System: ' + (typeof Serpentity !== 'undefined' && Serpentity.System ? 'LOAD OK' : 'FAIL'));
+ console.log('Serpentity.Node: ' + (typeof Serpentity !== 'undefined' && Serpentity.Node ? 'LOAD OK' : 'FAIL'));
+ console.log('Serpentity.NodeCollection: ' + (typeof Serpentity !== 'undefined' && Serpentity.NodeCollection ? 'LOAD OK' : 'FAIL'));
+
+ //////////////////////
+ // Create test classes
+ //////////////////////
+ console.log('\n## Creating Test Classes');
+ let TestSystem = class TestSystem extends Serpentity.System {
+ added (engine) {
+ this.testNodes = engine.getNodes(TestNode);
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System added callback: EXEC OK');
+ }
+
+ removed (engine) {
+ this.testNodes = null;
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System removed callback: EXEC OK');
+ }
+
+ update (dt) {
+ this.testNodes.forEach(function (node) {
+ console.log('Running Node: ' + (node.test.testMessage === 'test' ? 'SYSTEM OK' : 'FAIL'));
+ });
+ console.log('dt is number: ' + (typeof dt === 'number' ? 'OK' : 'FAIL'));
+ console.log('System update callback: EXEC OK');
+ }
+ };
+ let testSystem = new TestSystem();
+
+ let LowProTestSystem = class LowProTestSystem extends Serpentity.System {
+ added (engine) {
+ this.testNodes = engine.getNodes(TestNode);
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System added callback: EXEC OK');
+ }
+
+ removed (engine) {
+ this.testNodes = null;
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System removed callback: EXEC OK');
+ }
+
+ update (dt) {
+ this.testNodes.forEach(function (node) {
+ console.log('Running Low Priority Node: ' + (node.test.testMessage === 'test' ? 'SYSTEM OK' : 'FAIL'));
+ });
+ console.log('dt is number: ' + (typeof dt === 'number' ? 'OK' : 'FAIL'));
+ console.log('System update callback: EXEC OK');
+ }
+ };
+ let lowProTestSystem = new LowProTestSystem();
+ console.log('LowProTestSystem: CREATE OK');
+
+ let MidProTestSystem = class MidProTestSystem extends Serpentity.System {
+ added (engine) {
+ this.testNodes = engine.getNodes(TestNode);
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System added callback: EXEC OK');
+ }
+
+ removed (engine) {
+ this.testNodes = null;
+ console.log('Engine is serpentity: ' + (engine instanceof Serpentity ? 'OK' : 'FAIL'));
+ console.log('System removed callback: EXEC OK');
+ }
+
+ update (dt) {
+ this.testNodes.forEach(function (node) {
+ console.log('Running Mid Priority Node: ' + (node.test.testMessage === 'test' ? 'SYSTEM OK' : 'FAIL'));
+ });
+ console.log('dt is number: ' + (typeof dt === 'number' ? 'OK' : 'FAIL'));
+ console.log('System update callback: EXEC OK');
+ }
+ };
+ var midProTestSystem = new MidProTestSystem();
+ console.log('MidProTestSystem: CREATE OK');
+
+
+ let TestComponent = class TestComponent extends Serpentity.Component {
+ constructor (config) {
+ super(config);
+
+ this.testMessage = this.testMessage || 'test';
+ }
+ };
+ console.log('TestComponent: CREATE OK');
+
+ let TestNode = class TestNode extends Serpentity.Node {};
+ TestNode.types = {
+ test : TestComponent
+ };
+ console.log('TestNode: CREATE OK');
+
+ console.log('\n## Adding system to the engine');
+
+ let engine = new Serpentity();
+ console.log('engine: CREATE OK');
+
+ engine.addSystem(testSystem, 0);
+
+ console.log('\n## Running update without any entities');
+ engine.update(10);
+
+ console.log('\n## Adding system to the engine and updating');
+ let entity = new Serpentity.Entity();
+ entity.addComponent(new TestComponent());
+ engine.addEntity(entity);
+ engine.update(10);
+
+ console.log('\n## Adding Low Priority System');
+ engine.addSystem(lowProTestSystem, 10);
+ engine.update(10);
+
+ console.log('\n## Adding Mid Priority System');
+ engine.addSystem(midProTestSystem, 5);
+ engine.update(10);
+
+ console.log('\n## Removing the system and readding');
+ engine.removeSystem(testSystem);
+ engine.update(10);
+ engine.addSystem(testSystem, 0);
+ engine.update(10);
+
+ console.log('\n## Adding a second entity');
+ entity = new Serpentity.Entity();
+ entity.addComponent(new TestComponent());
+ engine.addEntity(entity);
+ engine.update(10);
+
+ console.log('\n## Removing entity');
+ engine.removeEntity(entity);
+ engine.update(10);
+
+ console.log('\n## Removing system');
+ engine.removeSystem(testSystem);
+ engine.update(10);
+
+};
+
+if (typeof require === 'function') {
+ let Serpentity = require('serpentity');
+ test(Serpentity);
+} else {
+ window.addEventListener('load', function () {
+ test(window.Serpentity);
+ });
+}
+