| 'use strict'; |
| |
| var forEach = require('foreach'); |
| var debug = require('object-inspect'); |
| |
| var assertRecord = require('../../helpers/assertRecord'); |
| var v = require('./values'); |
| |
| module.exports = function assertRecordTests(ES, test) { |
| test('Property Descriptor', function (t) { |
| var record = 'Property Descriptor'; |
| |
| forEach(v.nonUndefinedPrimitives, function (primitive) { |
| t['throws']( |
| function () { assertRecord(ES, record, 'arg', primitive); }, |
| TypeError, |
| debug(primitive) + ' is not a Property Descriptor' |
| ); |
| }); |
| |
| t['throws']( |
| function () { assertRecord(ES, record, 'arg', { invalid: true }); }, |
| TypeError, |
| 'invalid keys not allowed on a Property Descriptor' |
| ); |
| |
| t.doesNotThrow( |
| function () { assertRecord(ES, record, 'arg', {}); }, |
| 'empty object is an incomplete Property Descriptor' |
| ); |
| |
| t.doesNotThrow( |
| function () { assertRecord(ES, record, 'arg', v.accessorDescriptor()); }, |
| 'accessor descriptor is a Property Descriptor' |
| ); |
| |
| t.doesNotThrow( |
| function () { assertRecord(ES, record, 'arg', v.mutatorDescriptor()); }, |
| 'mutator descriptor is a Property Descriptor' |
| ); |
| |
| t.doesNotThrow( |
| function () { assertRecord(ES, record, 'arg', v.dataDescriptor()); }, |
| 'data descriptor is a Property Descriptor' |
| ); |
| |
| t.doesNotThrow( |
| function () { assertRecord(ES, record, 'arg', v.genericDescriptor()); }, |
| 'generic descriptor is a Property Descriptor' |
| ); |
| |
| t['throws']( |
| function () { assertRecord(ES, record, 'arg', v.bothDescriptor()); }, |
| TypeError, |
| 'a Property Descriptor can not be both a Data and an Accessor Descriptor' |
| ); |
| |
| t.end(); |
| }); |
| }; |