598 lines
12 KiB
JavaScript
598 lines
12 KiB
JavaScript
'use strict'
|
|
|
|
exports['string/varchar'] = {
|
|
format: 'text',
|
|
id: 1043,
|
|
tests: [
|
|
['bang', 'bang']
|
|
]
|
|
}
|
|
|
|
exports['integer/int4'] = {
|
|
format: 'text',
|
|
id: 23,
|
|
tests: [
|
|
['2147483647', 2147483647]
|
|
]
|
|
}
|
|
|
|
exports['smallint/int2'] = {
|
|
format: 'text',
|
|
id: 21,
|
|
tests: [
|
|
['32767', 32767]
|
|
]
|
|
}
|
|
|
|
exports['bigint/int8'] = {
|
|
format: 'text',
|
|
id: 20,
|
|
tests: [
|
|
['9223372036854775807', '9223372036854775807']
|
|
]
|
|
}
|
|
|
|
exports.oid = {
|
|
format: 'text',
|
|
id: 26,
|
|
tests: [
|
|
['103', 103]
|
|
]
|
|
}
|
|
|
|
var bignum = '31415926535897932384626433832795028841971693993751058.16180339887498948482045868343656381177203091798057628'
|
|
exports.numeric = {
|
|
format: 'text',
|
|
id: 1700,
|
|
tests: [
|
|
[bignum, bignum]
|
|
]
|
|
}
|
|
|
|
exports['real/float4'] = {
|
|
format: 'text',
|
|
id: 700,
|
|
tests: [
|
|
['123.456', 123.456]
|
|
]
|
|
}
|
|
|
|
exports['double precision / float 8'] = {
|
|
format: 'text',
|
|
id: 701,
|
|
tests: [
|
|
['12345678.12345678', 12345678.12345678]
|
|
]
|
|
}
|
|
|
|
exports.boolean = {
|
|
format: 'text',
|
|
id: 16,
|
|
tests: [
|
|
['TRUE', true],
|
|
['t', true],
|
|
['true', true],
|
|
['y', true],
|
|
['yes', true],
|
|
['on', true],
|
|
['1', true],
|
|
['f', false],
|
|
[null, null]
|
|
]
|
|
}
|
|
|
|
exports.timestamptz = {
|
|
format: 'text',
|
|
id: 1184,
|
|
tests: [
|
|
[
|
|
'2010-10-31 14:54:13.74-05:30',
|
|
dateEquals(2010, 9, 31, 20, 24, 13, 740)
|
|
],
|
|
[
|
|
'2011-01-23 22:05:00.68-06',
|
|
dateEquals(2011, 0, 24, 4, 5, 0, 680)
|
|
],
|
|
[
|
|
'2010-10-30 14:11:12.730838Z',
|
|
dateEquals(2010, 9, 30, 14, 11, 12, 730)
|
|
],
|
|
[
|
|
'2010-10-30 13:10:01+05',
|
|
dateEquals(2010, 9, 30, 8, 10, 1, 0)
|
|
]
|
|
]
|
|
}
|
|
|
|
exports.timestamp = {
|
|
format: 'text',
|
|
id: 1114,
|
|
tests: [
|
|
[
|
|
'2010-10-31 00:00:00',
|
|
function (t, value) {
|
|
t.equal(
|
|
value.toUTCString(),
|
|
new Date(2010, 9, 31, 0, 0, 0, 0, 0).toUTCString()
|
|
)
|
|
t.equal(
|
|
value.toString(),
|
|
new Date(2010, 9, 31, 0, 0, 0, 0, 0, 0).toString()
|
|
)
|
|
}
|
|
]
|
|
]
|
|
}
|
|
|
|
exports.date = {
|
|
format: 'text',
|
|
id: 1082,
|
|
tests: [
|
|
['2010-10-31', function (t, value) {
|
|
var now = new Date(2010, 9, 31)
|
|
dateEquals(
|
|
2010,
|
|
now.getUTCMonth(),
|
|
now.getUTCDate(),
|
|
now.getUTCHours(), 0, 0, 0)(t, value)
|
|
t.equal(value.getHours(), now.getHours())
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports.inet = {
|
|
format: 'text',
|
|
id: 869,
|
|
tests: [
|
|
['8.8.8.8', '8.8.8.8'],
|
|
['2001:4860:4860::8888', '2001:4860:4860::8888'],
|
|
['127.0.0.1', '127.0.0.1'],
|
|
['fd00:1::40e', 'fd00:1::40e'],
|
|
['1.2.3.4', '1.2.3.4']
|
|
]
|
|
}
|
|
|
|
exports.cidr = {
|
|
format: 'text',
|
|
id: 650,
|
|
tests: [
|
|
['172.16.0.0/12', '172.16.0.0/12'],
|
|
['fe80::/10', 'fe80::/10'],
|
|
['fc00::/7', 'fc00::/7'],
|
|
['192.168.0.0/24', '192.168.0.0/24'],
|
|
['10.0.0.0/8', '10.0.0.0/8']
|
|
]
|
|
}
|
|
|
|
exports.macaddr = {
|
|
format: 'text',
|
|
id: 829,
|
|
tests: [
|
|
['08:00:2b:01:02:03', '08:00:2b:01:02:03'],
|
|
['16:10:9f:0d:66:00', '16:10:9f:0d:66:00']
|
|
]
|
|
}
|
|
|
|
exports.numrange = {
|
|
format: 'text',
|
|
id: 3906,
|
|
tests: [
|
|
['[,]', '[,]'],
|
|
['(,)', '(,)'],
|
|
['(,]', '(,]'],
|
|
['[1,)', '[1,)'],
|
|
['[,1]', '[,1]'],
|
|
['(1,2)', '(1,2)'],
|
|
['(1,20.5]', '(1,20.5]']
|
|
]
|
|
}
|
|
|
|
exports.interval = {
|
|
format: 'text',
|
|
id: 1186,
|
|
tests: [
|
|
['01:02:03', function (t, value) {
|
|
t.equal(value.toPostgres(), '3 seconds 2 minutes 1 hours')
|
|
t.deepEqual(value, {hours: 1, minutes: 2, seconds: 3})
|
|
}],
|
|
['01:02:03.456', function (t, value) {
|
|
t.deepEqual(value, {hours: 1, minutes:2, seconds: 3, milliseconds: 456})
|
|
}],
|
|
['1 year -32 days', function (t, value) {
|
|
t.equal(value.toPostgres(), '-32 days 1 years')
|
|
t.deepEqual(value, {years: 1, days: -32})
|
|
}],
|
|
['1 day -00:00:03', function (t, value) {
|
|
t.equal(value.toPostgres(), '-3 seconds 1 days')
|
|
t.deepEqual(value, {days: 1, seconds: -3})
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports.bytea = {
|
|
format: 'text',
|
|
id: 17,
|
|
tests: [
|
|
['foo\\000\\200\\\\\\377', function (t, value) {
|
|
var buffer = new Buffer([102, 111, 111, 0, 128, 92, 255])
|
|
t.ok(buffer.equals(value))
|
|
}],
|
|
['', function (t, value) {
|
|
var buffer = new Buffer(0)
|
|
t.ok(buffer.equals(value))
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/boolean'] = {
|
|
format: 'text',
|
|
id: 1000,
|
|
tests: [
|
|
['{true,false}', function (t, value) {
|
|
t.deepEqual(value, [true, false])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/char'] = {
|
|
format: 'text',
|
|
id: 1014,
|
|
tests: [
|
|
['{foo,bar}', function (t, value) {
|
|
t.deepEqual(value, ['foo', 'bar'])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/varchar'] = {
|
|
format: 'text',
|
|
id: 1015,
|
|
tests: [
|
|
['{foo,bar}', function (t, value) {
|
|
t.deepEqual(value, ['foo', 'bar'])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/text'] = {
|
|
format: 'text',
|
|
id: 1008,
|
|
tests: [
|
|
['{foo}', function (t, value) {
|
|
t.deepEqual(value, ['foo'])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/bytea'] = {
|
|
format: 'text',
|
|
id: 1001,
|
|
tests: [
|
|
['{"\\\\x00000000"}', function (t, value) {
|
|
var buffer = new Buffer('00000000', 'hex')
|
|
t.ok(Array.isArray(value))
|
|
t.equal(value.length, 1)
|
|
t.ok(buffer.equals(value[0]))
|
|
}],
|
|
['{NULL,"\\\\x4e554c4c"}', function (t, value) {
|
|
var buffer = new Buffer('4e554c4c', 'hex')
|
|
t.ok(Array.isArray(value))
|
|
t.equal(value.length, 2)
|
|
t.equal(value[0], null)
|
|
t.ok(buffer.equals(value[1]))
|
|
}],
|
|
]
|
|
}
|
|
|
|
exports['array/numeric'] = {
|
|
format: 'text',
|
|
id: 1231,
|
|
tests: [
|
|
['{1.2,3.4}', function (t, value) {
|
|
t.deepEqual(value, [1.2, 3.4])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/int2'] = {
|
|
format: 'text',
|
|
id: 1005,
|
|
tests: [
|
|
['{-32768, -32767, 32766, 32767}', function (t, value) {
|
|
t.deepEqual(value, [-32768, -32767, 32766, 32767])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/int4'] = {
|
|
format: 'text',
|
|
id: 1005,
|
|
tests: [
|
|
['{-2147483648, -2147483647, 2147483646, 2147483647}', function (t, value) {
|
|
t.deepEqual(value, [-2147483648, -2147483647, 2147483646, 2147483647])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/int8'] = {
|
|
format: 'text',
|
|
id: 1016,
|
|
tests: [
|
|
[
|
|
'{-9223372036854775808, -9223372036854775807, 9223372036854775806, 9223372036854775807}',
|
|
function (t, value) {
|
|
t.deepEqual(value, [
|
|
'-9223372036854775808',
|
|
'-9223372036854775807',
|
|
'9223372036854775806',
|
|
'9223372036854775807'
|
|
])
|
|
}
|
|
]
|
|
]
|
|
}
|
|
|
|
exports['array/json'] = {
|
|
format: 'text',
|
|
id: 199,
|
|
tests: [
|
|
[
|
|
'{{1,2},{[3],"[4,5]"},{null,NULL}}',
|
|
function (t, value) {
|
|
t.deepEqual(value, [
|
|
[1, 2],
|
|
[[3], [4, 5]],
|
|
[null, null],
|
|
])
|
|
}
|
|
]
|
|
]
|
|
}
|
|
|
|
exports['array/jsonb'] = {
|
|
format: 'text',
|
|
id: 3807,
|
|
tests: exports['array/json'].tests
|
|
}
|
|
|
|
exports['array/point'] = {
|
|
format: 'text',
|
|
id: 1017,
|
|
tests: [
|
|
['{"(25.1,50.5)","(10.1,40)"}', function (t, value) {
|
|
t.deepEqual(value, [{x: 25.1, y: 50.5}, {x: 10.1, y: 40}])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/oid'] = {
|
|
format: 'text',
|
|
id: 1028,
|
|
tests: [
|
|
['{25864,25860}', function (t, value) {
|
|
t.deepEqual(value, [25864, 25860])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/float4'] = {
|
|
format: 'text',
|
|
id: 1021,
|
|
tests: [
|
|
['{1.2, 3.4}', function (t, value) {
|
|
t.deepEqual(value, [1.2, 3.4])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/float8'] = {
|
|
format: 'text',
|
|
id: 1022,
|
|
tests: [
|
|
['{-12345678.1234567, 12345678.12345678}', function (t, value) {
|
|
t.deepEqual(value, [-12345678.1234567, 12345678.12345678])
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/date'] = {
|
|
format: 'text',
|
|
id: 1182,
|
|
tests: [
|
|
['{2014-01-01,2015-12-31}', function (t, value) {
|
|
var expecteds = [new Date(2014, 0, 1), new Date(2015, 11, 31)]
|
|
t.equal(value.length, 2)
|
|
value.forEach(function (date, index) {
|
|
var expected = expecteds[index]
|
|
dateEquals(
|
|
expected.getUTCFullYear(),
|
|
expected.getUTCMonth(),
|
|
expected.getUTCDate(),
|
|
expected.getUTCHours(), 0, 0, 0)(t, date)
|
|
})
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/interval'] = {
|
|
format: 'text',
|
|
id: 1187,
|
|
tests: [
|
|
['{01:02:03,1 day -00:00:03}', function (t, value) {
|
|
var expecteds = [{hours: 1, minutes: 2, seconds: 3},
|
|
{days: 1, seconds: -3}]
|
|
t.equal(value.length, 2)
|
|
t.deepEqual(value, expecteds);
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/inet'] = {
|
|
format: 'text',
|
|
id: 1041,
|
|
tests: [
|
|
['{8.8.8.8}', function (t, value) {
|
|
t.deepEqual(value, ['8.8.8.8']);
|
|
}],
|
|
['{2001:4860:4860::8888}', function (t, value) {
|
|
t.deepEqual(value, ['2001:4860:4860::8888']);
|
|
}],
|
|
['{127.0.0.1,fd00:1::40e,1.2.3.4}', function (t, value) {
|
|
t.deepEqual(value, ['127.0.0.1', 'fd00:1::40e', '1.2.3.4']);
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/cidr'] = {
|
|
format: 'text',
|
|
id: 651,
|
|
tests: [
|
|
['{172.16.0.0/12}', function (t, value) {
|
|
t.deepEqual(value, ['172.16.0.0/12']);
|
|
}],
|
|
['{fe80::/10}', function (t, value) {
|
|
t.deepEqual(value, ['fe80::/10']);
|
|
}],
|
|
['{10.0.0.0/8,fc00::/7,192.168.0.0/24}', function (t, value) {
|
|
t.deepEqual(value, ['10.0.0.0/8', 'fc00::/7', '192.168.0.0/24']);
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/macaddr'] = {
|
|
format: 'text',
|
|
id: 1040,
|
|
tests: [
|
|
['{08:00:2b:01:02:03,16:10:9f:0d:66:00}', function (t, value) {
|
|
t.deepEqual(value, ['08:00:2b:01:02:03', '16:10:9f:0d:66:00']);
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['array/numrange'] = {
|
|
format: 'text',
|
|
id: 3907,
|
|
tests: [
|
|
['{"[1,2]","(4.5,8)","[10,40)","(-21.2,60.3]"}', function (t, value) {
|
|
t.deepEqual(value, ['[1,2]', '(4.5,8)', '[10,40)', '(-21.2,60.3]']);
|
|
}],
|
|
['{"[,20]","[3,]","[,]","(,35)","(1,)","(,)"}', function (t, value) {
|
|
t.deepEqual(value, ['[,20]', '[3,]', '[,]', '(,35)', '(1,)', '(,)']);
|
|
}],
|
|
['{"[,20)","[3,)","[,)","[,35)","[1,)","[,)"}', function (t, value) {
|
|
t.deepEqual(value, ['[,20)', '[3,)', '[,)', '[,35)', '[1,)', '[,)']);
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports['binary-string/varchar'] = {
|
|
format: 'binary',
|
|
id: 1043,
|
|
tests: [
|
|
['bang', 'bang']
|
|
]
|
|
}
|
|
|
|
exports['binary-integer/int4'] = {
|
|
format: 'binary',
|
|
id: 23,
|
|
tests: [
|
|
[[0, 0, 0, 100], 100]
|
|
]
|
|
}
|
|
|
|
exports['binary-smallint/int2'] = {
|
|
format: 'binary',
|
|
id: 21,
|
|
tests: [
|
|
[[0, 101], 101]
|
|
]
|
|
}
|
|
|
|
exports['binary-bigint/int8'] = {
|
|
format: 'binary',
|
|
id: 20,
|
|
tests: [
|
|
[new Buffer([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]), '9223372036854775807']
|
|
]
|
|
}
|
|
|
|
exports['binary-oid'] = {
|
|
format: 'binary',
|
|
id: 26,
|
|
tests: [
|
|
[[0, 0, 0, 103], 103]
|
|
]
|
|
}
|
|
|
|
exports['binary-numeric'] = {
|
|
format: 'binary',
|
|
id: 1700,
|
|
tests: [
|
|
[
|
|
[0, 2, 0, 0, 0, 0, 0, hex('0x64'), 0, 12, hex('0xd'), hex('0x48'), 0, 0, 0, 0],
|
|
12.34
|
|
]
|
|
]
|
|
}
|
|
|
|
exports['binary-real/float4'] = {
|
|
format: 'binary',
|
|
id: 700,
|
|
tests: [
|
|
[['0x41', '0x48', '0x00', '0x00'].map(hex), 12.5]
|
|
]
|
|
}
|
|
|
|
exports['binary-boolean'] = {
|
|
format: 'binary',
|
|
id: 16,
|
|
tests: [
|
|
[[1], true],
|
|
[[0], false],
|
|
[null, null]
|
|
]
|
|
}
|
|
|
|
exports['binary-string'] = {
|
|
format: 'binary',
|
|
id: 25,
|
|
tests: [
|
|
[
|
|
new Buffer(['0x73', '0x6c', '0x61', '0x64', '0x64', '0x61'].map(hex)),
|
|
'sladda'
|
|
]
|
|
]
|
|
}
|
|
|
|
exports.point = {
|
|
format: 'text',
|
|
id: 600,
|
|
tests: [
|
|
['(25.1,50.5)', function (t, value) {
|
|
t.deepEqual(value, {x: 25.1, y: 50.5})
|
|
}]
|
|
]
|
|
}
|
|
|
|
exports.circle = {
|
|
format: 'text',
|
|
id: 718,
|
|
tests: [
|
|
['<(25,10),5>', function (t, value) {
|
|
t.deepEqual(value, {x: 25, y: 10, radius: 5})
|
|
}]
|
|
]
|
|
}
|
|
|
|
function hex (string) {
|
|
return parseInt(string, 16)
|
|
}
|
|
|
|
function dateEquals () {
|
|
var timestamp = Date.UTC.apply(Date, arguments)
|
|
return function (t, value) {
|
|
t.equal(value.toUTCString(), new Date(timestamp).toUTCString())
|
|
}
|
|
}
|