]> git.r.bdr.sh - rbdr/serpentity/blobdiff - test/integration.js
Moves tests, recycles integration
[rbdr/serpentity] / test / integration.js
diff --git a/test/integration.js b/test/integration.js
new file mode 100644 (file)
index 0000000..0ca7e26
--- /dev/null
@@ -0,0 +1,163 @@
+'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);
+  });
+}
+