'use strict'; var test = require('tape'); var debug = require('object-inspect'); var forEach = require('foreach'); var has = require('has'); var v = require('es-value-fixtures'); var getSymbolDescription = require('../'); var getInferredName = require('../getInferredName'); test('getSymbolDescription', function (t) { t.test('no symbols', { skip: v.hasSymbols }, function (st) { st['throws']( getSymbolDescription, SyntaxError, 'requires Symbol support' ); st.end(); }); forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) { t['throws']( function () { getSymbolDescription(nonSymbol); }, v.hasSymbols ? TypeError : SyntaxError, debug(nonSymbol) + ' is not a Symbol' ); }); t.test('with symbols', { skip: !v.hasSymbols }, function (st) { forEach( [ [Symbol(), undefined], [Symbol(undefined), undefined], [Symbol(null), 'null'], [Symbol.iterator, 'Symbol.iterator'], [Symbol('foo'), 'foo'] ], function (pair) { var sym = pair[0]; var desc = pair[1]; st.equal(getSymbolDescription(sym), desc, debug(sym) + ' description is ' + debug(desc)); } ); st.test('only possible when inference or native `Symbol.prototype.description` is supported', { skip: !getInferredName && !has(Symbol.prototype, 'description') }, function (s2t) { s2t.equal(getSymbolDescription(Symbol('')), '', 'Symbol("") description is ""'); s2t.end(); }); st.test('only possible when global symbols are supported', { skip: !has(Symbol, 'for') || !has(Symbol, 'keyFor') }, function (s2t) { // eslint-disable-next-line no-restricted-properties s2t.equal(getSymbolDescription(Symbol['for']('')), '', 'Symbol.for("") description is ""'); s2t.end(); }); st.end(); }); t.end(); });