Version 1
[yaffs-website] / node_modules / kew / test / defer.js
diff --git a/node_modules/kew/test/defer.js b/node_modules/kew/test/defer.js
new file mode 100644 (file)
index 0000000..3684f79
--- /dev/null
@@ -0,0 +1,120 @@
+var Q = require('../kew')
+
+// create a deferred which returns a promise
+exports.testDeferredResolve = function (test) {
+  var val = "ok"
+  var defer = Q.defer()
+
+  defer.promise
+    .then(function (data) {
+      test.equal(data, val, "Promise successfully returned")
+      test.done()
+    })
+
+  setTimeout(function () {
+    defer.resolve(val)
+  }, 50)
+}
+
+// make sure a deferred can only resolve once
+exports.testDeferredResolveOnce = function (test) {
+  var defer = Q.defer()
+
+  try {
+    defer.resolve(true)
+    defer.resolve(true)
+    test.fail("Unable to resolve the same deferred twice")
+  } catch (e) {
+  }
+
+  test.done()
+}
+
+// create a deferred which returns a failed promise
+exports.testDeferredReject = function (test) {
+  var err = new Error("hello")
+  var defer = Q.defer()
+
+  defer.promise
+    .fail(function (e) {
+      test.equal(e, err, "Promise successfully failed")
+      test.done()
+    })
+
+  setTimeout(function () {
+    defer.reject(err)
+  }, 50)
+}
+
+// make sure a deferred can only reject once
+exports.testDeferredRejectOnce = function (test) {
+  var defer = Q.defer()
+
+  try {
+    defer.reject(new Error("nope 1"))
+    defer.reject(new Error("nope 2"))
+    test.fail("Unable to reject the same deferred twice")
+  } catch (e) {
+  }
+
+  test.done()
+}
+
+// make sure a deferred can only reject once
+exports.testDeferAndRejectFail = function (test) {
+  var defer
+
+  try {
+    defer = Q.defer()
+    defer.reject(new Error("nope 1"))
+    defer.resolve(true)
+    test.fail("Unable to reject and resolve the same deferred")
+  } catch (e) {
+    test.ok(true, "Unable to reject and resolve same deferred")
+  }
+
+  try {
+    defer = Q.defer()
+    defer.resolve(true)
+    defer.reject(new Error("nope 1"))
+    test.fail("Unable to reject and resolve the same deferred")
+  } catch (e) {
+    test.ok(true, "Unable to reject and resolve same deferred")
+  }
+
+  test.done()
+}
+
+// create a deferred which resolves with a node-standard callback
+exports.testDeferredResolverSuccess = function (test) {
+  var val = "ok"
+  var defer = Q.defer()
+  var callback = defer.makeNodeResolver()
+
+  defer.promise
+    .then(function (data) {
+      test.equal(data, val, "Promise successfully returned")
+      test.done()
+    })
+
+  setTimeout(function () {
+    callback(null, val)
+  }, 50)
+}
+
+// create a deferred which rejects with a node-standard callback
+exports.testDeferredResolverSuccess = function (test) {
+  var err = new Error("hello")
+  var defer = Q.defer()
+  var callback = defer.makeNodeResolver()
+
+  defer.promise
+    .fail(function (e) {
+      test.equal(e, err, "Promise successfully failed")
+      test.done()
+    })
+
+  setTimeout(function () {
+    callback(err)
+  }, 50)
+}
\ No newline at end of file