any-db-adapter-spec
Advanced tools
Comparing version 2.0.3 to 2.1.0
var EventEmitter = require('events').EventEmitter | ||
exports.testProperties = function (queryable, adapter, assert, name) { | ||
exports.testProperties = function (queryable, adapter, test, name) { | ||
name = name || 'queryable' | ||
assert.ok(queryable instanceof EventEmitter, name + ' is an EventEmitter') | ||
assert.equal(typeof queryable.query, 'function', name + '.query is a function') | ||
assert.equal(typeof queryable.adapter, 'object', name + '.adapter is an object') | ||
assert.equal(queryable.adapter, adapter, name + '.adapter == adapter') | ||
test.ok(queryable instanceof EventEmitter, name + ' is an EventEmitter') | ||
test.equal(typeof queryable.query, 'function', name + '.query is a function') | ||
test.equal(typeof queryable.adapter, 'object', name + '.adapter is an object') | ||
test.equal(queryable.adapter, adapter, name + '.adapter == adapter') | ||
} | ||
exports.testEvents = function (queryable, assert, name) { | ||
exports.testEvents = function (queryable, test, name) { | ||
name = name || 'queryable' | ||
var emittedData = false | ||
, emittedFields = false | ||
test.test(name + '.query events with callbacks', function (test) { | ||
testEventsWithResults(queryable, test, name) | ||
}) | ||
test.test(name + '.query events with no result and no callback', function (test) { | ||
testEventsNoResultsNoCallback(queryable, test, name) | ||
}) | ||
test.test(name + '.query events with errors', function (test) { | ||
testEventsQueryError(queryable, test, name) | ||
}) | ||
} | ||
function testEventsWithResults (queryable, test, name) { | ||
test.plan(19) | ||
var emittedFields = false | ||
, emittedData = false | ||
, emittedClose = false | ||
, emittedEnd = false | ||
, callbackCalled = false | ||
var query = queryable.adapter.createQuery('SELECT 1 AS val', function (err, result) { | ||
test.ok(!callbackCalled, 'callback was not already called') | ||
if (err) throw err | ||
assert.ok(emittedFields, 'callback after query.emit("fields", fields)') | ||
assert.ok(emittedData, 'callback after query.emit("data", row)') | ||
assert.ok(!emittedEnd, 'callback before query.emit("end")') | ||
callbackCalled = true | ||
test.ok(emittedFields, 'callback after query.emit("fields", fields)') | ||
test.ok(emittedData, 'callback after query.emit("data", row)') | ||
test.ok(emittedClose, 'callback after query.emit("close")') | ||
test.ok(!emittedEnd, 'callback before query.emit("end")') | ||
}) | ||
queryable.on('query', function (q) { | ||
assert.equal(q, query, name + '.emit("query", query)') | ||
queryable.once('query', function (q) { | ||
test.equal(q, query, name + '.emit("query", query)') | ||
}) | ||
@@ -31,3 +51,3 @@ | ||
emittedFields = true | ||
assert.equal(fields[0].name, 'val', '"fields" event is correct') | ||
test.ok(Array.isArray(fields), '"fields" event value is an array') | ||
}) | ||
@@ -37,16 +57,80 @@ | ||
emittedData = true | ||
assert.ok(emittedFields, 'query.emit("data") after query.emit("fields")') | ||
assert.equal(row.val, 1) | ||
test.ok(emittedFields, 'query.emit("data") after query.emit("fields")') | ||
test.equal(row.val, 1) | ||
}) | ||
query.on('close', function (arg) { | ||
test.ok(!emittedClose, 'query.emit("close") emitted once') | ||
emittedClose = true | ||
test.ok(emittedFields, 'query.emit("close") after query.emit("fields")') | ||
test.ok(emittedData, 'query.emit("close") after query.emit("data")') | ||
test.ok(!arg, 'No extra arguments to "end" event') | ||
}) | ||
query.on('end', function (arg) { | ||
test.ok(!emittedEnd, 'query.emit("end") emitted once') | ||
emittedEnd = true | ||
assert.ok(emittedFields, 'query.emit("end") after query.emit("fields")') | ||
assert.ok(emittedData, 'query.emit("end") after query.emit("data")') | ||
assert.ok(!arg, 'No extra arguments to "end" event') | ||
test.ok(emittedClose, 'query.emit("end") after query.emit("close")') | ||
test.ok(emittedFields, 'query.emit("end") after query.emit("fields")') | ||
test.ok(emittedData, 'query.emit("end") after query.emit("data")') | ||
test.ok(!arg, 'No extra arguments to "end" event') | ||
}) | ||
assert.equal(queryable.query(query), query, name + '.query(query) returns same query') | ||
test.equal(queryable.query(query), query, name + '.query(query) returns same query') | ||
} | ||
exports.testEvents.plan = 11 | ||
function testEventsNoResultsNoCallback (queryable, test, name) { | ||
test.plan(2) | ||
var sql = 'SELECT 1 AS val WHERE 0 = 1' | ||
if (queryable.adapter.name == 'mysql') { | ||
sql = 'SELECT 1 AS val FROM INFORMATION_SCHEMA.TABLES WHERE 0 = 1'; | ||
} | ||
var emittedFields = false | ||
var query = queryable.query(sql) | ||
query.on('fields', function (fields) { | ||
emittedFields = true | ||
test.ok(Array.isArray(fields), '"fields" event value is an array') | ||
}) | ||
query.on('close', function () { | ||
test.ok(emittedFields, 'query.emit("close") after query.emit("fields")') | ||
}) | ||
query.on('end', function () { | ||
test.fail('query emitted "end" with no reader!') | ||
}) | ||
} | ||
function testEventsQueryError (queryable, test, name) { | ||
test.plan(6) | ||
var emittedClose = false | ||
, emittedError = false | ||
, emittedEnd = false | ||
var query = queryable.query('not a valid SQL statement', function (err, result) { | ||
test.ok(emittedClose, 'callback called after query.emit("close")') | ||
test.ok(!emittedError, 'callback is first listener to query.emit("error")') | ||
test.ok(!emittedEnd, 'callback before query.emit("end")') | ||
}) | ||
query.on('error', function (err) { | ||
emittedError = true | ||
test.ok(err, 'query.emit("error", err)') | ||
}) | ||
query.on('close', function () { | ||
emittedClose = true | ||
test.pass('query.emit("close")') | ||
}) | ||
query.on('end', function () { | ||
emittedEnd = true | ||
test.pass('query.emit("end")') | ||
}) | ||
} | ||
exports.testEvents.plan = 3 |
{ | ||
"name": "any-db-adapter-spec", | ||
"version": "2.0.3", | ||
"version": "2.1.0", | ||
"description": "Specification and test suite for any-db adapters", | ||
@@ -5,0 +5,0 @@ "main": "test-any-db-adapter.js", |
@@ -147,7 +147,13 @@ # Any-DB API | ||
* `'error', error` - Emitted if the query results in an error. | ||
* `'error', error` - Emitted at most once per query. Note that this event will | ||
be emitted for errors even if a callback was provided, the callback will | ||
simply be subscribed to the 'error' event. | ||
* `'fields', fields` - An array of [Field][ResultSet] objects emitted before | ||
any `'data'` events. | ||
The following events are part of the [Readable][] interface: | ||
* `'data', row` - Emitted for each row in the query result set. | ||
* `'end'` - Emitted when the query completes. | ||
* `'close'` - Emitted when the query completes. | ||
* `'end'` - Emitted after all query results have been consumed. | ||
@@ -154,0 +160,0 @@ ## ResultSet |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
21535
330
250
0