networked-aframe
Version:
A web framework for building multi-user virtual reality experiences.
102 lines (81 loc) • 2.76 kB
JavaScript
/* global assert, setup, suite, test, sinon, teardown */
var sinonTest = require("sinon-test");
sinon.test = sinonTest(sinon);
require('aframe');
var helpers = require('./helpers');
var naf = require('../../src/NafIndex');
require('../../src/components/networked');
suite('networked_withParent', function() {
var scene;
var entity;
var networked;
var parent;
var parentNetworked;
function initScene(done) {
var opts = {
assets: [
"<template id='t1'><a-entity></a-entity></template>",
"<template id='t2'><a-entity></a-entity></template>"
],
entity: '<a-entity id="test-parent" networked="template:#t2"><a-entity id="test-entity" networked="template:#t1" position="1 2 3" rotation="4 3 2"><a-box></a-box></a-entity></a-entity>'
};
scene = helpers.sceneFactory(opts);
naf.utils.whenEntityLoaded(scene, done);
}
setup(function(done) {
initScene(function() {
entity = document.querySelector('#test-entity');
parent = document.querySelector('#test-parent');
networked = entity.components['networked'];
networked.data.networkId = '';
parentNetworked = parent.components['networked'];
parentNetworked.data.networkId = '';
done();
});
});
teardown(function() {
scene.parentElement.removeChild(scene);
});
suite('Setup', function() {
test('creates entity', function() {
assert.isOk(entity);
});
test('creates component', function() {
assert.isOk(networked);
});
});
suite('init', function() {
test('sets parent when has parent', function() {
naf.clientId = 'owner1';
networked.init();
document.body.dispatchEvent(new Event('loggedIn'));
var result = networked.parent;
assert.equal(result, parent);
});
});
suite('syncAll', function() {
test('broadcasts data with parent', sinon.test(function() {
this.stub(naf.connection, 'broadcastDataGuaranteed');
var expected = {
networkId: 'network1',
owner: 'owner1',
lastOwnerTime: -1,
parent: 'parentId',
template: '#t1',
components: {
0: { x: 1, y: 2, z: 3 },
1: { x: 4, y: 3, z: 2 }
}
};
var networkIdStub = this.stub(naf.utils, 'createNetworkId').returns('parentId');
parentNetworked.init();
networkIdStub.returns('network1');
networked.init();
document.body.dispatchEvent(new Event('loggedIn'));
networked.syncAll();
assert.isTrue(naf.connection.broadcastDataGuaranteed.called, 'Called at all');
var called = naf.connection.broadcastDataGuaranteed.calledWithExactly('u', expected);
assert.isTrue(called, 'Called with exactly');
}));
});
});