| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/happymandarin/node_modules/async-foreach/test/ |
Upload File : |
/*global require:true, setTimeout:true */
var forEach = require('../lib/foreach').forEach;
exports['foreach'] = {
setUp: function(done) {
this.order = [];
this.track = function() {
[].push.apply(this.order, arguments);
};
done();
},
'Synchronous': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
});
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"each", "c", 2, arr
], "should call eachFn for each array item, in order.");
test.done();
},
'Synchronous, done': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
});
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"each", "c", 2, arr,
"done", true, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
},
'Synchronous, early abort': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
if (item === "b") { return false; }
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
});
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"done", false, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
},
'Asynchronous': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
var done = this.async();
setTimeout(done, 10);
});
setTimeout(function() {
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"each", "c", 2, arr
], "should call eachFn for each array item, in order.");
test.done();
}, 100);
},
'Asynchronous, done': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
var done = this.async();
setTimeout(done, 10);
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"each", "c", 2, arr,
"done", true, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
});
},
'Asynchronous, early abort': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
var done = this.async();
setTimeout(function() {
done(item !== "b");
}, 10);
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"done", false, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
});
},
'Not actually asynchronous': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
var done = this.async();
done();
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"each", "c", 2, arr,
"done", true, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
});
},
'Not actually asynchronous, early abort': function(test) {
test.expect(1);
var that = this;
var arr = ["a", "b", "c"];
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
var done = this.async();
done(item !== "b");
}, function(notAborted, arr) {
that.track("done", notAborted, arr);
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "b", 1, arr,
"done", false, arr
], "should call eachFn for each array item, in order, followed by doneFn.");
test.done();
});
},
'Sparse array support': function(test) {
test.expect(1);
var that = this;
var arr = [];
arr[0] = "a";
arr[9] = "z";
forEach(arr, function(item, index, arr) {
that.track("each", item, index, arr);
});
test.deepEqual(that.order, [
"each", "a", 0, arr,
"each", "z", 9, arr
], "should skip nonexistent array items.");
test.done();
},
'Invalid length sanitization': function(test) {
test.expect(1);
var that = this;
var obj = {length: 4294967299, 0: "a", 2: "b", 3: "c" };
forEach(obj, function(item, index, arr) {
that.track("each", item, index, arr);
});
test.deepEqual(that.order, [
"each", "a", 0, obj,
"each", "b", 2, obj
], "should sanitize length property (ToUint32).");
test.done();
}
};