f1
Version:
A stateful ui library
172 lines (147 loc) • 2.55 kB
JavaScript
var f1 = require('./..');
var EXPECTED_GO_CALLBACK = [ { item: { value: 100 } }, 'idle' ];
var EXPECTED_STATES = [
[
{
"item": {
"value": 0
}
},
"out"
],
[
{
"item": {
"value": 100
}
},
"idle"
]
];
var EXPECTED_UPDATES = [
[
{
"item": {
"value": 0
}
},
"out",
0,
0
],
[
{
"item": {
"value": 30
}
},
"out",
0.3,
1
],
[
{
"item": {
"value": 60
}
},
"out",
0.6,
1
],
[
{
"item": {
"value": 90
}
},
"out",
0.9,
1
],
[
{
"item": {
"value": 100
}
},
"idle",
0,
1
]
];
module.exports = function(t) {
var eventStates = [];
var eventUpdates = [];
var cbStates = [];
var cbUpdates = [];
var goCallback = null;
var item = {};
var ui = f1({
autoUpdate: false,
onState: callBackState,
onUpdate: callBackUpdate
});
ui.states({
out: {
item: {
value: 0
}
},
idle: {
item: {
value: 100
}
}
});
ui.transitions([
{ from: 'out', to: 'idle', animation: {
duration: 1
}
}
]);
ui.targets({
item: item
});
ui.parsers({
update: [
function(target, state) {
for(var i in state) {
target[ i ] = state[ i ];
}
}
]
});
ui.on('state', eventState);
ui.on('update', eventUpdate);
ui.init('out');
ui.go('idle', function() {
goCallback = Array.prototype.slice.call(arguments);
});
ui.step(300);
ui.step(300);
ui.step(300);
ui.step(300);
ui.step(300);
ui.step(300);
ui.step(300);
ui.step(300);
t.deepEqual(goCallback, EXPECTED_GO_CALLBACK, 'go callback was correct');
t.deepEqual(eventStates, EXPECTED_STATES, 'event states matched expected');
t.deepEqual(eventUpdates, EXPECTED_UPDATES, 'event updates matched expected');
t.deepEqual(cbStates, EXPECTED_STATES, 'callback states matched expected');
t.deepEqual(cbUpdates, EXPECTED_UPDATES, 'callback updates matched expected');
t.end();
function eventState() {
eventStates.push(Array.prototype.slice.call(arguments));
}
function eventUpdate() {
eventUpdates.push(Array.prototype.slice.call(arguments));
}
function callBackState() {
cbStates.push(Array.prototype.slice.call(arguments));
}
function callBackUpdate() {
cbUpdates.push(Array.prototype.slice.call(arguments));
}
};