yatem
Version:
Yet Another Tiny Event Emitter
215 lines (185 loc) • 5.46 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<title>test yatem</title>
<style>
body {
margin: 0;
}
h1 {
text-align: center;
}
#output {
padding: 1em;
}
p,
h3 {
margin: 0;
line-height: 1.5;
}
#output p {
margin-left: 1em;
}
</style>
</head>
<body>
<h1>test yatem</h1>
<div id="output"></div>
<script>
var output = document.getElementById('output');
function echo(pass, no, msg, operator, expected, actual) {
var p = document.createElement('p');
function toString(value) {
if (value && typeof value === 'object') {
return JSON.stringify(value);
}
return value;
}
if (pass) {
p.style.color = 'green';
p.innerHTML = 'ok ' + no + ' ' + msg;
} else {
p.style.color = 'red';
p.innerHTML = 'not ok ' + no + ' ' + msg + '<br>';
p.innerHTML += '--';
p.innerHTML += '<br>operator: ' + operator;
p.innerHTML += '<br>excepted: ' + toString(expected);
p.innerHTML += '<br>actual: ' + toString(actual);
p.innerHTML += '<br>--';
}
output.appendChild(p);
return !!pass;
}
function test(name, cb) {
var t = {
equal: function(actual, expected) {
var msg = 'should be equal';
if (actual === expected) {
this.__success++;
return echo(true, this.__success + this.__fail, msg);
} else {
this.__fail++;
return echo(false, this.__success + this.__fail, msg, 'equal', expected, actual);
}
},
deepEqual: function(actual, expected) {
var msg = 'should be equivalent';
if ((typeof actual !== 'object') || (typeof expected !== 'object')) {
if (actual === expected) {
return true;
}
return false;
}
for (var key in expected) {
if (expected.hasOwnProperty(key) && actual.hasOwnProperty(key)) {
if (!this.deepEqual(actual[key], expected[key])) {
this.__fail++;
return echo(false, this.__success + this.__fail, msg, 'deepEqual', expected, actual);
}
} else {
this.__fail++;
return echo(false, this.__success + this.__fail, msg, 'deepEqual', expected, actual);
}
}
this.__success++;
return echo(true, this.__success + this.__fail, msg);
},
comment: function(msg, bgcolor) {
var h3 = document.createElement('h3');
h3.innerHTML = '# ' + (msg || '(anonymous)');
h3.style.color = 'white';
h3.style.backgroundColor = bgcolor || 'grey';
output.appendChild(h3);
},
end: function() {
var self = this;
setTimeout(function() {
var total = self.__success + self.__fail;
output.appendChild(document.createElement('br'));
self.comment('tests ' + total);
self.comment('pass ' + self.__success, 'green');
self.comment('fail ' + self.__fail, 'red');
output.appendChild(document.createElement('br'));
self.comment(total === self.__success ? 'ok' : 'failed', total === self.__success ? 'green' : 'red');
});
},
__fail: 0,
__success: 0
};
console.log = function(msg) {
var p = document.createElement('p');
p.innerHTML = '<span style="color:blue">>> </span>' + msg;
output.appendChild(p);
};
t.comment(name);
(typeof cb === 'function') && cb(t);
}
</script>
<script src="../lib/yatem.min.js"></script>
<script>
var onCallback0 = function() {
console.log('on 0 emitted!');
};
var onCallback1 = function() {
setTimeout(function() {
console.log('on 1 emitted!');
});
};
var onceCallback0 = function() {
console.log('once 0 emitted!');
};
var onceCallback1 = function() {
setTimeout(function() {
console.log('once 1 emitted!');
});
};
test('test', function(t) {
var on0 = yatem.on('testOn', onCallback0);
var on1 = yatem.on('testOn', onCallback1);
var onc0 = yatem.once('testOn', onCallback0)
var once0 = yatem.once('testOnce', onceCallback0);
var once1 = yatem.once('testOnce', onceCallback1);
var onc1 = yatem.on('testOnce', onceCallback0)
t.deepEqual(on0, {
name: 'testOn',
handler: 0
});
t.deepEqual(on1, {
name: 'testOn',
handler: 1
});
t.equal(onc0, false);
t.deepEqual(once0, {
name: 'testOnce',
handler: 0
});
t.deepEqual(once1, {
name: 'testOnce',
handler: 1
});
t.equal(onc1, false);
t.comment('emit `testOn`');
yatem.emit('testOn');
t.comment('emit `testOn` again');
yatem.emit('testOn');
t.equal(typeof yatem.off(on0), 'function');
t.comment('emit `testOn` after off on0');
yatem.emit('testOn');
t.equal(typeof yatem.off(on1), 'function');
t.equal(yatem.off(onc0), false);
yatem.emit('testOn');
t.equal(yatem.off('testOn'), false);
t.equal(typeof yatem.off(once0), 'function');
t.comment('emit `testOnce`');
yatem.emit('testOnce');
t.equal(yatem.off(once1), false);
t.comment('emit `testOnce` again');
yatem.emit('testOnce');
t.equal(yatem.off('testOnce'), false);
t.end();
});
</script>
</body>
</html>