Invoke event listener with several arguments in array #13
parent
f839ac08bb
commit
d0a2f5176e
@ -0,0 +1,90 @@
|
|||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var snabbdom = require('../snabbdom');
|
||||||
|
var patch = snabbdom.init([
|
||||||
|
require('../modules/eventlisteners.js'),
|
||||||
|
]);
|
||||||
|
var h = require('../h');
|
||||||
|
|
||||||
|
describe('event listeners', function() {
|
||||||
|
var elm, vnode0;
|
||||||
|
beforeEach(function() {
|
||||||
|
elm = document.createElement('div');
|
||||||
|
vnode0 = elm;
|
||||||
|
});
|
||||||
|
it('attaches click event handler to element', function() {
|
||||||
|
var result = [];
|
||||||
|
function clicked(ev) { result.push(ev); }
|
||||||
|
var vnode = h('div', {on: {click: clicked}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
patch(vnode0, vnode);
|
||||||
|
elm.click();
|
||||||
|
assert.equal(1, result.length);
|
||||||
|
});
|
||||||
|
it('does not attach new listener', function() {
|
||||||
|
var result = [];
|
||||||
|
//function clicked(ev) { result.push(ev); }
|
||||||
|
var vnode1 = h('div', {on: {click: function(ev) { result.push(1); }}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
var vnode2 = h('div', {on: {click: function(ev) { result.push(2); }}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
patch(vnode0, vnode1);
|
||||||
|
elm.click();
|
||||||
|
patch(vnode1, vnode2);
|
||||||
|
elm.click();
|
||||||
|
assert.deepEqual(result, [1, 2]);
|
||||||
|
});
|
||||||
|
it('does calls handler for function in array', function() {
|
||||||
|
var result = [];
|
||||||
|
function clicked(ev) { result.push(ev); }
|
||||||
|
var vnode = h('div', {on: {click: [clicked, 1]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
patch(vnode0, vnode);
|
||||||
|
elm.click();
|
||||||
|
assert.deepEqual(result, [1]);
|
||||||
|
});
|
||||||
|
it('handles changed value in array', function() {
|
||||||
|
var result = [];
|
||||||
|
function clicked(ev) { result.push(ev); }
|
||||||
|
var vnode1 = h('div', {on: {click: [clicked, 1]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
var vnode2 = h('div', {on: {click: [clicked, 2]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
var vnode3 = h('div', {on: {click: [clicked, 3]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
patch(vnode0, vnode1);
|
||||||
|
elm.click();
|
||||||
|
patch(vnode1, vnode2);
|
||||||
|
elm.click();
|
||||||
|
patch(vnode2, vnode3);
|
||||||
|
elm.click();
|
||||||
|
assert.deepEqual(result, [1, 2, 3]);
|
||||||
|
});
|
||||||
|
it('handles changed several values in array', function() {
|
||||||
|
var result = [];
|
||||||
|
function clicked() { result.push([].slice.call(arguments)); }
|
||||||
|
var vnode1 = h('div', {on: {click: [clicked, 1, 2, 3]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
var vnode2 = h('div', {on: {click: [clicked, 1, 2]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
var vnode3 = h('div', {on: {click: [clicked, 2, 3]}}, [
|
||||||
|
h('a', 'Click my parent'),
|
||||||
|
]);
|
||||||
|
patch(vnode0, vnode1);
|
||||||
|
elm.click();
|
||||||
|
patch(vnode1, vnode2);
|
||||||
|
elm.click();
|
||||||
|
patch(vnode2, vnode3);
|
||||||
|
elm.click();
|
||||||
|
assert.deepEqual(result, [[1, 2, 3], [1, 2], [2, 3]]);
|
||||||
|
});
|
||||||
|
});
|
@ -1,4 +1,5 @@
|
|||||||
require('./core');
|
require('./core');
|
||||||
require('./style');
|
require('./style');
|
||||||
|
require('./eventlisteners');
|
||||||
require('./attachto');
|
require('./attachto');
|
||||||
require('./thunk');
|
require('./thunk');
|
||||||
|
Loading…
Reference in New Issue