Пример #1
0
    test('does not override set data with mixin', function (done) {
      var el;
      var mixinEl;

      el = helpers.entityFactory();

      registerComponent('dummy', {
        schema: {
          color: {default: 'blue'},
          size: {default: 5}
        }
      });

      mixinEl = document.createElement('a-mixin');
      mixinEl.setAttribute('id', 'mixindummy');
      mixinEl.setAttribute('dummy', 'size: 1');

      el.addEventListener('loaded', () => {
        el.sceneEl.appendChild(mixinEl);
        el.setAttribute('mixin', 'mixindummy');
        el.setAttribute('dummy', 'size', 20);
        el.setAttribute('dummy', 'color', 'red');
        assert.equal(el.getAttribute('dummy').color, 'red');
        assert.equal(el.getAttribute('dummy').size, 20);
        done();
      });
    });
Пример #2
0
 test('updates the properties with a null value', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}}
   });
   var component = new TestComponent(this.el);
   component.updateProperties({color: 'blue'});
   assert.equal(component.data.color, 'blue');
 });
Пример #3
0
 setup(function () {
   components.dummy = undefined;
   var pauseStub = this.pauseStub = sinon.stub();
   registerComponent('dummy', {
     schema: {color: {default: 'red'}},
     pause: pauseStub
   });
 });
Пример #4
0
 test('updates the properties with the new value', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}}
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   component.updateProperties(null);
   assert.equal(component.data.color, 'red');
 });
Пример #5
0
 test('parses single value component', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {default: '0 0 1', type: 'vec3'}
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentObj = component.parseAttrValueForCache('1 2 3');
   assert.deepEqual(componentObj, {x: 1, y: 2, z: 3});
 });
Пример #6
0
 test('uses default values for single-property schema', function () {
   registerComponent('dummy', {
     schema: {default: 'blue'}
   });
   var el = document.createElement('a-entity');
   el.setAttribute('dummy', '');
   var data = el.components.dummy.buildData(undefined, null);
   assert.equal(data, 'blue');
 });
Пример #7
0
 test('stringifies single value component', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {default: '0 0 1', type: 'vec3'}
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentString = component.stringify({x: 1, y: 2, z: 3});
   assert.deepEqual(componentString, '1 2 3');
 });
Пример #8
0
      'when the attribute is empty string', function () {
   var data;
   var TestComponent = registerComponent('dummy', {
     schema: {default: 'red'}
   });
   var el = document.createElement('a-entity');
   el.setAttribute('dummy', '');
   data = buildData(el, 'dummy', TestComponent.prototype.schema, 'red');
   assert.equal(data, 'red');
 });
Пример #9
0
 test('extends the schema', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}}
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   component.extendSchema({size: {default: 5}});
   assert.ok(component.schema.size);
   assert.ok(component.schema.color);
 });
Пример #10
0
 test('a selector property default is not cloned into data', function () {
   registerComponent('dummy', {
     schema: {type: 'selector', default: document.body}
   });
   var el = document.createElement('a-entity');
   el.hasLoaded = true;
   el.setAttribute('dummy', 'head');
   el.components.dummy.updateProperties('');
   assert.equal(el.components.dummy.data, el.components.dummy.schema.default);
 });
Пример #11
0
 test('updates component DOM attribute', function () {
   registerComponent('dummy', {
     schema: {color: {default: 'red'}}
   });
   var el = document.createElement('a-entity');
   el.setAttribute('dummy', {color: 'blue'});
   assert.equal(HTMLElement.prototype.getAttribute.call(el, 'dummy'), '');
   el.components.dummy.flushToDOM();
   assert.equal(HTMLElement.prototype.getAttribute.call(el, 'dummy'), 'color:blue');
 });
Пример #12
0
 test('returns default for single-prop schema when attr is empty string', function () {
   var data;
   registerComponent('dummy', {
     schema: {default: 'red'}
   });
   var el = document.createElement('a-entity');
   el.setAttribute('dummy', '');
   data = el.components.dummy.buildData('red');
   assert.equal(data, 'red');
 });
Пример #13
0
 test('returns data for single-prop if default is null', function () {
   var el = document.createElement('a-entity');
   registerComponent('test', {
     schema: {default: null}
   });
   el.setAttribute('test', '');
   assert.equal(el.components.test.buildData(), null);
   assert.equal(el.components.test.buildData(null), null);
   assert.equal(el.components.test.buildData('foo'), 'foo');
 });
Пример #14
0
 test('parses component properties vec3', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {
       position: {type: 'vec3', default: '0 0 1'}
     }
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentObj = component.parse({position: '0 1 0'});
   assert.deepEqual(componentObj.position, {x: 0, y: 1, z: 0});
 });
Пример #15
0
 test('clones plain object schema default into data', function () {
   registerComponent('dummy', {
     schema: {type: 'vec3', default: {x: 1, y: 1, z: 1}}
   });
   var el = document.createElement('a-entity');
   el.hasLoaded = true;
   el.setAttribute('dummy', '2 2 2');
   el.components.dummy.updateProperties('');
   assert.notEqual(el.components.dummy.data, el.components.dummy.schema.default);
   assert.deepEqual(el.components.dummy.data, {x: 1, y: 1, z: 1});
 });
Пример #16
0
 test('clones array property type', function () {
   var array = ['a'];
   var data;
   var el;
   registerComponent('test', {schema: {default: array}});
   el = document.createElement('a-entity');
   el.setAttribute('test', '');
   data = el.components.test.buildData();
   assert.equal(data[0], 'a');
   assert.notEqual(data, array);
 });
Пример #17
0
 test('does not parse properties that parse to another string', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {
       url: {type: 'src', default: ''}
     }
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentObj = component.parseAttrValueForCache({url: 'url(www.mozilla.com)'});
   assert.equal(componentObj.url, 'url(www.mozilla.com)');
 });
Пример #18
0
 test('oldData is empty object on the first call when a single property component with an object as default initializes', function () {
   var updateStub = sinon.stub();
   registerComponent('dummy', {
     schema: {type: 'vec3'},
     update: updateStub
   });
   this.el.setAttribute('dummy', '');
   sinon.assert.calledOnce(updateStub);
   // old Data passed to the update method
   assert.deepEqual(updateStub.getCalls()[0].args[0], {});
 });
Пример #19
0
 test('oldData is undefined on the first call when a single property component initializes', function () {
   var updateStub = sinon.stub();
   registerComponent('dummy', {
     schema: {default: 0},
     update: updateStub
   });
   this.el.setAttribute('dummy', '');
   sinon.assert.calledOnce(updateStub);
   // old Data passed to the update method
   assert.equal(updateStub.getCalls()[0].args[0], undefined);
 });
Пример #20
0
 test('supports array properties', function () {
   var updateStub = sinon.stub();
   var TestComponent = registerComponent('dummy', {
     schema: {list: {default: ['a']}}
   });
   var component = new TestComponent(this.el);
   component.update = updateStub;
   component.updateProperties({list: ['b']});
   component.updateProperties({list: ['b']});
   sinon.assert.calledOnce(updateStub);
 });
Пример #21
0
 test('not called if component data does not change', function () {
   var updateStub = sinon.stub();
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}}
   });
   var component = new TestComponent(this.el);
   component.update = updateStub;
   component.updateProperties({color: 'blue'});
   component.updateProperties({color: 'blue'});
   assert.ok(updateStub.calledOnce);
 });
Пример #22
0
 test('uses defined values for single-property schema', function () {
   var data;
   var TestComponent = registerComponent('dummy', {
     schema: {default: 'red'}
   });
   var el = document.createElement('a-entity');
   var mixinEl = document.createElement('a-mixin');
   mixinEl.setAttribute('dummy', 'blue');
   el.mixinEls = [mixinEl];
   data = buildData(el, 'dummy', TestComponent.prototype.schema, 'green', 'green');
   assert.equal(data, 'green');
 });
Пример #23
0
 test('not called if component data does not change', function () {
   var updateStub = sinon.stub();
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}},
     update: updateStub
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   component.updateProperties({color: 'blue'});
   component.updateProperties({color: 'blue'});
   assert.ok(updateStub.calledOnce);
 });
Пример #24
0
    test('can change behavior of entity', function (done) {
      registerComponent('clone', CloneComponent);

      el.addEventListener('loaded', function () {
        assert.notOk('clone' in el.components);
        assert.notOk(el.object3D.children.length);
        el.setAttribute('clone', '');
        assert.ok('clone' in el.components);
        assert.equal(el.object3D.children[0].uuid, 'Bubble Fett');
        done();
      });
    });
Пример #25
0
 test('stringifies component property vec3', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {
       position: {type: 'vec3', default: '0 0 1'}
     }
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentObj = {position: {x: 1, y: 2, z: 3}};
   var componentString = component.stringify(componentObj);
   assert.deepEqual(componentString, 'position:1 2 3');
 });
Пример #26
0
 test('parses component using the style parser for a complex schema', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {
       position: {type: 'vec3', default: '0 0 1'},
       color: {default: 'red'}
     }
   });
   var el = document.createElement('a-entity');
   var component = new TestComponent(el);
   var componentObj = component.parseAttrValueForCache({position: '0 1 0', color: 'red'});
   assert.deepEqual(componentObj, {position: '0 1 0', color: 'red'});
 });
Пример #27
0
 test('uses default values', function () {
   registerComponent('dummy', {
     schema: {
       color: {default: 'blue'},
       size: {default: 5}
     }
   });
   var el = document.createElement('a-entity');
   el.setAttribute('dummy', '');
   var data = el.components.dummy.buildData({}, null);
   assert.equal(data.color, 'blue');
   assert.equal(data.size, 5);
 });
Пример #28
0
 test('emit componentchanged when update calls setAttribute', function (done) {
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}},
     update: function () { this.el.setAttribute('dummy', 'color', 'blue'); }
   });
   this.el.addEventListener('componentchanged', evt => {
     assert.equal(evt.detail.name, 'dummy');
     assert.equal(this.el.getAttribute('dummy').color, 'blue');
     done();
   });
   var component = new TestComponent(this.el);
   assert.equal(component.data.color, 'blue');
 });
Пример #29
0
 test('updates the schema of a component', function () {
   var TestComponent = registerComponent('dummy', {
     schema: {color: {default: 'red'}},
     updateSchema: function (data) {
       this.extendSchema({energy: {default: 100}});
     }
   });
   var component = new TestComponent(this.el);
   component.updateProperties(null);
   assert.equal(component.schema.color.default, 'red');
   assert.equal(component.schema.energy.default, 100);
   assert.equal(component.data.color, 'red');
 });
Пример #30
0
 test('returns data for multi-prop if default is null with previousData', function () {
   var el = document.createElement('a-entity');
   registerComponent('test', {
     schema: {
       foo: {default: null}
     }
   });
   el.setAttribute('test', '');
   el.components.test.attrValue = {foo: null};
   assert.equal(el.components.test.buildData().foo, null);
   assert.equal(el.components.test.buildData({foo: null}).foo, null);
   assert.equal(el.components.test.buildData({foo: 'foo'}).foo, 'foo');
 });