[Groonga-commit] droonga/express-droonga at ef4e37a [master] Migrate from JSDeferred to Q.

アーカイブの一覧に戻る

YUKI Hiroshi null+****@clear*****
Fri Oct 17 15:34:55 JST 2014


YUKI Hiroshi	2014-10-17 15:34:55 +0900 (Fri, 17 Oct 2014)

  New Revision: ef4e37a4ab2b0e2fb3c7926b1c6629eefd9bd154
  https://github.com/droonga/express-droonga/commit/ef4e37a4ab2b0e2fb3c7926b1c6629eefd9bd154

  Message:
    Migrate from JSDeferred to Q.
    
    Because we should use standard (well-known) APIs instead of cusom one.
    Q includes ES6 Promise-compatible API, so it is easy to migrate Q to ES6 Promise finally.

  Modified files:
    package.json
    test/adapter/api/groonga/basic.test.js
    test/adapter/api/groonga/load.test.js
    test/adapter/http.test.js
    test/adapter/socket.io.test.js
    test/droonga-protocol/connection.test.js
    test/droonga-protocol/receiver.test.js
    test/express-adapter.test.js
    test/test-utils.js

  Modified: package.json (+0 -1)
===================================================================
--- package.json    2014-10-17 15:31:35 +0900 (40f7109)
+++ package.json    2014-10-17 15:34:55 +0900 (18b392e)
@@ -39,7 +39,6 @@
   "devDependencies": {
     "express": ">=4.9",
     "chai": "*",
-    "jsdeferred": "*",
     "mocha": "*",
     "nodemock": "*",
     "socket.io-client": ">=1.0",

  Modified: test/adapter/api/groonga/basic.test.js (+6 -11)
===================================================================
--- test/adapter/api/groonga/basic.test.js    2014-10-17 15:31:35 +0900 (13c5718)
+++ test/adapter/api/groonga/basic.test.js    2014-10-17 15:34:55 +0900 (59fe280)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 
 var utils = require('../../../test-utils');
 var groongaUtils = require('./utils');
@@ -17,7 +16,7 @@ suite('adapter/api/groonga: basic commands', function() {
 
   setup(function(done) {
     utils.setupApplication()
-      .next(function(result) {
+      .then(function(result) {
         backend = result.backend;
         server = result.server;
         connection = result.connection;
@@ -29,7 +28,7 @@ suite('adapter/api/groonga: basic commands', function() {
         });
         done();
       })
-      .error(function(error) {
+      .catch(function(error) {
         done(error);
       });
   });
@@ -48,13 +47,11 @@ suite('adapter/api/groonga: basic commands', function() {
       var body = [
       ]
       utils.get('/d/table_create?name=Users', JSON.stringify(body))
-        .next(function(response) {
+        .then(function(response) {
           assert.deepEqual(response.statusCode, 200);
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('.json', function(done) {
@@ -62,13 +59,11 @@ suite('adapter/api/groonga: basic commands', function() {
       var body = [
       ]
       utils.get('/d/table_create.json?name=Users', JSON.stringify(body))
-        .next(function(response) {
+        .then(function(response) {
           assert.deepEqual(response.statusCode, 200);
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 });

  Modified: test/adapter/api/groonga/load.test.js (+33 -61)
===================================================================
--- test/adapter/api/groonga/load.test.js    2014-10-17 15:31:35 +0900 (16517a4)
+++ test/adapter/api/groonga/load.test.js    2014-10-17 15:34:55 +0900 (255df68)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 
 var utils = require('../../../test-utils');
 var groongaUtils = require('./utils');
@@ -19,7 +18,7 @@ suite('adapter/api/groonga: load', function() {
 
   setup(function(done) {
     utils.setupApplication()
-      .next(function(result) {
+      .then(function(result) {
         backend = result.backend;
         server = result.server;
         connection = result.connection;
@@ -30,7 +29,8 @@ suite('adapter/api/groonga: load', function() {
           plugins: [groongaAPI]
         });
         done();
-      });
+      })
+      .catch(done);
   });
 
   teardown(function() {
@@ -48,13 +48,11 @@ suite('adapter/api/groonga: load', function() {
         var body = [
         ]
         utils.post('/d/load?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             assert.deepEqual(response.statusCode, 200);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('.json', function(done) {
@@ -62,13 +60,11 @@ suite('adapter/api/groonga: load', function() {
         var body = [
         ]
         utils.post('/d/load.json?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             assert.deepEqual(response.statusCode, 200);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
 
@@ -78,13 +74,11 @@ suite('adapter/api/groonga: load', function() {
         var body = [
         ]
         utils.post('/d/load?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             assert.deepEqual(response.statusCode, 200);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
 
@@ -94,14 +88,12 @@ suite('adapter/api/groonga: load', function() {
         var body = [
         ]
         utils.post('/d/load?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             var responseBody = groongaUtils.groongaResponseBody(response);
             assert.deepEqual(responseBody, [0]);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('one', function(done) {
@@ -112,14 +104,12 @@ suite('adapter/api/groonga: load', function() {
           }
         ]
         utils.post('/d/load?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             var responseBody = groongaUtils.groongaResponseBody(response);
             assert.deepEqual(responseBody, [1]);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('multiple', function(done) {
@@ -134,14 +124,12 @@ suite('adapter/api/groonga: load', function() {
           }
         ]
         utils.post('/d/load?table=Users', JSON.stringify(body))
-          .next(function(response) {
+          .then(function(response) {
             var responseBody = groongaUtils.groongaResponseBody(response);
             assert.deepEqual(responseBody, [2]);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
 
@@ -165,7 +153,7 @@ suite('adapter/api/groonga: load', function() {
         }
 
         return utils.post(path, JSON.stringify(body))
-          .next(function(request) {
+          .then(function(request) {
             return requestBody;
           });
       }
@@ -179,7 +167,7 @@ suite('adapter/api/groonga: load', function() {
             }
           ]
           post(body)
-            .next(function(requestBody) {
+            .then(function(requestBody) {
               assert.deepEqual(requestBody,
                                {
                                  table: 'Memos',
@@ -190,9 +178,7 @@ suite('adapter/api/groonga: load', function() {
                                });
               done();
             })
-            .error(function(error) {
-              done(error);
-            });
+            .catch(done);
         });
 
         test('with columns', function(done) {
@@ -204,7 +190,7 @@ suite('adapter/api/groonga: load', function() {
             }
           ]
           post(body)
-            .next(function(requestBody) {
+            .then(function(requestBody) {
               assert.deepEqual(requestBody,
                                {
                                  table: 'Memos',
@@ -216,9 +202,7 @@ suite('adapter/api/groonga: load', function() {
                                });
               done();
             })
-            .error(function(error) {
-              done(error);
-            });
+            .catch(done);
         });
       });
 
@@ -235,7 +219,7 @@ suite('adapter/api/groonga: load', function() {
             ]
           ]
           post(body)
-            .next(function(requestBody) {
+            .then(function(requestBody) {
               assert.deepEqual(requestBody,
                                {
                                  table: 'Memos',
@@ -246,9 +230,7 @@ suite('adapter/api/groonga: load', function() {
                                });
               done();
             })
-            .error(function(error) {
-              done(error);
-            });
+            .catch(done);
         });
 
         test('with columns', function(done) {
@@ -265,7 +247,7 @@ suite('adapter/api/groonga: load', function() {
             ]
           ]
           post(body)
-            .next(function(requestBody) {
+            .then(function(requestBody) {
               assert.deepEqual(requestBody,
                                {
                                  table: 'Memos',
@@ -277,9 +259,7 @@ suite('adapter/api/groonga: load', function() {
                                });
               done();
             })
-            .error(function(error) {
-              done(error);
-            });
+            .catch(done);
         });
 
         test('with columns query parameter', function(done) {
@@ -294,7 +274,7 @@ suite('adapter/api/groonga: load', function() {
             ]
           ]
           post(body, query)
-            .next(function(requestBody) {
+            .then(function(requestBody) {
               assert.deepEqual(requestBody,
                                {
                                  table: 'Memos',
@@ -306,9 +286,7 @@ suite('adapter/api/groonga: load', function() {
                                });
               done();
             })
-            .error(function(error) {
-              done(error);
-            });
+            .catch(done);
         });
       });
     });
@@ -330,7 +308,7 @@ suite('adapter/api/groonga: load', function() {
         };
 
         return utils.get(path)
-          .next(function(response) {
+          .then(function(response) {
             return requestBody;
           });
       };
@@ -344,7 +322,7 @@ suite('adapter/api/groonga: load', function() {
           }
         ];
         get(values)
-          .next(function(requestBody) {
+          .then(function(requestBody) {
             assert.deepEqual(requestBody,
                              {
                                table: 'Users',
@@ -356,9 +334,7 @@ suite('adapter/api/groonga: load', function() {
                              });
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('array style', function(done) {
@@ -375,7 +351,7 @@ suite('adapter/api/groonga: load', function() {
           ]
         ];
         get(values)
-          .next(function(requestBody) {
+          .then(function(requestBody) {
             assert.deepEqual(requestBody,
                              {
                                table: 'Users',
@@ -387,9 +363,7 @@ suite('adapter/api/groonga: load', function() {
                              });
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
   });
@@ -402,7 +376,7 @@ suite('adapter/api/groonga: load', function() {
         }
       ];
       utils.post('/d/load', JSON.stringify(body))
-        .next(function(responseMessage) {
+        .then(function(responseMessage) {
           var actual = {
             httpStatusCode: responseMessage.statusCode,
             groongaStatusCode: groongaUtils.groongaResponseHeader(responseMessage)[0],
@@ -418,9 +392,7 @@ suite('adapter/api/groonga: load', function() {
                            });
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 });

  Modified: test/adapter/http.test.js (+15 -23)
===================================================================
--- test/adapter/http.test.js    2014-10-17 15:31:35 +0900 (1bfd984)
+++ test/adapter/http.test.js    2014-10-17 15:34:55 +0900 (ad80a6a)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 
 var utils = require('../test-utils');
 
@@ -67,13 +66,14 @@ suite('HTTP Adapter', function() {
 
     setup(function(done) {
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           backend = result.backend;
           server = result.server;
           connection = result.connection;
           application = result.application;
           done();
-        });
+        })
+        .catch(done);
     });
 
     teardown(function() {
@@ -104,7 +104,7 @@ suite('HTTP Adapter', function() {
       });
 
       utils.get('/path/to/adapter')
-        .next(function(response) {
+        .then(function(response) {
           backend.assertReceived([{ type: 'adapter',
                                     body: 'adapter requested' }]);
           assert.deepEqual(response,
@@ -112,9 +112,7 @@ suite('HTTP Adapter', function() {
                             body:       JSON.stringify('adapter OK') });
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('under specified path', function(done) {
@@ -139,7 +137,7 @@ suite('HTTP Adapter', function() {
       });
 
       utils.get('/path/to/droonga/path/to/adapter')
-        .next(function(response) {
+        .then(function(response) {
           backend.assertReceived([{ type: 'adapter',
                                     body: 'adapter requested' }]);
           assert.deepEqual(response,
@@ -147,9 +145,7 @@ suite('HTTP Adapter', function() {
                             body:       JSON.stringify('adapter OK') });
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 
@@ -178,12 +174,12 @@ suite('HTTP Adapter', function() {
         ]
       });
       utils.setupServer(application)
-        .next(function(newServer) {
+        .then(function(newServer) {
           server = newServer;
           utils.get('/tables/Store?query=NY');
         })
-        .wait(0.1)
-        .next(function() {
+        .then(utils.waitCb(0.1))
+        .then(function() {
           assert.equal(1, connection.emitMessageCalledArguments.length);
           var args = connection.emitMessageCalledArguments[0];
           assert.equal(args.type, 'search');
@@ -206,9 +202,7 @@ suite('HTTP Adapter', function() {
 
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('droonga', function(done) {
@@ -230,12 +224,12 @@ suite('HTTP Adapter', function() {
         condition: { query: '検索', matchTo: ['body'] }
       };
       utils.setupServer(application)
-        .next(function(newServer) {
+        .then(function(newServer) {
           server = newServer;
           utils.post('/droonga/search', JSON.stringify({ queries: searchQueries }));
         })
-        .wait(0.1)
-        .next(function() {
+        .then(utils.waitCb(0.1))
+        .then(function() {
           assert.equal(1, connection.emitMessageCalledArguments.length);
           var args = connection.emitMessageCalledArguments[0];
           assert.equal(args.type, 'search');
@@ -249,9 +243,7 @@ suite('HTTP Adapter', function() {
 
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 });

  Modified: test/adapter/socket.io.test.js (+69 -82)
===================================================================
--- test/adapter/socket.io.test.js    2014-10-17 15:31:35 +0900 (77778a8)
+++ test/adapter/socket.io.test.js    2014-10-17 15:34:55 +0900 (818c88e)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 var express = require('express');
 
 var utils = require('../test-utils');
@@ -108,7 +107,7 @@ suite('Socket.IO Adapter', function() {
 
       var application = express();
       utils.setupServer(application)
-        .next(function(newServer) {
+        .then(function(newServer) {
           server = newServer;
           connection = utils.createStubbedBackendConnection();
           var registeredCommands = socketIoAdapter.register(application, server, {
@@ -144,9 +143,7 @@ suite('Socket.IO Adapter', function() {
                               definition: overridingPlugin.deleteCommand }]);
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('initialization', function(done) {
@@ -159,7 +156,7 @@ suite('Socket.IO Adapter', function() {
       });
 
       utils.setupServer(application)
-        .next(function(newServer) {
+        .then(function(newServer) {
           server = newServer;
           connection = utils.createStubbedBackendConnection();
           socketIoAdapter.register(application, server, {
@@ -175,17 +172,15 @@ suite('Socket.IO Adapter', function() {
 
           return utils.createClient();
         })
-        .next(function(newClient) {
+        .then(function(newClient) {
           clientSockets.push(newClient.socket);
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedListener.assertThrows();
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 
@@ -193,7 +188,7 @@ suite('Socket.IO Adapter', function() {
     test(description, function(done) {
       var mockedReceiver;
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           server     = result.server;
           connection = result.connection;
           backend    = result.backend;
@@ -209,13 +204,13 @@ suite('Socket.IO Adapter', function() {
             ]
           });
         })
-        .createClient()
-        .next(function(newClient) {
+        .then(utils.createClientCb())
+        .then(function(newClient) {
           clientSockets.push(newClient.socket);
           clientSockets[0].emit(params.clientCommand, params.clientBody);
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           backend.assertReceived([{ type: params.expectedClientCommand,
                                     body: params.expectedClientBody }]);
 
@@ -230,14 +225,12 @@ suite('Socket.IO Adapter', function() {
                                       params.backendCommand,
                                       params.backendBody);
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.assertThrows();
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   }
 
@@ -289,7 +282,7 @@ suite('Socket.IO Adapter', function() {
       ];
       var clientReceiver;
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           server     = result.server;
           connection = result.connection;
           backend    = result.backend;
@@ -305,21 +298,21 @@ suite('Socket.IO Adapter', function() {
             ]
           });
         })
-        .createClients(3)
-        .next(function(newClients) {
+        .then(utils.createClientsCb(3))
+        .then(function(newClients) {
           clientSockets = clientSockets.concat(newClients.map(function(client) { return client.socket; }));
           clientSockets[0].emit('reqrep', messages[0]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           clientSockets[1].emit('reqrep', messages[1]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           clientSockets[2].emit('reqrep', messages[2]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           clientSockets[0].emit('reqrep', messages[3]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           clientSockets[1].emit('reqrep', messages[4]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           clientSockets[2].emit('reqrep', messages[5]);
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           assert.deepEqual(backend.getBodies(), messages);
 
           var responses = backend.getMessages().map(function(envelope) {
@@ -343,33 +336,31 @@ suite('Socket.IO Adapter', function() {
             clientReceiver.receive('2:' + data);
           });
 
-          return utils
-            .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort)
-            .wait(0.01)
-            .sendPacketTo(utils.createPacket(responses[1]), utils.testReceivePort)
-            .wait(0.01)
-            .sendPacketTo(utils.createPacket(responses[2]), utils.testReceivePort)
-            .wait(0.01)
-            .sendPacketTo(utils.createPacket(responses[3]), utils.testReceivePort)
-            .wait(0.01)
-            .sendPacketTo(utils.createPacket(responses[4]), utils.testReceivePort)
-            .wait(0.01)
-            .sendPacketTo(utils.createPacket(responses[5]), utils.testReceivePort);
+          return utils.wait(0)
+            .then(utils.sendPacketToCb(utils.createPacket(responses[0]), utils.testReceivePort))
+            .then(utils.waitCb(0.01))
+            .then(utils.sendPacketToCb(utils.createPacket(responses[1]), utils.testReceivePort))
+            .then(utils.waitCb(0.01))
+            .then(utils.sendPacketToCb(utils.createPacket(responses[2]), utils.testReceivePort))
+            .then(utils.waitCb(0.01))
+            .then(utils.sendPacketToCb(utils.createPacket(responses[3]), utils.testReceivePort))
+            .then(utils.waitCb(0.01))
+            .then(utils.sendPacketToCb(utils.createPacket(responses[4]), utils.testReceivePort))
+            .then(utils.waitCb(0.01))
+            .then(utils.sendPacketToCb(utils.createPacket(responses[5]), utils.testReceivePort));
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           clientReceiver.assertThrows();
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('event with options', function(done) {
       var clientReceiver;
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           server     = result.server;
           connection = result.connection;
           backend    = result.backend;
@@ -385,14 +376,14 @@ suite('Socket.IO Adapter', function() {
             ]
           });
         })
-        .createClients(1)
-        .next(function(newClients) {
+        .then(utils.createClientsCb(1))
+        .then(function(newClients) {
           clientSockets = clientSockets.concat(newClients.map(function(client) { return client.socket; }));
           clientSockets[0].emit('reqrep', 'message1',
                                 { responseEvent: 'reqrep.extra.name' });
           clientSockets[0].emit('reqrep-mod-event', 'message2',
                                 { responseEvent: 'reqrep-mod-event.extra.name' });
-        }).wait(0.01).next(function() {
+        }).then(utils.waitCb(0.01)).then(function() {
           assert.deepEqual(backend.getBodies(), ['message1', 'message2']);
 
           var responses = backend.getMessages().map(function(envelope) {
@@ -409,21 +400,19 @@ suite('Socket.IO Adapter', function() {
             clientReceiver.receive(data);
           });
 
-          return utils
-            .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort)
-            .next(function() {
+          return utils.wait(0)
+            .then(utils.sendPacketToCb(utils.createPacket(responses[0]), utils.testReceivePort))
+            .then(function() {
               return utils
                 .sendPacketTo(utils.createPacket(responses[1]), utils.testReceivePort)
             });
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           clientReceiver.assertThrows();
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 
@@ -469,7 +458,7 @@ suite('Socket.IO Adapter', function() {
       var subscriberId;
       // step 0: setup
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           server     = result.server;
           connection = result.connection;
           backend    = result.backend;
@@ -485,8 +474,8 @@ suite('Socket.IO Adapter', function() {
             ]
           });
         })
-        .createClient()
-        .next(function(newClient) {
+        .then(utils.createClientCb())
+        .then(function(newClient) {
           clientSockets.push(newClient.socket);
           subscriberId = newClient.subscriber;
           clientSockets[0].on('pubsub.subscribe.response', function(data) {
@@ -506,16 +495,16 @@ suite('Socket.IO Adapter', function() {
                                      'never published',
                                      { to: subscriberId });
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.receive('nothing');
           mockedReceiver.assertThrows();
 
       // step 2: subscribe
           clientSockets[0].emit('pubsub.subscribe', 'subscribe!');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           backend.assertReceived([{ type: 'pubsub.subscribe',
                                     body: 'subscribe!' }]);
 
@@ -526,8 +515,8 @@ suite('Socket.IO Adapter', function() {
                                       'pubsub.subscribe.response',
                                       'subscribed!');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.assertThrows();
 
       // step 3: published messages while subscribing
@@ -539,26 +528,26 @@ suite('Socket.IO Adapter', function() {
                                      'published 1',
                                      { to: subscriberId });
         })
-        .next(function() {
+        .then(function() {
           return backend.sendMessage('pubsub.publish',
                                      'published 2',
                                      { to: subscriberId });
         })
-        .next(function() {
+        .then(function() {
           return backend.sendMessage('pubsub.publish',
                                      'published 3',
                                      { to: subscriberId });
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.assertThrows();
 
       // step 4: unsubscribe
           backend.clearMessages();
           clientSockets[0].emit('pubsub.unsubscribe', 'unsubscribe!');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           backend.assertReceived([{ type: 'pubsub.unsubscribe',
                                     body: 'unsubscribe!' }]);
 
@@ -569,8 +558,8 @@ suite('Socket.IO Adapter', function() {
                                       'pubsub.unsubscribe.response',
                                       'unsubscribed!');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.assertThrows();
 
       // step 5: published message after unsubscribing
@@ -579,16 +568,14 @@ suite('Socket.IO Adapter', function() {
           return backend.sendMessage('pubsub.publish',
                                      'never published');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.receive('nothing');
           mockedReceiver.assertThrows();
 
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 });

  Modified: test/droonga-protocol/connection.test.js (+81 -125)
===================================================================
--- test/droonga-protocol/connection.test.js    2014-10-17 15:31:35 +0900 (d016d2e)
+++ test/droonga-protocol/connection.test.js    2014-10-17 15:34:55 +0900 (8581865)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 
 var utils = require('../test-utils');
 var TypeOf = utils.TypeOf;
@@ -40,17 +39,14 @@ suite('Connection', function() {
                    undefined,
                    'should be not-initialized');
 
-      Deferred
-        .wait(0.01)
-        .next(function() {
+      utils.wait(0.01)
+        .then(function() {
           assert.notEqual(connection.receivePort,
                           undefined,
                           'should be initialized');
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 
@@ -60,7 +56,7 @@ suite('Connection', function() {
 
     function setupEnvironment(done) {
       utils.createBackend()
-        .next(function(newBackend) {
+        .then(function(newBackend) {
           backend = newBackend;
           connection = new Connection({
             tag:      'test',
@@ -72,7 +68,8 @@ suite('Connection', function() {
             retryDelay: 1
           });
           done();
-        });
+        })
+        .catch(done);
     }
 
     function teardownEnvironment() {
@@ -135,9 +132,8 @@ suite('Connection', function() {
                                                           'another',
                                                           { dataset: 'another' }));
 
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(),
                              [objectMessage,
                               stringMessage,
@@ -145,9 +141,7 @@ suite('Connection', function() {
                               messageForAnotherDataset]);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done)
       });
 
       test('from front to back, with callback', function(done) {
@@ -181,9 +175,8 @@ suite('Connection', function() {
                                                           { dataset: 'another',
                                                             requireReply: true }));
 
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(),
                              [objectMessage,
                               stringMessage,
@@ -191,9 +184,7 @@ suite('Connection', function() {
                               messageForAnotherDataset]);
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('from back to front', function(done) {
@@ -211,18 +202,16 @@ suite('Connection', function() {
           .takes(numericMessage)
           .takes(objectMessage);
 
-        utils
-          .sendPacketTo(utils.createPacket(stringMessage), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(numericMessage), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(objectMessage), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket({}, 'unknown, ignored'), utils.testReceivePort)
-          .next(function() {
+        utils.wait(0)
+          .then(utils.sendPacketToCb(utils.createPacket(stringMessage), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(numericMessage), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(objectMessage), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket({}, 'unknown, ignored'), utils.testReceivePort))
+          .then(function() {
             callback.assert();
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
 
@@ -247,9 +236,8 @@ suite('Connection', function() {
         callback
           .takes(null, responses[0])
           .takes(null, responses[1]);
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(), messages);
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -258,10 +246,10 @@ suite('Connection', function() {
               'response listeners should be registered'
             );
           })
-          .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses[1]), utils.testReceivePort)
-          .wait(0.01)
-          .next(function() {
+          .then(utils.sendPacketToCb(utils.createPacket(responses[0]), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses[1]), utils.testReceivePort))
+          .then(utils.waitCb(0.01))
+          .then(function() {
             callback.assert();
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -271,9 +259,7 @@ suite('Connection', function() {
             );
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('error', function(done) {
@@ -296,9 +282,8 @@ suite('Connection', function() {
         callback
           .takes(responses[0].statusCode, responses[0])
           .takes(responses[1].statusCode, responses[1]);
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(), messages);
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -307,10 +292,10 @@ suite('Connection', function() {
               'response listeners should be registered'
             );
           })
-          .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses[1]), utils.testReceivePort)
-          .wait(0.01)
-          .next(function() {
+          .then(utils.sendPacketToCb(utils.createPacket(responses[0]), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses[1]), utils.testReceivePort))
+          .then(utils.waitCb(0.01))
+          .then(function() {
             callback.assert();
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -320,9 +305,7 @@ suite('Connection', function() {
             );
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('duplicated', function(done) {
@@ -345,9 +328,8 @@ suite('Connection', function() {
         callback
           .takes(null, responses[0])
           .takes(responses[1].statusCode, responses[1]);
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(), messages);
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -356,12 +338,12 @@ suite('Connection', function() {
               'response listeners should be registered'
             );
           })
-          .sendPacketTo(utils.createPacket(responses[0]), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses[1]), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses[2]), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses[3]), utils.testReceivePort)
-          .wait(0.01)
-          .next(function() {
+          .then(utils.sendPacketToCb(utils.createPacket(responses[0]), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses[1]), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses[2]), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses[3]), utils.testReceivePort))
+          .then(utils.waitCb(0.01))
+          .then(function() {
             callback.assert();
             assert.deepEqual(
               [connection.listeners('reply:' + messages[0].id).length,
@@ -371,9 +353,7 @@ suite('Connection', function() {
             );
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
 
       test('timeout', function(done) {
@@ -406,9 +386,8 @@ suite('Connection', function() {
         callback
           .takes(Connection.ERROR_GATEWAY_TIMEOUT, null)
           .takes(null, responses.notTimedOut)
-        Deferred
-          .wait(0.01)
-          .next(function() {
+        utils.wait(0.01)
+          .then(function() {
             assert.deepEqual(getBackendReceivedMessages(),
                              [messages.notTimedOut,
                               messages.timedOut,
@@ -424,11 +403,11 @@ suite('Connection', function() {
               'response listeners should be registered'
             );
           })
-          .wait(0.02)
-          .sendPacketTo(utils.createPacket(responses.notTimedOut), utils.testReceivePort)
-          .sendPacketTo(utils.createPacket(responses.timedOut), utils.testReceivePort)
-          .wait(0.01)
-          .next(function() {
+          .then(utils.waitCb(0.02))
+          .then(utils.sendPacketToCb(utils.createPacket(responses.notTimedOut), utils.testReceivePort))
+          .then(utils.sendPacketToCb(utils.createPacket(responses.timedOut), utils.testReceivePort))
+          .then(utils.waitCb(0.01))
+          .then(function() {
             callback.assert();
             assert.deepEqual(
               { notTimedOut:
@@ -442,9 +421,7 @@ suite('Connection', function() {
             );
             done();
           })
-          .error(function(error) {
-            done(error);
-          });
+          .catch(done);
       });
     });
   });
@@ -457,7 +434,7 @@ suite('Connection', function() {
     setup(function(done) {
       restartedBackend = undefined;
       utils.createBackend()
-        .next(function(newBackend) {
+        .then(function(newBackend) {
           backend = newBackend;
           connection = new Connection({
             tag:      utils.testTag,
@@ -467,7 +444,8 @@ suite('Connection', function() {
             retryDelay: 1
           });
           done();
-        });
+        })
+        .catch(done);
     });
 
     teardown(function() {
@@ -486,60 +464,44 @@ suite('Connection', function() {
     });
 
     test('normal messaging', function(done) {
-      var deferred = new Deferred();
-      connection.emitMessage('type', { message: true });
-      backend.once('receive', function() {
-        deferred.call();
-      });
-      deferred
-        .next(function() {
+      function trigger() {
+        connection.emitMessage('type', { message: true });
+      }
+      backend.thennableOnce('receive')
+        .then(function() {
           assert.deepEqual(backend.getEvents(),
                            ['type']);
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
+
+      trigger();
     });
 
     test('disconnected suddenly', function(done) {
+      function trigger() {
+        connection.emitMessage('type1', { message: true });
+      }
+
       var lastError = null;
-      Deferred
-        .next(function() {
-          var deferred = new Deferred();
-          connection.emitMessage('type1', { message: true });
-          backend.once('receive', function() {
-            deferred.call();
-          });
-          return deferred;
-        })
-        .next(function() {
+      backend.thennableOnce('receive')
+        .then(function() {
           assert.deepEqual(backend.getEvents(),
                            ['type1']);
-          var deferred = new Deferred();
-          backend.close(function() {
-            deferred.call();
-          });
-          return deferred;
+          return backend.thennableClose();
         })
-        .next(function() {
-          var deferred = new Deferred();
-
-          var callback = function(errorCode, response) {
-            lastError = response.body.detail;
-            deferred.call();
-          };
-
-          connection.emitMessage('type2', { message: true }, callback);
-
-          return deferred;
+        .then(function() {
+          return connection.thennableEmitMessage('type2', { message: true })
+            .then(function(args) {
+              lastError = args.response.body.detail;
+            });
         })
-        .next(function() {
+        .then(function() {
           assert.isNotNull(lastError);
           assert.equal(lastError.code, 'ECONNREFUSED');
         })
-        .createBackend()
-        .next(function(newBackend) {
+        .then(utils.createBackendCb())
+        .then(function(newBackend) {
           restartedBackend = newBackend;
           assert.deepEqual(backend.getEvents(),
                            ['type1']);
@@ -548,24 +510,18 @@ suite('Connection', function() {
 
           connection.emitMessage('type3', { message: true });
 
-          var deferred = new Deferred();
-          restartedBackend.once('receive', function() {
-            restartedBackend.once('receive', function() {
-              deferred.call();
-            });
-          });
-          return deferred;
+          return utils.wait(0.1);
         })
-        .next(function() {
+        .then(function() {
           assert.deepEqual(backend.getEvents(),
                            ['type1']);
           assert.deepEqual(restartedBackend.getEvents(),
                            ['type2', 'type3']);
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
+
+      trigger();
     });
   });
 });

  Modified: test/droonga-protocol/receiver.test.js (+13 -23)
===================================================================
--- test/droonga-protocol/receiver.test.js    2014-10-17 15:31:35 +0900 (000ebd7)
+++ test/droonga-protocol/receiver.test.js    2014-10-17 15:34:55 +0900 (fae888b)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 
 var utils = require('../test-utils');
 
@@ -30,21 +29,18 @@ suite('FluentReceiver', function() {
       mockedReceiver.start();
     });
 
-    Deferred
-      .wait(0.01)
-      .next(function() {
+    utils.wait(0.01)
+      .then(function() {
         assert.notEqual(receiver.port, undefined);
 
         var rawPacket = ['droonga.message', Date.now(), { message: true }];
         return utils.sendPacketTo(rawPacket, receiver.port);
       })
-      .next(function() {
+      .then(function() {
         mockedReceiver.assertThrows();
         done();
       })
-      .error(function(error) {
-        done(error);
-      });
+      .catch(done);
   });
 
   test('receiving packed message (Forward type)', function(done) {
@@ -63,22 +59,19 @@ suite('FluentReceiver', function() {
       mockedReceiver.start();
     });
 
-    Deferred
-      .wait(0.01)
-      .next(function() {
+    utils.wait(0.01)
+      .then(function() {
         assert.notEqual(receiver.port, undefined);
 
         var rawPacket = ['droonga.message', [[Date.now(), { message1: true }],
                                              [Date.now(), { message2: true }]]];
         return utils.sendPacketTo(rawPacket, receiver.port);
       })
-      .next(function() {
+      .then(function() {
         mockedReceiver.assertThrows();
         done();
       })
-      .error(function(error) {
-        done(error);
-      });
+      .catch(done);
   });
 
   test('re-connecting', function(done) {
@@ -97,25 +90,22 @@ suite('FluentReceiver', function() {
       mockedReceiver.start();
     });
 
-    Deferred
-      .wait(0.01)
-      .next(function() {
+    utils.wait(0.01)
+      .then(function() {
         assert.notEqual(receiver.port, undefined);
 
         var rawPacket = ['droonga.message', Date.now(), { message1: true }];
         return utils.sendPacketTo(rawPacket, receiver.port);
       })
-      .next(function() {
+      .then(function() {
         var rawPacket = ['droonga.message', Date.now(), { message2: true }];
         return utils.sendPacketTo(rawPacket, receiver.port);
       })
-      .next(function() {
+      .then(function() {
         mockedReceiver.assertThrows();
         done();
       })
-      .error(function(error) {
-        done(error);
-      });
+      .catch(done);
   });
 });
 

  Modified: test/express-adapter.test.js (+18 -30)
===================================================================
--- test/express-adapter.test.js    2014-10-17 15:31:35 +0900 (d3df592)
+++ test/express-adapter.test.js    2014-10-17 15:34:55 +0900 (08cb508)
@@ -1,6 +1,5 @@
 var assert = require('chai').assert;
 var nodemock = require('nodemock');
-var Deferred = require('jsdeferred').Deferred;
 var express = require('express');
 
 var utils = require('./test-utils');
@@ -39,16 +38,14 @@ suite('Adaption for express application', function() {
 
     setup(function(done) {
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           backend = result.backend;
           server = result.server;
           connection = result.connection;
           application = result.application;
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     teardown(function() {
@@ -73,15 +70,13 @@ suite('Adaption for express application', function() {
       });
 
       utils.get('/path/to/api')
-        .next(function(response) {
+        .then(function(response) {
           assert.deepEqual(response,
                            { statusCode: 200,
                              body:       JSON.stringify('api OK') });
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     test('under specified path', function(done) {
@@ -93,13 +88,12 @@ suite('Adaption for express application', function() {
 
       var responseBody;
       utils.get('/path/to/droonga/path/to/api')
-        .next(function(response) {
+        .then(function(response) {
           responseBody = response.body;
         });
 
-      Deferred
-        .wait(0.01)
-        .next(function() {
+      utils.wait(0.01)
+        .then(function() {
           backend.assertReceived([{ type: 'api',
                                     body: 'api requested' }]);
 
@@ -107,14 +101,12 @@ suite('Adaption for express application', function() {
                                       'api.result',
                                       'api OK?');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           assert.equal(responseBody, JSON.stringify('api OK'));
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 
@@ -127,16 +119,14 @@ suite('Adaption for express application', function() {
 
     setup(function(done) {
       utils.setupApplication()
-        .next(function(result) {
+        .then(function(result) {
           backend = result.backend;
           server = result.server;
           connection = result.connection;
           application = result.application;
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
 
     teardown(function() {
@@ -158,12 +148,12 @@ suite('Adaption for express application', function() {
 
       var mockedReceiver;
       utils.createClient()
-        .next(function(newClient) {
+        .then(function(newClient) {
           clientSocket = newClient.socket;
           clientSocket.emit('api', 'request');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           backend.assertReceived([{ type: 'api',
                                     body: 'api requested' }]);
 
@@ -178,14 +168,12 @@ suite('Adaption for express application', function() {
                                       'api.response',
                                       'api OK?');
         })
-        .wait(0.01)
-        .next(function() {
+        .then(utils.waitCb(0.01))
+        .then(function() {
           mockedReceiver.assertThrows();
           done();
         })
-        .error(function(error) {
-          done(error);
-        });
+        .catch(done);
     });
   });
 });

  Modified: test/test-utils.js (+157 -148)
===================================================================
--- test/test-utils.js    2014-10-17 15:31:35 +0900 (1183f88)
+++ test/test-utils.js    2014-10-17 15:34:55 +0900 (e17acbc)
@@ -3,7 +3,7 @@ var nodemock = require('nodemock');
 var net = require('net');
 var msgpack = require('msgpack');
 var http = require('http');
-var Deferred = require('jsdeferred').Deferred;
+var Q = require('q');
 var socketIoClient = require('socket.io-client');
 var express = require('express');
 var url = require('url');
@@ -21,36 +21,53 @@ var testReceivePort = exports.testReceivePort = 3334;
 var testServerPort = exports.testServerPort = 3335;
 var testTag = exports.testTag = 'test';
 
+function registerCallbackGenerator(name) {
+  exports[name + 'Cb'] = (function() {
+    var givenArgs = arguments;
+    return (function() {
+      return exports[name].apply(exports, givenArgs);
+    });
+  });
+}
 
-function connectTo(port) {
-  var deferred = new Deferred();
-  var clientSocket = new net.Socket();
-  clientSocket.on('error', function(error){
-    clientSocket.destroy();
-    deferred.fail(error);
+
+function wait(seconds) {
+  return Q.Promise(function(resolve, reject, notify) {
+    setTimeout(resolve, seconds * 1000);
   });
-  clientSocket.connect(port, '127.0.0.1', function(){
-    deferred.call(clientSocket);
+}
+exports.wait = wait;
+registerCallbackGenerator('wait');
+
+function connectTo(port) {
+  return Q.Promise(function(resolve, reject, notify) {
+    var clientSocket = new net.Socket();
+    clientSocket.on('error', function(error){
+      clientSocket.destroy();
+      reject(error);
+    });
+    clientSocket.connect(port, '127.0.0.1', function(){
+      resolve(clientSocket);
+    });
   });
-  return deferred;
 }
 exports.connectTo = connectTo;
-Deferred.register('connectTo', connectTo);
+registerCallbackGenerator('connectTo');
 
 function sendPacketTo(packet, port) {
   var clientSocket;
   return connectTo(port)
-    .next(function(newSocket) {
+    .then(function(newSocket) {
       clientSocket = newSocket;
       var packedPacket = msgpack.pack(packet);
       clientSocket.write(new Buffer(packedPacket));
     })
-    .wait(0.01)
-    .next(function() {
+    .then(exports.waitCb(0.01))
+    .then(function() {
       clientSocket.destroy();
       clientSocket = undefined;
     })
-    .error(function(error) {
+    .catch(function(error) {
       if (clientSocket) {
         clientSocket.destroy();
         clientSocket = undefined;
@@ -59,24 +76,24 @@ function sendPacketTo(packet, port) {
     });
 }
 exports.sendPacketTo = sendPacketTo;
-Deferred.register('sendPacketTo', sendPacketTo);
+registerCallbackGenerator('sendPacketTo');
 
 
 function setupServer(handlerOrServer) {
-  var deferred = new Deferred();
-  var server;
-  if ('close' in handlerOrServer) { // it is a server
-    server = handlerOrServer;
-  } else { // it is a handler
-    server = http.createServer(handlerOrServer);
-  }
-  server.listen(testServerPort, function() {
-    deferred.call(server);
+  return Q.Promise(function(resolve, reject, notify) {
+    var server;
+    if ('close' in handlerOrServer) { // it is a server
+      server = handlerOrServer;
+    } else { // it is a handler
+      server = http.createServer(handlerOrServer);
+    }
+    server.listen(testServerPort, function() {
+      resolve(server);
+    });
   });
-  return deferred;
 }
 exports.setupServer = setupServer;
-Deferred.register('setupServer', setupServer);
+registerCallbackGenerator('setupServer');
 
 function normalizePath(path) {
   if (typeof path != 'string') {
@@ -86,101 +103,95 @@ function normalizePath(path) {
 }
 
 function sendRequest(method, path, postData, headers) {
-  var deferred = new Deferred();
-
-  path = normalizePath(path);
-  var options = {
-        host: '127.0.0.1',
-        port: testServerPort,
-        path: path,
-        method: method,
-        headers: {}
-      };
-
-  if (headers) {
-    for (var header in headers) {
-      if (headers.hasOwnProperty(header))
-        options.headers[header] = headers[header];
+  return Q.Promise(function(resolve, reject, notify) {
+    path = normalizePath(path);
+    var options = {
+          host: '127.0.0.1',
+          port: testServerPort,
+          path: path,
+          method: method,
+          headers: {}
+        };
+
+    if (headers) {
+      for (var header in headers) {
+        if (headers.hasOwnProperty(header))
+          options.headers[header] = headers[header];
+      }
     }
-  }
 
-  Deferred.next(function() {
     var request = http.request(options, function(response) {
           var body = '';
           response.on('data', function(data) {
             body += data;
           });
           response.on('end', function() {
-            deferred.call({
+            resolve({
               statusCode: response.statusCode,
               body: body
             });
           });
         });
     request.on('error', function(error) {
-      deferred.fail(error);
+      reject(error);
     });
 
     if (postData) request.write(postData);
     request.end();
   });
-
-  return deferred;
 }
 
 function get(path, headers) {
   return sendRequest('GET', path, null, headers);
 }
 exports.get = get;
-Deferred.register('get', function() { return get.apply(this, arguments); });
+registerCallbackGenerator('get');
 
 function post(path, body, headers) {
   return sendRequest('POST', path, body, headers);
 }
 exports.post = post;
-Deferred.register('post', function() { return post.apply(this, arguments); });
+registerCallbackGenerator('post');
 
 
 function createClient() {
-  var deferred = new Deferred();
-  var endpoint = 'http://127.0.0.1:' + testServerPort;
-  var options = {
-    'transports': ['websocket', 'polling'],
-    'force new connection': true
-  };
-  var socket = socketIoClient(endpoint, options);
-  var newClientSocket;
-//  socket.on('connect', function() {
-//    deferred.call(socket);
-//  });
-  socket.on('connected', function(client) {
-    client.socket = socket;
-    deferred.call(client);
-  });
-  socket.on('error', function(error) {
-    deferred.fail(new Error(JSON.stringify(error)));
+  return Q.Promise(function(resolve, reject, notify) {
+    var endpoint = 'http://127.0.0.1:' + testServerPort;
+    var options = {
+      'transports': ['websocket', 'polling'],
+      'force new connection': true
+    };
+    var socket = socketIoClient(endpoint, options);
+    var newClientSocket;
+//    socket.on('connect', function() {
+//      resolve(socket);
+//    });
+    socket.on('connected', function(client) {
+      client.socket = socket;
+      resolve(client);
+    });
+    socket.on('error', function(error) {
+      reject(new Error(JSON.stringify(error)));
+    });
   });
-  return deferred;
 }
 exports.createClient = createClient;
-Deferred.register('createClient', createClient);
+registerCallbackGenerator('createClient');
 
 function createClients(count) {
-  var clients = [];
-  return Deferred.next(function loop() {
-    if (clients.length < count) {
-      return createClient()
-               .next(function(client) {
-                 clients.push(client);
-               })
-               .next(loop);
-    } else {
-      return clients;
+  return Q.Promise(function(resolve, reject, notify) {
+    var clients = [];
+    for (var i = 0; i < count; i++) {
+      createClient().then(function(client) {
+        clients.push(client);
+        if (clients.length == count)
+          resolve(clients);
+      });
     }
   });
 }
 exports.createClients = createClients;
-Deferred.register('createClients', createClients);
+registerCallbackGenerator('createClients');
 
 function createStubbedBackendConnection() {
   return {
@@ -211,11 +222,11 @@ function setupApplication() {
   var server;
   var backend;
   return setupServer(application)
-    .next(function(newServer) {
+    .then(function(newServer) {
       server = newServer;
     })
-    .createBackend()
-    .next(function(newBackend) {
+    .then(exports.createBackendCb())
+    .then(function(newBackend) {
       backend = newBackend;
       var connection = new Connection({
         tag:      testTag,
@@ -235,7 +246,7 @@ function setupApplication() {
     });
 }
 exports.setupApplication = setupApplication;
-Deferred.register('setupApplication', setupApplication);
+registerCallbackGenerator('setupApplication');
 
 function teardownApplication(params) {
   params = params || {};
@@ -256,79 +267,77 @@ function teardownApplication(params) {
   }
 }
 exports.teardownApplication = teardownApplication;
-Deferred.register('teardownApplication', teardownApplication);
 
 function createBackend() {
-  var deferred = new Deferred();
-  var backend = new FluentReceiver(testSendPort);
-
-  backend.clearMessages = function() {
-    this.received = [];
-  };
-
-  backend.clearMessages();
-  backend.on('receive', function(data) {
-    logger.debug('test-utils.createBackend.receive %d', backend._id);
-    backend.received.push(data);
-    if (backend.reservedResponses.length > 0) {
-      var response = backend.reservedResponses.shift();
-      if (typeof response == 'function')
-        response = response(data);
-      sendPacketTo(response, testReceivePort);
-    }
-  });
-
-  backend.reservedResponses = [];
-  backend.reserveResponse = function(response) {
-    backend.reservedResponses.push(response);
-  };
-
-  backend.assertReceived = function(expectedMessages) {
-    assert.deepEqual(this.getMessages().map(function(message) {
-                       return { type: message.type,
-                                body: message.body };
-                     }),
-                     expectedMessages);
-  };
-
-  backend.getMessages = function() {
-    return this.received.map(function(packet) {
-      return packet[2];
-    });
-  };
-  backend.getEvents = function() {
-    return this.getMessages().map(function(envelope) {
-      return envelope.type;
-    });
-  };
-  backend.getBodies = function() {
-    return this.getMessages().map(function(envelope) {
-      return envelope.body;
+  return Q.Promise(function(resolve, reject, notify) {
+    var backend = new FluentReceiver(testSendPort);
+
+    backend.clearMessages = function() {
+      this.received = [];
+    };
+
+    backend.clearMessages();
+    backend.on('receive', function(data) {
+      logger.debug('test-utils.createBackend.receive %d', backend._id);
+      backend.received.push(data);
+      if (backend.reservedResponses.length > 0) {
+        var response = backend.reservedResponses.shift();
+        if (typeof response == 'function')
+          response = response(data);
+        sendPacketTo(response, testReceivePort);
+      }
     });
-  };
 
-  backend.sendMessage = function(type, body, options) {
-    var response = createEnvelope(type, body);
-    if (options && typeof options == 'object') {
-      Object.keys(options).forEach(function(key) {
-        response[key] = options[key];
+    backend.reservedResponses = [];
+    backend.reserveResponse = function(response) {
+      backend.reservedResponses.push(response);
+    };
+
+    backend.assertReceived = function(expectedMessages) {
+      assert.deepEqual(this.getMessages().map(function(message) {
+                         return { type: message.type,
+                                  body: message.body };
+                       }),
+                       expectedMessages);
+    };
+
+    backend.getMessages = function() {
+      return this.received.map(function(packet) {
+        return packet[2];
       });
-    }
-    return sendPacketTo(createPacket(response), testReceivePort)
-  };
-  backend.sendResponse = function(request, type, body) {
-    var response = createReplyEnvelope(request, type, body);
-    return sendPacketTo(createPacket(response), testReceivePort)
-  };
+    };
+    backend.getEvents = function() {
+      return this.getMessages().map(function(envelope) {
+        return envelope.type;
+      });
+    };
+    backend.getBodies = function() {
+      return this.getMessages().map(function(envelope) {
+        return envelope.body;
+      });
+    };
 
-  backend.listen(function() {
-    return deferred.call(backend);
+    backend.sendMessage = function(type, body, options) {
+      var response = createEnvelope(type, body);
+      if (options && typeof options == 'object') {
+        Object.keys(options).forEach(function(key) {
+          response[key] = options[key];
+        });
+      }
+      return sendPacketTo(createPacket(response), testReceivePort)
+    };
+    backend.sendResponse = function(request, type, body) {
+      var response = createReplyEnvelope(request, type, body);
+      return sendPacketTo(createPacket(response), testReceivePort)
+    };
+
+    backend.listen(function() {
+      return resolve(backend);
+    });
   });
-
-  return deferred;
 }
 exports.createBackend = createBackend;
-Deferred.register('createBackend', createBackend);
+registerCallbackGenerator('createBackend');
 
 
 function createEnvelope(type, body, options) {




More information about the Groonga-commit mailing list
アーカイブの一覧に戻る