mirror of
https://github.com/pebble-dev/clay.git
synced 2026-08-28 04:46:57 -04:00
drop ClayEvents.one since it is a pain to work with and add tests for ClayEvents
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('chai').assert;
|
||||
var sinon = require('sinon');
|
||||
var _ = require('../../../src/scripts/vendor/minified/minified')._;
|
||||
var textComponent = require('pebble-clay-components/dist/components/text');
|
||||
var componentRegistry = require('../../../src/scripts/lib/component-registry');
|
||||
var checkReadOnly = require('../../test-utils').checkReadOnly;
|
||||
@@ -18,7 +18,6 @@ describe('ClayConfig', function() {
|
||||
'registerComponent',
|
||||
'build',
|
||||
'on',
|
||||
'one',
|
||||
'off',
|
||||
'trigger'
|
||||
];
|
||||
@@ -129,7 +128,37 @@ describe('ClayConfig', function() {
|
||||
clayConfig.build();
|
||||
});
|
||||
|
||||
// @todo test for validation
|
||||
it('throws if manipulator is a string and does not match built-in manipulator',
|
||||
function(done) {
|
||||
var clayConfig = fixtures.clayConfig(['text'], true);
|
||||
var _textComponent = _.copyObj(textComponent);
|
||||
_textComponent.manipulator = 'not_real';
|
||||
|
||||
clayConfig.on(clayConfig.EVENTS.BEFORE_BUILD, function() {
|
||||
assert.throws(function() {
|
||||
clayConfig.registerComponent(_textComponent);
|
||||
}, new RegExp('not_real'));
|
||||
done();
|
||||
});
|
||||
|
||||
clayConfig.build();
|
||||
});
|
||||
|
||||
it('throws if manipulator does not have a `get` and `set` method',
|
||||
function(done) {
|
||||
var clayConfig = fixtures.clayConfig(['text'], true);
|
||||
var _textComponent = _.copyObj(textComponent);
|
||||
_textComponent.manipulator = {};
|
||||
|
||||
clayConfig.on(clayConfig.EVENTS.BEFORE_BUILD, function() {
|
||||
assert.throws(function() {
|
||||
clayConfig.registerComponent(_textComponent);
|
||||
}, /(get.*set)|(set.*get)/);
|
||||
done();
|
||||
});
|
||||
|
||||
clayConfig.build();
|
||||
});
|
||||
});
|
||||
|
||||
describe('.build()', function() {
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
'use strict';
|
||||
var sinon = require('sinon');
|
||||
var assert = require('chai').assert;
|
||||
var ClayEvents = require('../../../src/scripts/lib/clay-events');
|
||||
var $ = require('../../../src/scripts/vendor/minified/minified').$;
|
||||
var HTML = require('../../../src/scripts/vendor/minified/minified').HTML;
|
||||
|
||||
/**
|
||||
* @extends ClayEvents
|
||||
*/
|
||||
var ctx;
|
||||
|
||||
var eventCounter = 0;
|
||||
|
||||
var createEventName = function() {
|
||||
eventCounter++;
|
||||
return 'test-event-' + eventCounter;
|
||||
};
|
||||
|
||||
describe('ClayEvents', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
ctx = {};
|
||||
ClayEvents.call(ctx, $(HTML('<div>')));
|
||||
});
|
||||
|
||||
it('registers the methods on the context', function() {
|
||||
['on', 'off', 'trigger'].forEach(function(method) {
|
||||
assert.typeOf(ctx[method], 'function');
|
||||
});
|
||||
});
|
||||
|
||||
describe('.on()', function() {
|
||||
it('registers one event', function() {
|
||||
var eventName = createEventName();
|
||||
var eventHandlerSpy = sinon.spy();
|
||||
|
||||
ctx.on(eventName, eventHandlerSpy);
|
||||
ctx.trigger(eventName);
|
||||
ctx.trigger(eventName);
|
||||
|
||||
assert(eventHandlerSpy.calledTwice, 'handler not called 2 times');
|
||||
assert(eventHandlerSpy.alwaysCalledOn(ctx), 'handler not called on ctx');
|
||||
});
|
||||
|
||||
it('registers multiple events', function() {
|
||||
var eventName1 = createEventName();
|
||||
var eventName2 = createEventName();
|
||||
var eventHandlerSpy = sinon.spy();
|
||||
|
||||
ctx.on(eventName1 + ' ' + eventName2, eventHandlerSpy);
|
||||
ctx.trigger(eventName1);
|
||||
ctx.trigger(eventName1);
|
||||
ctx.trigger(eventName2);
|
||||
ctx.trigger(eventName2);
|
||||
|
||||
assert.strictEqual(eventHandlerSpy.callCount, 4, 'handler not called 4 times');
|
||||
assert(eventHandlerSpy.alwaysCalledOn(ctx), 'handler not called on ctx');
|
||||
});
|
||||
});
|
||||
|
||||
describe('.off()', function() {
|
||||
it('deregisters the handler for all events on the context', function() {
|
||||
var eventName1 = createEventName();
|
||||
var eventName2 = createEventName();
|
||||
var eventHandlerSpy = sinon.spy();
|
||||
|
||||
var ctx1 = ctx;
|
||||
var ctx2 = {};
|
||||
ClayEvents.call(ctx2, $(HTML('<div>')));
|
||||
|
||||
ctx.id = 1;
|
||||
ctx1.on(eventName1, eventHandlerSpy);
|
||||
ctx1.on(eventName2, eventHandlerSpy);
|
||||
ctx2.on(eventName2, eventHandlerSpy);
|
||||
|
||||
ctx1.trigger(eventName1);
|
||||
ctx1.trigger(eventName2);
|
||||
ctx2.trigger(eventName2);
|
||||
|
||||
ctx1.off(eventHandlerSpy);
|
||||
|
||||
ctx1.trigger(eventName1);
|
||||
ctx1.trigger(eventName2);
|
||||
ctx2.trigger(eventName2);
|
||||
|
||||
assert.strictEqual(eventHandlerSpy.callCount, 4, 'handler not called 4 times');
|
||||
});
|
||||
|
||||
it('does nothing if the handler does not exist', function() {
|
||||
// register a fake event so _getEventProxy() has something to look for
|
||||
ctx.on(createEventName(), sinon.spy());
|
||||
|
||||
assert.doesNotThrow(function() {
|
||||
ctx.off(sinon.spy());
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('.trigger()', function() {
|
||||
it('triggers the handler for the event with custom data', function() {
|
||||
var eventName = createEventName();
|
||||
var eventHandlerSpy = sinon.spy();
|
||||
var customData = {foo: 'bar'};
|
||||
|
||||
ctx.on(eventName, eventHandlerSpy);
|
||||
ctx.trigger(eventName, customData);
|
||||
|
||||
assert(eventHandlerSpy.calledOnce, 'handler not called 2 times');
|
||||
assert(eventHandlerSpy.alwaysCalledOn(ctx), 'handler not called on ctx');
|
||||
assert(eventHandlerSpy.calledWith(customData), 'handler not called on ctx');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -17,7 +17,6 @@ describe('ClayItem', function() {
|
||||
'$element',
|
||||
'$manipulatorTarget',
|
||||
'on',
|
||||
'one',
|
||||
'off',
|
||||
'trigger',
|
||||
'initialize'
|
||||
|
||||
Reference in New Issue
Block a user