Skip to content

Commit d917880

Browse files
author
Caitlin Potter
committed
Promise-Aplus v2.0.3 WIP #1
Got 30~ tests passing in the 2.3.3 test suite
1 parent cbb3ce2 commit d917880

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

lib/promises-aplus/promises-aplus-test-adapter.js

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,8 @@ var isFunction = function isFunction(value){return typeof value == 'function';}
22

33
var $q = qFactory(process.nextTick, function noopExceptionHandler() {});
44

5-
exports.fulfilled = $q.resolve;
5+
exports.resolved = $q.resolve;
66
exports.rejected = $q.reject;
7-
exports.pending = function () {
8-
var deferred = $q.defer();
9-
10-
return {
11-
promise: deferred.promise,
12-
fulfill: deferred.resolve,
13-
reject: deferred.reject
14-
};
7+
exports.deferred = function () {
8+
return $q.defer();
159
};

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"grunt-parallel": "~0.3.1",
3636
"grunt-ddescribe-iit": "~0.0.1",
3737
"grunt-merge-conflict": "~0.0.1",
38-
"promises-aplus-tests": "~1.3.2",
38+
"promises-aplus-tests": "~2.0.3",
3939
"grunt-shell": "~0.4.0",
4040
"semver": "~2.1.0",
4141
"lodash": "~2.1.0",

src/ng/q.js

+21-4
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@ function qFactory(nextTick, exceptionHandler) {
204204
deferred = {
205205

206206
resolve: function(val) {
207+
if (val === deferred) {
208+
throw new TypeError();
209+
}
207210
if (pending) {
208211
var callbacks = pending;
209212
pending = undefined;
@@ -214,7 +217,9 @@ function qFactory(nextTick, exceptionHandler) {
214217
var callback;
215218
for (var i = 0, ii = callbacks.length; i < ii; i++) {
216219
callback = callbacks[i];
217-
value.then(callback[0], callback[1], callback[2]);
220+
if (typeof value.then === 'function') {
221+
value.then.call(value, callback[0], callback[1], callback[2]);
222+
}
218223
}
219224
});
220225
}
@@ -223,6 +228,9 @@ function qFactory(nextTick, exceptionHandler) {
223228

224229

225230
reject: function(reason) {
231+
if (reason === deferred || reason === deferred.promise) {
232+
throw new TypeError();
233+
}
226234
deferred.resolve(reject(reason));
227235
},
228236

@@ -277,7 +285,7 @@ function qFactory(nextTick, exceptionHandler) {
277285
if (pending) {
278286
pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);
279287
} else {
280-
value.then(wrappedCallback, wrappedErrback, wrappedProgressback);
288+
value.then.call(value, wrappedCallback, wrappedErrback, wrappedProgressback);
281289
}
282290

283291
return result.promise;
@@ -331,7 +339,16 @@ function qFactory(nextTick, exceptionHandler) {
331339

332340

333341
var ref = function(value) {
334-
if (value && isFunction(value.then)) return value;
342+
if (value && isFunction(value) || typeof value === 'object') {
343+
var then;
344+
try {
345+
if (then = value.then && typeof then === 'function') {
346+
return value;
347+
}
348+
} catch (e) {
349+
return reject(e);
350+
}
351+
}
335352
return {
336353
then: function(callback) {
337354
var result = defer();
@@ -343,7 +360,6 @@ function qFactory(nextTick, exceptionHandler) {
343360
};
344361
};
345362

346-
347363
/**
348364
* @ngdoc
349365
* @name ng.$q#reject
@@ -380,6 +396,7 @@ function qFactory(nextTick, exceptionHandler) {
380396
* @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
381397
*/
382398
var reject = function(reason) {
399+
console.log('reject', reason);
383400
return {
384401
then: function(callback, errback) {
385402
var result = defer();

0 commit comments

Comments
 (0)