'use strict'; // MODULES // var tape = require( 'tape' ); var proxyquire = require( 'proxyquire' ); var hasOwnProp = require( '@stdlib/utils/has-own-property' ); var detect = require( './../lib' ); // VARIABLES // var hasWeakMap = ( typeof WeakMap === 'function' ); // TESTS // tape( 'main export is a function', function test( t ) { t.ok( true, __filename ); t.equal( typeof detect, 'function', 'main export is a function' ); t.end(); }); tape( 'feature detection result is a boolean', function test( t ) { t.equal( typeof detect(), 'boolean', 'detection result is a boolean' ); t.end(); }); tape( 'if `WeakMap` is supported, detection result is `true`', function test( t ) { var mocked; if ( hasWeakMap ) { t.equal( detect(), true, 'detection result is `true`' ); } else { t.equal( detect(), false, 'detection result is `false`' ); } mocked = proxyquire( './../lib/detect_weakmap_support.js', { './weakmap.js': Mock }); t.equal( mocked(), true, 'detection result is `true` (mocked)' ); t.end(); function Mock() { var o = {}; function has( key ) { return hasOwnProp( o, key ); } function set( key, value ) { o[ key ] = value; } function get( key ) { return o[ key ]; } return { 'has': has, 'set': set, 'get': get }; } }); tape( 'if `WeakMap` is not supported, detection result is `false`', function test( t ) { var mocked; if ( hasWeakMap ) { t.equal( detect(), true, 'detection result is `true`' ); } else { t.equal( detect(), false, 'detection result is `false`' ); } mocked = proxyquire( './../lib/detect_weakmap_support.js', { './weakmap.js': {} }); t.equal( mocked(), false, 'detection result is `false` (mocked)' ); mocked = proxyquire( './../lib/detect_weakmap_support.js', { './weakmap.js': Mock1 }); t.equal( mocked(), false, 'detection result is `false` (no `has` method)' ); mocked = proxyquire( './../lib/detect_weakmap_support.js', { './weakmap.js': Mock2 }); t.equal( mocked(), false, 'detection result is `false` (no `set` method)' ); mocked = proxyquire( './../lib/detect_weakmap_support.js', { './weakmap.js': Mock3 }); t.equal( mocked(), false, 'detection result is `false` (no `get` method)' ); t.end(); function Mock1() { var o = {}; function set( key, value ) { o[ key ] = value; } function get( key ) { return o[ key ]; } return { 'set': set, 'get': get }; } function Mock2() { var o = {}; function has( key ) { return hasOwnProp( o, key ); } function get( key ) { return o[ key ]; } return { 'has': has, 'get': get }; } function Mock3() { var o = {}; function has( key ) { return hasOwnProp( o, key ); } function set( key, value ) { o[ key ] = value; } return { 'has': has, 'set': set }; } });