[Pkg-javascript-commits] [node-leveldown] 274/492: test reusability & exception clarification & fixes

Andrew Kelley andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:14:08 UTC 2014


This is an automated email from the git hooks/post-receive script.

andrewrk-guest pushed a commit to annotated tag rocksdb-0.10.1
in repository node-leveldown.

commit d8260b5aa36ab76f14d630a7acfc6fc8967130f9
Author: Rod Vagg <rod at vagg.org>
Date:   Fri Mar 15 12:35:08 2013 +1100

    test reusability & exception clarification & fixes
---
 src/database.cc               |  12 +-
 src/iterator.cc               |  10 +-
 src/leveldown.h               |   4 +-
 test/approximate-size-test.js | 118 +++++++--
 test/batch-test.js            |  26 +-
 test/chained-batch-test.js    |   5 +-
 test/close-test.js            |  47 +++-
 test/del-test.js              |  97 ++++---
 test/get-test.js              | 103 +++++---
 test/iterator-test.js         | 589 +++++++++++++++++++++++-------------------
 test/leveldown-test.js        |  29 ++-
 test/open-test.js             | 109 +++++---
 test/put-get-del-test.js      |   5 +-
 test/put-test.js              | 105 +++++---
 14 files changed, 758 insertions(+), 501 deletions(-)

diff --git a/src/database.cc b/src/database.cc
index 8fa3423..0ddaa71 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -144,11 +144,11 @@ v8::Handle<v8::Value> Database::New (const v8::Arguments& args) {
   v8::HandleScope scope;
 
   if (args.Length() == 0) {
-    LD_THROW_RETURN("leveldown() requires at least a location argument")
+    LD_THROW_RETURN(leveldown() requires at least a location argument)
   }
 
   if (!args[0]->IsString()) {
-    LD_THROW_RETURN("leveldown() requires a location string argument")
+    LD_THROW_RETURN(leveldown() requires a location string argument)
   }
 
   LD_FROM_V8_STRING(location, v8::Handle<v8::String>::Cast(args[0]))
@@ -246,7 +246,7 @@ v8::Handle<v8::Value> Database::Put (const v8::Arguments& args) {
 v8::Handle<v8::Value> Database::Get (const v8::Arguments& args) {
   v8::HandleScope scope;
 
-  LD_METHOD_SETUP_COMMON(put, 1, 2)
+  LD_METHOD_SETUP_COMMON(get, 1, 2)
 
   LD_CB_ERR_IF_NULL_OR_UNDEFINED(args[0], key)
 
@@ -274,7 +274,7 @@ v8::Handle<v8::Value> Database::Get (const v8::Arguments& args) {
 v8::Handle<v8::Value> Database::Delete (const v8::Arguments& args) {
   v8::HandleScope scope;
 
-  LD_METHOD_SETUP_COMMON(put, 1, 2)
+  LD_METHOD_SETUP_COMMON(del, 1, 2)
 
   LD_CB_ERR_IF_NULL_OR_UNDEFINED(args[0], key)
 
@@ -382,9 +382,7 @@ v8::Handle<v8::Value> Database::ApproximateSize (const v8::Arguments& args) {
       || endBufferV->IsUndefined()
       || endBufferV->IsFunction() // callback in pos 1?
       ) {
-    LD_THROW_RETURN( \
-      "approximateSize() requires valid `start`, `end` and `callback` arguments" \
-    )
+    LD_THROW_RETURN(approximateSize() requires valid `start`, `end` and `callback` arguments)
   }
 
   LD_METHOD_SETUP_COMMON(approximateSize, -1, 2)
diff --git a/src/iterator.cc b/src/iterator.cc
index 69ff152..dc875e0 100644
--- a/src/iterator.cc
+++ b/src/iterator.cc
@@ -118,15 +118,15 @@ v8::Handle<v8::Value> Iterator::Next (const v8::Arguments& args) {
   Iterator* iterator = node::ObjectWrap::Unwrap<Iterator>(args.This());
 
   if (args.Length() == 0 || !args[0]->IsFunction()) {
-    LD_THROW_RETURN("next() requires a callback argument")
+    LD_THROW_RETURN(next() requires a callback argument)
   }
 
   if (iterator->ended) {
-    LD_THROW_RETURN("Cannot call next() after end()")
+    LD_THROW_RETURN(cannot call next() after end())
   }
 
   if (iterator->nexting) {
-    LD_THROW_RETURN("Cannot call next() before previous next() has completed")
+    LD_THROW_RETURN(cannot call next() before previous next() has completed)
   }
 
   v8::Persistent<v8::Function> callback =
@@ -148,11 +148,11 @@ v8::Handle<v8::Value> Iterator::End (const v8::Arguments& args) {
   Iterator* iterator = node::ObjectWrap::Unwrap<Iterator>(args.This());
 
   if (args.Length() == 0 || !args[0]->IsFunction()) {
-    LD_THROW_RETURN("end() requires a callback argument")
+    LD_THROW_RETURN(end() requires a callback argument)
   }
 
   if (iterator->ended) {
-    LD_THROW_RETURN("end() already called on iterator")
+    LD_THROW_RETURN(end() already called on iterator)
   }
 
   v8::Persistent<v8::Function> callback =
diff --git a/src/leveldown.h b/src/leveldown.h
index 97a6eed..2de0dfa 100644
--- a/src/leveldown.h
+++ b/src/leveldown.h
@@ -85,8 +85,8 @@
     node::FatalException(try_catch); \
   }
 
-#define LD_THROW_RETURN(msg) \
-  v8::ThrowException(v8::Exception::Error(v8::String::New(#msg))); \
+#define LD_THROW_RETURN(...) \
+  v8::ThrowException(v8::Exception::Error(v8::String::New(#__VA_ARGS__))); \
   return v8::Undefined();
 
 /* LD_METHOD_SETUP_COMMON setup the following objects:
diff --git a/test/approximate-size-test.js b/test/approximate-size-test.js
index abd8063..8bed86e 100644
--- a/test/approximate-size-test.js
+++ b/test/approximate-size-test.js
@@ -2,14 +2,77 @@ const test       = require('tap').test
     , testCommon = require('./common')
     , leveldown  = require('../')
 
-test('setUp', testCommon.setUp)
+var db
 
-test('test approximateSize()', function (t) {
-  var db   = leveldown(testCommon.location())
-    , data = Array.apply(null, Array(10000)).map(function () { return 'aaaaaaaaaa' }).join('')
+module.exports.setUp = function (leveldown) {
+  test('setUp common', testCommon.setUp)
+  test('setUp db', function (t) {
+    db = leveldown(testCommon.location())
+    db.open(t.end.bind(t))
+  })
+}
+
+module.exports.args = function () {
+  test('test argument-less approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db)
+      , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' }
+      , 'no-arg approximateSize() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 1-arg, approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db, 'foo')
+      , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' }
+      , 'callback-less, 1-arg approximateSize() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 2-arg, approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db, 'foo', 'bar')
+      , { name: 'Error', message: 'approximateSize() requires a callback argument' }
+      , 'callback-less, 2-arg approximateSize() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 3-arg, approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db, function () {})
+      , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' }
+      , 'callback-only approximateSize() throws'
+    )
+    t.end()
+  })
 
-  db.open(function (err) {
-    t.notOk(err, 'no error')
+  test('test callback-only approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db, function () {})
+      , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' }
+      , 'callback-only approximateSize() throws'
+    )
+    t.end()
+  })
+
+  test('test 1-arg + callback approximateSize() throws', function (t) {
+    t.throws(
+        db.approximateSize.bind(db, 'foo', function () {})
+      , { name: 'Error', message: 'approximateSize() requires valid `start`, `end` and `callback` arguments' }
+      , '1-arg + callback approximateSize() throws'
+    )
+    t.end()
+  })
+}
+
+module.exports.approximateSize = function () {
+  test('test approximateSize()', function (t) {
+    var data = Array.apply(null, Array(10000)).map(function () {
+      return 'aaaaaaaaaa'
+    }).join('')
 
     db.batch(
         Array.apply(null, Array(10)).map(function (x, i) {
@@ -26,29 +89,14 @@ test('test approximateSize()', function (t) {
             db.open(function (err) {
               t.notOk(err, 'no error')
 
-              t.throws(db.approximateSize, 'arg-less approximateSize() throws')
-              t.throws(
-                  db.approximateSize.bind(db, 'foo')
-                , '1-arg approximateSize() throws'
-              )
-              t.throws(
-                  db.approximateSize.bind(db, 'foo', 'bar')
-                , '2-arg approximateSize() throws'
-              )
-              t.throws(
-                  db.approximateSize.bind(db, function () {})
-                , 'callback-only approximateSize() throws'
-              )
-              t.throws(
-                  db.approximateSize.bind(db, 'foo', function () {})
-                , '1-arg + callback approximateSize() throws'
-              )
-
-              db.approximateSize('foo', 'z', function (err, size) {
+              db.approximateSize('!', '~', function (err, size) {
                 t.notOk(err, 'no error')
 
                 t.type(size, 'number')
-                t.ok(size > 100000, 'size reports a reasonable amount (' + size + ')')
+                t.ok(
+                    size > 100000
+                  , 'size reports a reasonable amount (' + size + ')'
+                )
 
                 db.close(function (err) {
                   t.notOk(err, 'no error')
@@ -60,6 +108,20 @@ test('test approximateSize()', function (t) {
         }
     )
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', function (t) {
+    db.close(testCommon.tearDown.bind(null, t))
+  })
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp(leveldown)
+  module.exports.args()
+  module.exports.approximateSize()
+  module.exports.tearDown()
+}
 
-test('tearDown', testCommon.tearDown)
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/batch-test.js b/test/batch-test.js
index 9f2ca88..1517bac 100644
--- a/test/batch-test.js
+++ b/test/batch-test.js
@@ -4,33 +4,17 @@ const test       = require('tap').test
 
 var db
 
-test('setUp', function (t) {
+test('setUp common', testCommon.setUp)
+test('setUp db', function (t) {
   db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
+  db.open(t.end.bind(t))
 })
 
-/*FIXME:
-test('test argument-less batch() throws', function (t) {
-  t.throws(db.batch.bind(db), 'no-arg batch() throws')
+test('test callback-less, 2-arg, batch() throws', function (t) {
+  t.throws(db.batch.bind(db, 'foo', {}), 'callback-less, 2-arg batch() throws')
   t.end()
 })
 
-test('test callback-less, 1-arg, batch() throws', function (t) {
-  t.throws(db.batch.bind(db, []), 'callback-less, 1-arg batch() throws')
-  t.end()
-})
-
-test('test callback-less, 3-arg, batch() throws', function (t) {
-  t.throws(db.batch.bind(db, [], {}), 'callback-less, 3-arg batch() throws')
-  t.end()
-})
-
-test('test batch() with wrong arg throws', function (t) {
-  t.throws(db.batch.bind(db, {}, {}), 'wrong arg type throws')
-  t.end()
-})
-*/
-
 test('test batch() with empty array', function (t) {
   db.batch([], function (err) {
     t.notOk(err, 'no error')
diff --git a/test/chained-batch-test.js b/test/chained-batch-test.js
index dc8cef5..9641c74 100644
--- a/test/chained-batch-test.js
+++ b/test/chained-batch-test.js
@@ -4,9 +4,10 @@ const test       = require('tap').test
 
 var db
 
-test('setUp', function (t) {
+test('setUp common', testCommon.setUp)
+test('setUp db', function (t) {
   db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
+  db.open(t.end.bind(t))
 })
 
 test('basic batch', function (t) {
diff --git a/test/close-test.js b/test/close-test.js
index 555fc55..4315060 100644
--- a/test/close-test.js
+++ b/test/close-test.js
@@ -2,21 +2,44 @@ const test       = require('tap').test
     , testCommon = require('./common')
     , leveldown  = require('../')
 
-test('setUp', testCommon.setUp)
+module.exports.setUp = function () {
+  test('setUp', testCommon.setUp)
+}
 
-test('test close()', function (t) {
-  var db = leveldown(testCommon.location())
+module.exports.close = function (leveldown) {
+  test('test close()', function (t) {
+    var db = leveldown(testCommon.location())
 
-  db.open(function (err) {
-    t.notOk(err, 'no error')
-    t.throws(db.close.bind(db), 'no-arg close() throws')
-    t.throws(db.close.bind(db, 'foo'), 'non-callback close() throws')
-
-    db.close(function (err) {
+    db.open(function (err) {
       t.notOk(err, 'no error')
-      t.end()
+      t.throws(
+          db.close.bind(db)
+        , { name: 'Error', message: 'close() requires a callback argument' }
+        , 'no-arg close() throws'
+      )
+      t.throws(
+          db.close.bind(db, 'foo')
+        , { name: 'Error', message: 'close() requires a callback argument' }
+        , 'non-callback close() throws'
+      )
+
+      db.close(function (err) {
+        t.notOk(err, 'no error')
+        t.end()
+      })
     })
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', testCommon.tearDown)
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp()
+  module.exports.close(leveldown)
+  module.exports.tearDown()
+}
 
-test('tearDown', testCommon.tearDown)
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/del-test.js b/test/del-test.js
index 0b33718..7568b48 100644
--- a/test/del-test.js
+++ b/test/del-test.js
@@ -4,41 +4,72 @@ const test       = require('tap').test
 
 var db
 
-test('setUp', function (t) {
-  db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
-})
-
-test('test argument-less del() throws', function (t) {
-  t.throws(db.del.bind(db), 'no-arg del() throws')
-  t.end()
-})
-
-test('test callback-less, 1-arg, del() throws', function (t) {
-  t.throws(db.del.bind(db, 'foo'), 'callback-less, 1-arg del() throws')
-  t.end()
-})
-
-test('test callback-less, 3-arg, del() throws', function (t) {
-  t.throws(db.del.bind(db, 'foo', {}), 'callback-less, 2-arg del() throws')
-  t.end()
-})
-
-test('test simple del()', function (t) {
-  db.put('foo', 'bar', function (err) {
-    t.notOk(err, 'no error')
-    db.del('foo', function (err) {
+module.exports.setUp = function (leveldown) {
+  test('setUp common', testCommon.setUp)
+  test('setUp db', function (t) {
+    db = leveldown(testCommon.location())
+    db.open(t.end.bind(t))
+  })
+}
+
+module.exports.args = function () {
+  test('test argument-less del() throws', function (t) {
+    t.throws(
+        db.del.bind(db)
+      , { name: 'Error', message: 'del() requires a callback argument' }
+      , 'no-arg del() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 1-arg, del() throws', function (t) {
+    t.throws(
+        db.del.bind(db, 'foo')
+      , { name: 'Error', message: 'del() requires a callback argument' }
+      , 'callback-less, 1-arg del() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 3-arg, del() throws', function (t) {
+    t.throws(
+        db.del.bind(db, 'foo', {})
+      , { name: 'Error', message: 'del() requires a callback argument' }
+      , 'callback-less, 2-arg del() throws'
+    )
+    t.end()
+  })
+}
+
+module.exports.del = function () {
+  test('test simple del()', function (t) {
+    db.put('foo', 'bar', function (err) {
       t.notOk(err, 'no error')
-      db.get('foo', function (err) {
-        t.ok(err, 'entry propertly deleted')
-        t.like(err.message, /NotFound/)
-        t.end()
-      })
+      db.del('foo', function (err) {
+        t.notOk(err, 'no error')
+        db.get('foo', function (err) {
+          t.ok(err, 'entry propertly deleted')
+          t.like(err.message, /NotFound/)
+          t.end()
+        })
 
+      })
     })
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', function (t) {
+    db.close(testCommon.tearDown.bind(null, t))
+  })
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp(leveldown)
+  module.exports.args()
+  module.exports.del()
+  module.exports.tearDown()
+}
 
-test('tearDown', function (t) {
-  db.close(testCommon.tearDown.bind(null, t))
-})
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/get-test.js b/test/get-test.js
index a1033f0..ef731b5 100644
--- a/test/get-test.js
+++ b/test/get-test.js
@@ -4,50 +4,81 @@ const test       = require('tap').test
 
 var db
 
-test('setUp', function (t) {
-  db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
-})
-
-test('test argument-less get() throws', function (t) {
-  t.throws(db.get.bind(db), 'no-arg get() throws')
-  t.end()
-})
-
-test('test callback-less, 1-arg, get() throws', function (t) {
-  t.throws(db.get.bind(db, 'foo'), 'callback-less, 1-arg get() throws')
-  t.end()
-})
-
-test('test callback-less, 3-arg, get() throws', function (t) {
-  t.throws(db.get.bind(db, 'foo', {}), 'callback-less, 2-arg get() throws')
-  t.end()
-})
-
-test('test simple get()', function (t) {
-  db.put('foo', 'bar', function (err) {
-    t.notOk(err, 'no error')
-    db.get('foo', function (err, value) {
-      t.notOk(err, 'no error')
-      t.type(value, Buffer)
-      t.equal(value.toString(), 'bar')
+module.exports.setUp = function (leveldown) {
+  test('setUp common', testCommon.setUp)
+  test('setUp db', function (t) {
+    db = leveldown(testCommon.location())
+    db.open(t.end.bind(t))
+  })
+}
+
+module.exports.args = function () {
+  test('test argument-less get() throws', function (t) {
+    t.throws(
+        db.get.bind(db)
+      , { name: 'Error', message: 'get() requires a callback argument' }
+      , 'no-arg get() throws'
+    )
+    t.end()
+  })
 
-      db.get('foo', {}, function (err, value) { // same but with {}
+  test('test callback-less, 1-arg, get() throws', function (t) {
+    t.throws(
+        db.get.bind(db, 'foo')
+      , { name: 'Error', message: 'get() requires a callback argument' }
+      , 'callback-less, 1-arg get() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 3-arg, get() throws', function (t) {
+    t.throws(
+        db.get.bind(db, 'foo', {})
+      , { name: 'Error', message: 'get() requires a callback argument' }
+      , 'callback-less, 2-arg get() throws'
+    )
+    t.end()
+  })
+}
+
+module.exports.get = function () {
+  test('test simple get()', function (t) {
+    db.put('foo', 'bar', function (err) {
+      t.notOk(err, 'no error')
+      db.get('foo', function (err, value) {
         t.notOk(err, 'no error')
         t.type(value, Buffer)
         t.equal(value.toString(), 'bar')
 
-        db.get('foo', { asBuffer: false }, function (err, value) {
+        db.get('foo', {}, function (err, value) { // same but with {}
           t.notOk(err, 'no error')
-          t.type(value, 'string')
-          t.equal(value, 'bar')
-          t.end()
+          t.type(value, Buffer)
+          t.equal(value.toString(), 'bar')
+
+          db.get('foo', { asBuffer: false }, function (err, value) {
+            t.notOk(err, 'no error')
+            t.type(value, 'string')
+            t.equal(value, 'bar')
+            t.end()
+          })
         })
       })
     })
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', function (t) {
+    db.close(testCommon.tearDown.bind(null, t))
+  })
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp(leveldown)
+  module.exports.args()
+  module.exports.get()
+  module.exports.tearDown()
+}
 
-test('tearDown', function (t) {
-  db.close(testCommon.tearDown.bind(null, t))
-})
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/iterator-test.js b/test/iterator-test.js
index 4fbc9f5..3a4e1a6 100644
--- a/test/iterator-test.js
+++ b/test/iterator-test.js
@@ -20,311 +20,366 @@ var db
     }())
   , transformSource = function (d) { return { key: d.key, value: d.value } }
 
-test('setUp', function (t) {
-  db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
-})
-
-test('test argument-less iterator#next() throws', function (t) {
-  var iterator = db.iterator()
-  t.throws(iterator.next.bind(iterator), 'no-arg iterator#next() throws')
-  iterator.end(t.end.bind(t))
-})
-
-test('test argument-less iterator#end() after next() throws', function (t) {
-  var iterator = db.iterator()
-  iterator.next(function () {
-    t.throws(iterator.end.bind(iterator), 'no-arg iterator#end() throws')
+module.exports.setUp = function (leveldown) {
+  test('setUp common', testCommon.setUp)
+  test('setUp db', function (t) {
+    db = leveldown(testCommon.location())
+    db.open(t.end.bind(t))
+  })
+}
+
+module.exports.args = function () {
+  test('test argument-less iterator#next() throws', function (t) {
+    var iterator = db.iterator()
+    t.throws(
+        iterator.next.bind(iterator)
+      , { name: 'Error', message: 'next() requires a callback argument' }
+      , 'no-arg iterator#next() throws'
+    )
     iterator.end(t.end.bind(t))
   })
-})
-
-test('test argument-less iterator#end() throws', function (t) {
-  var iterator = db.iterator()
-  t.throws(iterator.end.bind(iterator), 'no-arg iterator#end() throws')
-  iterator.end(t.end.bind(t))
-})
-
-test('test twice iterator#end() throws', function (t) {
-  var iterator = db.iterator()
-  iterator.end(function (err) {
-    t.notOk(err, 'no error')
-    t.throws(iterator.end.bind(iterator, function () {}), 'twice iterator#end() throws')
-    t.end()
+
+  test('test argument-less iterator#end() after next() throws', function (t) {
+    var iterator = db.iterator()
+    iterator.next(function () {
+      t.throws(
+          iterator.end.bind(iterator)
+        , { name: 'Error', message: 'end() requires a callback argument' }
+        , 'no-arg iterator#end() throws'
+      )
+      iterator.end(t.end.bind(t))
+    })
+  })
+
+  test('test argument-less iterator#end() throws', function (t) {
+    var iterator = db.iterator()
+    t.throws(
+        iterator.end.bind(iterator)
+      , { name: 'Error', message: 'end() requires a callback argument' }
+      , 'no-arg iterator#end() throws'
+    )
+    iterator.end(t.end.bind(t))
   })
-})
+}
 
-test('test twice iterator#next() throws', function (t) {
-  var iterator = db.iterator()
-  iterator.next(function (err) {
-    t.notOk(err, 'no error')
+module.exports.sequence = function () {
+  test('test twice iterator#end() throws', function (t) {
+    var iterator = db.iterator()
     iterator.end(function (err) {
       t.notOk(err, 'no error')
+      t.throws(
+          iterator.end.bind(iterator, function () {})
+        , { name: 'Error', message: 'end() already called on iterator' }
+        , 'no-arg iterator#next() throws'
+      )
       t.end()
     })
   })
-  t.throws(iterator.next.bind(iterator, function () {}), 'twice iterator#next() throws')
-})
-
-test('test simple iterator()', function (t) {
-  var data = [
-          { type: 'put', key: 'foobatch1', value: 'bar1' }
-        , { type: 'put', key: 'foobatch2', value: 'bar2' }
-        , { type: 'put', key: 'foobatch3', value: 'bar3' }
-      ]
-    , idx = 0
 
-  db.batch(data, function (err) {
-    t.notOk(err, 'no error')
+  test('test iterator#next after iterator#end() throws', function (t) {
+    var iterator = db.iterator()
+    iterator.end(function (err) {
+      t.notOk(err, 'no error')
+      t.throws(
+          iterator.next.bind(iterator, function () {})
+        , { name: 'Error', message: 'cannot call next() after end()' }
+        , 'no-arg iterator#next() after iterator#end() throws'
+      )
+      t.end()
+    })
+  })
 
+  test('test twice iterator#next() throws', function (t) {
     var iterator = db.iterator()
-      , fn = function (err, key, value) {
-          t.notOk(err, 'no error')
-          if (key && value) {
-            t.equal(key.toString(), data[idx].key, 'correct key')
-            t.equal(value.toString(), data[idx].value, 'correct value')
-            process.nextTick(next)
-            idx++
-          } else { // end
-            t.type(err, 'undefined', 'err argument is undefined')
-            t.type(key, 'undefined', 'key argument is undefined')
-            t.type(value, 'undefined', 'value argument is undefined')
-            t.equal(idx, data.length, 'correct number of entries')
-            iterator.end(function () {
-              t.end()
-            })
+    iterator.next(function (err) {
+      t.notOk(err, 'no error')
+      iterator.end(function (err) {
+        t.notOk(err, 'no error')
+        t.end()
+      })
+    })
+    t.throws(
+        iterator.next.bind(iterator, function () {})
+      , { name: 'Error', message: 'cannot call next() before previous next() has completed' }
+      , 'no-arg iterator#next() throws'
+    )
+  })
+}
+
+module.exports.iterator = function (leveldown) {
+  test('test simple iterator()', function (t) {
+    var data = [
+            { type: 'put', key: 'foobatch1', value: 'bar1' }
+          , { type: 'put', key: 'foobatch2', value: 'bar2' }
+          , { type: 'put', key: 'foobatch3', value: 'bar3' }
+        ]
+      , idx = 0
+
+    db.batch(data, function (err) {
+      t.notOk(err, 'no error')
+
+      var iterator = db.iterator()
+        , fn = function (err, key, value) {
+            t.notOk(err, 'no error')
+            if (key && value) {
+              t.equal(key.toString(), data[idx].key, 'correct key')
+              t.equal(value.toString(), data[idx].value, 'correct value')
+              process.nextTick(next)
+              idx++
+            } else { // end
+              t.type(err, 'undefined', 'err argument is undefined')
+              t.type(key, 'undefined', 'key argument is undefined')
+              t.type(value, 'undefined', 'value argument is undefined')
+              t.equal(idx, data.length, 'correct number of entries')
+              iterator.end(function () {
+                t.end()
+              })
+            }
+          }
+        , next = function () {
+            iterator.next(fn)
           }
-        }
-      , next = function () {
-          iterator.next(fn)
-        }
 
-    next()
+      next()
+    })
   })
-})
 
-/** the following tests are mirroring the same series of tests in
-  * LevelUP read-stream-test.js
-  */
+  /** the following tests are mirroring the same series of tests in
+    * LevelUP read-stream-test.js
+    */
 
-test('setUp #2', function (t) {
-  db.close(function () {
-    db = leveldown(testCommon.location())
-    db.open(function () {
-      db.batch(sourceData, t.end.bind(t))
+  test('setUp #2', function (t) {
+    db.close(function () {
+      db = leveldown(testCommon.location())
+      db.open(function () {
+        db.batch(sourceData, t.end.bind(t))
+      })
     })
   })
-})
-
-test('test full data collection', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, sourceData.length, 'correct number of entries')
-    var expected = sourceData.map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test full data collection', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, sourceData.length, 'correct number of entries')
+      var expected = sourceData.map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, sourceData.length, 'correct number of entries')
-    var expected = sourceData.slice().reverse().map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, sourceData.length, 'correct number of entries')
+      var expected = sourceData.slice().reverse().map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start=0', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '00' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, sourceData.length, 'correct number of entries')
-    var expected = sourceData.map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start=0', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '00' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, sourceData.length, 'correct number of entries')
+      var expected = sourceData.map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start=50', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 50, 'correct number of entries')
-    var expected = sourceData.slice(50).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start=50', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 50, 'correct number of entries')
+      var expected = sourceData.slice(50).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start=50 and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50', reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 51, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(49).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start=50 and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '50', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 51, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(49).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start being a midway key (49.5)', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 50, 'correct number of entries')
-    var expected = sourceData.slice(50).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start being a midway key (49.5)', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 50, 'correct number of entries')
+      var expected = sourceData.slice(50).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start being a midway key (49999)', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49999' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 50, 'correct number of entries')
-    var expected = sourceData.slice(50).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start being a midway key (49999)', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49999' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 50, 'correct number of entries')
+      var expected = sourceData.slice(50).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start being a midway key and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5', reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 51, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(49).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start being a midway key and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 51, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(49).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end=50', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 51, 'correct number of entries')
-    var expected = sourceData.slice(0, 51).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end=50', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 51, 'correct number of entries')
+      var expected = sourceData.slice(0, 51).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end being a midway key (50.5)', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 51, 'correct number of entries')
-    var expected = sourceData.slice(0, 51).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end being a midway key (50.5)', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 51, 'correct number of entries')
+      var expected = sourceData.slice(0, 51).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end being a midway key (50555)', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50555' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 51, 'correct number of entries')
-    var expected = sourceData.slice(0, 51).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end being a midway key (50555)', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50555' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 51, 'correct number of entries')
+      var expected = sourceData.slice(0, 51).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end being a midway key and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5', reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 49, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end being a midway key and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '50.5', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 49, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(0, 49).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-// end='0', starting key is actually '00' so it should avoid it
-test('test iterator with end=0', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '0' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 0, 'correct number of entries')
-    t.end()
+
+  // end='0', starting key is actually '00' so it should avoid it
+  test('test iterator with end=0', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, end: '0' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 0, 'correct number of entries')
+      t.end()
+    })
   })
-})
-
-test('test iterator with start=30 and end=70', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '30', end: '70' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 41, 'correct number of entries')
-    var expected = sourceData.slice(30, 71).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start=30 and end=70', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '30', end: '70' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 41, 'correct number of entries')
+      var expected = sourceData.slice(30, 71).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with start=30 and end=70 and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '70', end: '30', reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 41, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(29, 70).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with start=30 and end=70 and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '70', end: '30', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 41, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(29, 70).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with limit=20', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20 }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice(0, 20).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with limit=20', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20 }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice(0, 20).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with limit=20 and start=20', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '20', limit: 20 }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice(20, 40).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with limit=20 and start=20', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '20', limit: 20 }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice(20, 40).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with limit=20 and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(0, 20).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with limit=20 and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(0, 20).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with limit=20 and start=20 and reverse=true', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '79', limit: 20, reverse: true }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice().reverse().slice(20, 40).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with limit=20 and start=20 and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '79', limit: 20, reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(20, 40).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end after limit', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, end: '50' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice(0, 20).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end after limit', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 20, end: '50' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice(0, 20).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
-
-test('test iterator with end before limit', function (t) {
-  collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 50, end: '19' }), function (err, data) {
-    t.notOk(err, 'no error')
-    t.equal(data.length, 20, 'correct number of entries')
-    var expected = sourceData.slice(0, 20).map(transformSource)
-    t.deepEqual(data, expected)
-    t.end()
+
+  test('test iterator with end before limit', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, limit: 50, end: '19' }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 20, 'correct number of entries')
+      var expected = sourceData.slice(0, 20).map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
   })
-})
+}
 
-test('tearDown', function (t) {
-  db.close(testCommon.tearDown.bind(null, t))
-})
\ No newline at end of file
+module.exports.tearDown = function () {
+  test('tearDown', function (t) {
+    db.close(testCommon.tearDown.bind(null, t))
+  })
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp(leveldown)
+  module.exports.args()
+  module.exports.sequence()
+  module.exports.iterator(leveldown)
+  module.exports.tearDown()
+}
+
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/leveldown-test.js b/test/leveldown-test.js
index b5b85a8..d7e5584 100644
--- a/test/leveldown-test.js
+++ b/test/leveldown-test.js
@@ -1,14 +1,23 @@
 const test      = require('tap').test
     , leveldown = require('../')
 
-test('test database creation no-arg throws', function (t) {
-  t.throws(leveldown, 'no-arg leveldown() throws')
-  t.end()
-})
+module.exports.args = function (leveldown) {
+  test('test database creation no-arg throws', function (t) {
+    t.throws(
+        leveldown
+      , { name: 'Error', message: 'leveldown() requires at least a location argument' }
+      , 'no-arg leveldown() throws'
+    )
+    t.end()
+  })
 
-test('test database open no-arg throws', function (t) {
-  var db = leveldown('foo')
-  t.ok(db, 'database object returned')
-  t.isa(db.open, 'function', 'open() function exists')
-  t.end()
-})
\ No newline at end of file
+  test('test database open no-arg throws', function (t) {
+    var db = leveldown('foo')
+    t.ok(db, 'database object returned')
+    t.isa(db.open, 'function', 'open() function exists')
+    t.end()
+  })
+}
+
+if (require.main === module)
+  module.exports.args(leveldown)
\ No newline at end of file
diff --git a/test/open-test.js b/test/open-test.js
index 16dba0a..d53a64e 100644
--- a/test/open-test.js
+++ b/test/open-test.js
@@ -3,60 +3,87 @@ const fs         = require('fs')
     , testCommon = require('./common')
     , leveldown  = require('../')
 
-test('setUp', testCommon.setUp)
+module.exports.setUp = function () {
+  test('setUp', testCommon.setUp)
+}
 
-test('test database open no-arg throws', function (t) {
-  t.throws(leveldown(testCommon.location()).open, 'no-arg open() throws')
-  t.end()
-})
+module.exports.args = function (leveldown) {
+  test('test database open no-arg throws', function (t) {
+    var db = leveldown(testCommon.location())
+    t.throws(
+        db.open.bind(db)
+      , { name: 'Error', message: 'open() requires a callback argument' }
+      , 'no-arg open() throws'
+    )
+    t.end()
+  })
 
-test('test callback-less, 1-arg, open() throws', function (t) {
-  var db = leveldown(testCommon.location())
-  t.throws(db.open.bind(db, {}), 'callback-less, 1-arg open() throws')
-  t.end()
-})
+  test('test callback-less, 1-arg, open() throws', function (t) {
+    var db = leveldown(testCommon.location())
+    t.throws(
+        db.open.bind(db, {})
+      , { name: 'Error', message: 'open() requires a callback argument' }
+      , 'callback-less, 1-arg open() throws'
+    )
+    t.end()
+  })
+}
 
-test('test database open', function (t) {
-  var db = leveldown(testCommon.location())
+module.exports.open = function (leveldown) {
+  test('test database open', function (t) {
+    var db = leveldown(testCommon.location())
 
-  // default createIfMissing=true, errorIfExists=false
-  db.open(function (err) {
-      t.notOk(err, 'no error')
-      db.close(function () {
-        t.end()
+    // default createIfMissing=true, errorIfExists=false
+    db.open(function (err) {
+        t.notOk(err, 'no error')
+        db.close(function () {
+          t.end()
+        })
       })
-    })
-})
+  })
 
-test('test database open createIfMissing:false', function (t) {
-  var db = leveldown(testCommon.location())
+  test('test database open createIfMissing:false', function (t) {
+    var db = leveldown(testCommon.location())
 
-  db.open({ createIfMissing: false }, function (err) {
-    t.ok(err, 'error')
-    t.ok(/does not exist/.test(err.message), 'error is about dir not existing')
-    t.end()
+    db.open({ createIfMissing: false }, function (err) {
+      t.ok(err, 'error')
+      t.ok(/does not exist/.test(err.message), 'error is about dir not existing')
+      t.end()
+    })
   })
-})
 
-test('test database open errorIfExists:true', function (t) {
-  var location = testCommon.location()
-    , db       = leveldown(location)
+  test('test database open errorIfExists:true', function (t) {
+    var location = testCommon.location()
+      , db       = leveldown(location)
 
-  // make a valid database first, then close and dispose
-  db.open(function (err) {
-    t.notOk(err, 'no error')
-    db.close(function (err) {
+    // make a valid database first, then close and dispose
+    db.open(function (err) {
       t.notOk(err, 'no error')
+      db.close(function (err) {
+        t.notOk(err, 'no error')
 
-      // open again with 'errorIfExists'
-      db = leveldown(location)
-      db.open({ createIfMissing: false, errorIfExists: true }, function (err) {
-        t.ok(err, 'error')
-        t.ok(/exists/.test(err.message), 'error is about already existing')
-        t.end()
+        // open again with 'errorIfExists'
+        db = leveldown(location)
+        db.open({ createIfMissing: false, errorIfExists: true }, function (err) {
+          t.ok(err, 'error')
+          t.ok(/exists/.test(err.message), 'error is about already existing')
+          t.end()
+        })
       })
     })
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', testCommon.tearDown)
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp()
+  module.exports.args(leveldown)
+  module.exports.open(leveldown)
+  module.exports.tearDown()
+}
 
-test('tearDown', testCommon.tearDown)
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file
diff --git a/test/put-get-del-test.js b/test/put-get-del-test.js
index e5cddb0..b060a90 100644
--- a/test/put-get-del-test.js
+++ b/test/put-get-del-test.js
@@ -68,9 +68,10 @@ var db
 
 /**** SETUP ENVIRONMENT ****/
 
-test('setUp', function (t) {
+test('setUp common', testCommon.setUp)
+test('setUp db', function (t) {
   db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
+  db.open(t.end.bind(t))
 })
 
 /**** TEST ERROR KEYS ****/
diff --git a/test/put-test.js b/test/put-test.js
index a420466..5d78e13 100644
--- a/test/put-test.js
+++ b/test/put-test.js
@@ -4,42 +4,77 @@ const test       = require('tap').test
 
 var db
 
-test('setUp', function (t) {
-  db = leveldown(testCommon.location())
-  db.open(testCommon.setUp.bind(null, t))
-})
-
-test('test argument-less put() throws', function (t) {
-  t.throws(db.put.bind(db), 'no-arg put() throws')
-  t.end()
-})
-
-test('test callback-less, 1-arg, put() throws', function (t) {
-  t.throws(db.put.bind(db, 'foo'), 'callback-less, 1-arg put() throws')
-  t.end()
-})
-
-test('test callback-less, 2-arg, put() throws', function (t) {
-  t.throws(db.put.bind(db, 'foo', 'bar'), 'callback-less, 2-arg put() throws')
-  t.end()
-})
-
-test('test callback-less, 3-arg, put() throws', function (t) {
-  t.throws(db.put.bind(db, 'foo', 'bar', {}), 'callback-less, 3-arg put() throws')
-  t.end()
-})
-
-test('test simple put()', function (t) {
-  db.put('foo', 'bar', function (err) {
-    t.notOk(err, 'no error')
-    db.get('foo', function (err, value) {
+module.exports.setUp = function (leveldown) {
+  test('setUp common', testCommon.setUp)
+  test('setUp db', function (t) {
+    db = leveldown(testCommon.location())
+    db.open(t.end.bind(t))
+  })
+}
+
+module.exports.args = function () {
+  test('test argument-less put() throws', function (t) {
+    t.throws(
+        db.put.bind(db)
+      , { name: 'Error', message: 'put() requires a callback argument' }
+      , 'no-arg put() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 1-arg, put() throws', function (t) {
+    t.throws(
+        db.put.bind(db, 'foo')
+      , { name: 'Error', message: 'put() requires a callback argument' }
+      , 'callback-less, 1-arg put() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 2-arg, put() throws', function (t) {
+    t.throws(
+        db.put.bind(db, 'foo', 'bar')
+      , { name: 'Error', message: 'put() requires a callback argument' }
+      , 'callback-less, 2-arg put() throws'
+    )
+    t.end()
+  })
+
+  test('test callback-less, 3-arg, put() throws', function (t) {
+    t.throws(
+        db.put.bind(db, 'foo', 'bar', {})
+      , { name: 'Error', message: 'put() requires a callback argument' }
+      , 'callback-less, 3-arg put() throws'
+    )
+    t.end()
+  })
+}
+
+module.exports.put = function () {
+  test('test simple put()', function (t) {
+    db.put('foo', 'bar', function (err) {
       t.notOk(err, 'no error')
-      t.equal(value.toString(), 'bar')
-      t.end()
+      db.get('foo', function (err, value) {
+        t.notOk(err, 'no error')
+        t.equal(value.toString(), 'bar')
+        t.end()
+      })
     })
   })
-})
+}
+
+module.exports.tearDown = function () {
+  test('tearDown', function (t) {
+    db.close(testCommon.tearDown.bind(null, t))
+  })
+}
+
+module.exports.all = function (leveldown) {
+  module.exports.setUp(leveldown)
+  module.exports.args()
+  module.exports.put()
+  module.exports.tearDown()
+}
 
-test('tearDown', function (t) {
-  db.close(testCommon.tearDown.bind(null, t))
-})
\ No newline at end of file
+if (require.main === module)
+  module.exports.all(leveldown)
\ No newline at end of file

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-leveldown.git



More information about the Pkg-javascript-commits mailing list