parallel-tests.js revision c7490faa3e66f7eb871b63274ce9b824fa7d0bdb
3c189207a3e635a8157893e56da217e0492b3894Dav GlassYUI.add('parallel-tests', function(Y) {
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var Assert = Y.Assert;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var testCase = new Y.Test.Case({
3c189207a3e635a8157893e56da217e0492b3894Dav Glass name: "Parallel Tests",
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_load: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var test = this;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Y.use('parallel', function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test.resume(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.isFunction(Y.Parallel, 'Y.Parallel did not load');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass });
3c189207a3e635a8157893e56da217e0492b3894Dav Glass });
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test.wait();
3c189207a3e635a8157893e56da217e0492b3894Dav Glass },
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_stack: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var stack = new Y.Parallel(),
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter = 0;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass for (var i = 1; i <= 15; i++) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass setTimeout(stack.add(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter++;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }), 100);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass stack.done(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, stack.finished, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, counter, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass });
3c189207a3e635a8157893e56da217e0492b3894Dav Glass },
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_reults: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var stack = new Y.Parallel(),
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter = 0;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass for (var i = 1; i <= 15; i++) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass setTimeout(stack.add(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter++;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass return false;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }), 100);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass stack.done(function(results) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, stack.finished, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, counter, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, results.length, 'Results array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass });
3c189207a3e635a8157893e56da217e0492b3894Dav Glass },
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_returns_data: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var stack = new Y.Parallel(),
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter = 0;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass for (var i = 1; i <= 15; i++) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass setTimeout(stack.add(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter++;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass return false;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }), 100);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass stack.done(function(results, data) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, stack.finished, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, counter, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, results.length, 'Results array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(0, data.length, 'Data array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }, []);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass },
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_nocontext: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var stack = new Y.Parallel(),
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter = 0;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass for (var i = 1; i <= 15; i++) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass setTimeout(stack.add(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter++;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.isFunction(this.use, 'Execution context is wrong in stack item');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass return false;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }), 100);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass stack.done(function(results, data) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, stack.finished, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, counter, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, results.length, 'Results array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(0, data.length, 'Data array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.isFunction(this.use, 'Execution context is wrong in done handler');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }, []);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass },
3c189207a3e635a8157893e56da217e0492b3894Dav Glass test_context: function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass var stack = new Y.Parallel({
3c189207a3e635a8157893e56da217e0492b3894Dav Glass context: { foo: true }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }),
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter = 0;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass for (var i = 1; i <= 15; i++) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass setTimeout(stack.add(function() {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass counter++;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.isTrue(this.foo, 'Execution context is wrong in stack item');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass return false;
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }), 100);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass stack.done(function(results, data) {
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, stack.finished, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, counter, 'Stack did not complete properly');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(15, results.length, 'Results array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.areEqual(0, data.length, 'Data array is not right');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Assert.isTrue(this.foo, 'Execution context is wrong in done handler');
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }, []);
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo },
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo test_add_nofn: function() {
c7490faa3e66f7eb871b63274ce9b824fa7d0bdbEric Ferraiuolo var stack = new Y.Parallel(),
c7490faa3e66f7eb871b63274ce9b824fa7d0bdbEric Ferraiuolo callback;
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
c7490faa3e66f7eb871b63274ce9b824fa7d0bdbEric Ferraiuolo // Calls `add()` with no args, then calls the returned callback fn.
c7490faa3e66f7eb871b63274ce9b824fa7d0bdbEric Ferraiuolo callback = stack.add();
c7490faa3e66f7eb871b63274ce9b824fa7d0bdbEric Ferraiuolo callback();
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo stack.done(function(results, data) {
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo Assert.areEqual(1, stack.finished, 'Stack did not complete properly');
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo Assert.areEqual(1, results.length, 'Results array is not right');
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo Assert.areEqual(0, data.length, 'Data array is not right');
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo Assert.isFunction(this.use, 'Execution context is wrong in done handler');
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo }, []);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass }
3c189207a3e635a8157893e56da217e0492b3894Dav Glass });
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass Y.Test.Runner.add(testCase);
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
3c189207a3e635a8157893e56da217e0492b3894Dav Glass
e42975a1b0ef7ebbf876cdf8dc626f86c3fc0c9aEric Ferraiuolo
3c189207a3e635a8157893e56da217e0492b3894Dav Glass});