diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/README.md b/lib/node_modules/@stdlib/assert/has-promise-support/README.md
new file mode 100644
index 000000000000..5600b6252429
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/README.md
@@ -0,0 +1,123 @@
+
+
+# Promise Support
+
+> Detect native [`Promise`][mdn-promise] support.
+
+
+
+## Usage
+
+```javascript
+var hasPromiseSupport = require( '@stdlib/assert/has-promise-support' );
+```
+
+#### hasPromiseSupport()
+
+Detects if a runtime environment supports ES2015 [`Promise`][mdn-promise].
+
+```javascript
+var bool = hasPromiseSupport();
+// returns
+```
+
+
+
+
+
+
+
+## Examples
+
+
+
+```javascript
+var hasPromiseSupport = require( '@stdlib/assert/has-promise-support' );
+
+var bool = hasPromiseSupport();
+if ( bool ) {
+ console.log( 'Environment has Promise support.' );
+} else {
+ console.log( 'Environment lacks Promise support.' );
+}
+```
+
+
+
+
+
+* * *
+
+
+
+## CLI
+
+
+
+### Usage
+
+```text
+Usage: has-promise-support [options]
+
+Options:
+
+ -h, --help Print this message.
+ -V, --version Print the package version.
+```
+
+
+
+
+
+
+
+### Examples
+
+```bash
+$ has-promise-support
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+[mdn-promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
+
+
+
+
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/benchmark/benchmark.js b/lib/node_modules/@stdlib/assert/has-promise-support/benchmark/benchmark.js
new file mode 100644
index 000000000000..03f976a56cc1
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/benchmark/benchmark.js
@@ -0,0 +1,49 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var bench = require( '@stdlib/bench' );
+var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive;
+var pkg = require( './../package.json' ).name;
+var hasPromiseSupport = require( './../lib' );
+
+
+// MAIN //
+
+bench( pkg, function benchmark( b ) {
+ var bool;
+ var i;
+
+ b.tic();
+ for ( i = 0; i < b.iterations; i++ ) {
+ // Note: the following *could* be optimized away via loop-invariant code motion. If so, the entire loop will disappear.
+ bool = hasPromiseSupport();
+ if ( typeof bool !== 'boolean' ) {
+ b.fail( 'should return a boolean' );
+ }
+ }
+ b.toc();
+ if ( !isBoolean( bool ) ) {
+ b.fail( 'should return a boolean' );
+ }
+ b.pass( 'benchmark finished' );
+ b.end();
+});
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/bin/cli b/lib/node_modules/@stdlib/assert/has-promise-support/bin/cli
new file mode 100755
index 000000000000..f7fb81913da6
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/bin/cli
@@ -0,0 +1,60 @@
+#!/usr/bin/env node
+
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var resolve = require( 'path' ).resolve;
+var readFileSync = require( '@stdlib/fs/read-file' ).sync;
+var CLI = require( '@stdlib/cli/ctor' );
+var detect = require( './../lib' );
+
+
+// MAIN //
+
+/**
+* Main execution sequence.
+*
+* @private
+*/
+function main() {
+ var flags;
+ var cli;
+
+ // Create a command-line interface:
+ cli = new CLI({
+ 'pkg': require( './../package.json' ),
+ 'options': require( './../etc/cli_opts.json' ),
+ 'help': readFileSync( resolve( __dirname, '..', 'docs', 'usage.txt' ), {
+ 'encoding': 'utf8'
+ })
+ });
+
+ // Get any provided command-line options:
+ flags = cli.flags();
+ if ( flags.help || flags.version ) {
+ return;
+ }
+
+ console.log( detect() ); // eslint-disable-line no-console
+}
+
+main();
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/docs/repl.txt b/lib/node_modules/@stdlib/assert/has-promise-support/docs/repl.txt
new file mode 100644
index 000000000000..3d33916e304d
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/docs/repl.txt
@@ -0,0 +1,18 @@
+
+{{alias}}()
+ Tests for native Promise support.
+
+ Returns
+ -------
+ bool: boolean
+ Boolean indicating if an environment has native Promise support.
+
+ Examples
+ --------
+ > var bool = {{alias}}()
+
+
+ See Also
+ --------
+
+
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/index.d.ts b/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/index.d.ts
new file mode 100644
index 000000000000..dae210bf93f5
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/index.d.ts
@@ -0,0 +1,35 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// TypeScript Version: 4.1
+
+/**
+* Tests for native Promise support.
+*
+* @returns boolean indicating if an environment has native Promise support
+*
+* @example
+* var bool = hasPromiseSupport();
+* // returns
+*/
+declare function hasPromiseSupport(): boolean;
+
+
+// EXPORTS //
+
+export = hasPromiseSupport;
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/test.ts b/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/test.ts
new file mode 100644
index 000000000000..3d097b40e0f2
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/docs/types/test.ts
@@ -0,0 +1,33 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import hasPromiseSupport = require( './index' );
+
+
+// TESTS //
+
+// The function returns a boolean...
+{
+ hasPromiseSupport(); // $ExpectType boolean
+}
+
+// The compiler throws an error if the function is provided arguments...
+{
+ hasPromiseSupport( true ); // $ExpectError
+ hasPromiseSupport( [], 123 ); // $ExpectError
+}
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/docs/usage.txt b/lib/node_modules/@stdlib/assert/has-promise-support/docs/usage.txt
new file mode 100644
index 000000000000..613f0cbad15c
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/docs/usage.txt
@@ -0,0 +1,8 @@
+
+Usage: has-promise-support [options]
+
+Options:
+
+ -h, --help Print this message.
+ -V, --version Print the package version.
+
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/etc/cli_opts.json b/lib/node_modules/@stdlib/assert/has-promise-support/etc/cli_opts.json
new file mode 100644
index 000000000000..f245a17e6317
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/etc/cli_opts.json
@@ -0,0 +1,14 @@
+{
+ "boolean": [
+ "help",
+ "version"
+ ],
+ "alias": {
+ "help": [
+ "h"
+ ],
+ "version": [
+ "V"
+ ]
+ }
+}
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/examples/index.js b/lib/node_modules/@stdlib/assert/has-promise-support/examples/index.js
new file mode 100644
index 000000000000..bb1af5bdb3b0
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/examples/index.js
@@ -0,0 +1,28 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+var hasPromiseSupport = require( './../lib' );
+
+var bool = hasPromiseSupport();
+if ( bool ) {
+ console.log( 'Environment has Promise support.' );
+} else {
+ console.log( 'Environment lacks Promise support.' );
+}
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/lib/index.js b/lib/node_modules/@stdlib/assert/has-promise-support/lib/index.js
new file mode 100644
index 000000000000..b99fdd0d709e
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/lib/index.js
@@ -0,0 +1,40 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+/**
+* Test for native Promise support.
+*
+* @module @stdlib/assert/has-promise-support
+*
+* @example
+* var hasPromiseSupport = require( '@stdlib/assert/has-promise-support' );
+*
+* var bool = hasPromiseSupport();
+* // returns
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/lib/main.js b/lib/node_modules/@stdlib/assert/has-promise-support/lib/main.js
new file mode 100644
index 000000000000..76244e7fbaaa
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/lib/main.js
@@ -0,0 +1,48 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var GlobalPromise = require( './promise.js' );
+
+
+// MAIN //
+
+/**
+* Tests for native Promise support.
+*
+* @returns {boolean} boolean indicating if an environment has native Promise support
+*
+* @example
+* var bool = hasPromiseSupport();
+* // returns
+*/
+function hasPromiseSupport() {
+ return (
+ typeof GlobalPromise === 'function' &&
+ typeof GlobalPromise.resolve === 'function' &&
+ typeof GlobalPromise.reject === 'function'
+ );
+}
+
+
+// EXPORTS //
+
+module.exports = hasPromiseSupport;
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/lib/promise.js b/lib/node_modules/@stdlib/assert/has-promise-support/lib/promise.js
new file mode 100644
index 000000000000..7b3070c04403
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/lib/promise.js
@@ -0,0 +1,28 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MAIN //
+
+var main = ( typeof Promise === 'function' ) ? Promise : null; // eslint-disable-line stdlib/require-globals
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/package.json b/lib/node_modules/@stdlib/assert/has-promise-support/package.json
new file mode 100644
index 000000000000..611465118e93
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/package.json
@@ -0,0 +1,74 @@
+{
+ "name": "@stdlib/assert/has-promise-support",
+ "version": "0.0.0",
+ "description": "Detect native Promise support.",
+ "license": "Apache-2.0",
+ "author": {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ },
+ "contributors": [
+ {
+ "name": "The Stdlib Authors",
+ "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+ }
+ ],
+ "bin": {
+ "has-promise-support": "./bin/cli"
+ },
+ "main": "./lib",
+ "directories": {
+ "benchmark": "./benchmark",
+ "doc": "./docs",
+ "example": "./examples",
+ "lib": "./lib",
+ "test": "./test"
+ },
+ "types": "./docs/types",
+ "scripts": {},
+ "homepage": "https://github.com/stdlib-js/stdlib",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stdlib-js/stdlib.git"
+ },
+ "bugs": {
+ "url": "https://github.com/stdlib-js/stdlib/issues"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=0.10.0",
+ "npm": ">2.7.0"
+ },
+ "os": [
+ "aix",
+ "darwin",
+ "freebsd",
+ "linux",
+ "macos",
+ "openbsd",
+ "sunos",
+ "win32",
+ "windows"
+ ],
+ "keywords": [
+ "stdlib",
+ "stdutils",
+ "stdutil",
+ "utilities",
+ "utility",
+ "utils",
+ "util",
+ "detect",
+ "feature",
+ "promise",
+ "promises",
+ "es2015",
+ "es6",
+ "support",
+ "has",
+ "native",
+ "issupported",
+ "cli"
+ ]
+}
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/test/test.cli.js b/lib/node_modules/@stdlib/assert/has-promise-support/test/test.cli.js
new file mode 100644
index 000000000000..25c82a53b8b7
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/test/test.cli.js
@@ -0,0 +1,163 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var resolve = require( 'path' ).resolve;
+var exec = require( 'child_process' ).exec;
+var tape = require( 'tape' );
+var IS_BROWSER = require( '@stdlib/assert/is-browser' );
+var IS_WINDOWS = require( '@stdlib/assert/is-windows' );
+var EXEC_PATH = require( '@stdlib/process/exec-path' );
+var readFileSync = require( '@stdlib/fs/read-file' ).sync;
+
+
+// VARIABLES //
+
+var fpath = resolve( __dirname, '..', 'bin', 'cli' );
+var opts = {
+ 'skip': IS_BROWSER || IS_WINDOWS
+};
+
+
+// FIXTURES //
+
+var PKG_VERSION = require( './../package.json' ).version;
+
+
+// TESTS //
+
+tape( 'command-line interface', function test( t ) {
+ t.ok( true, __filename );
+ t.end();
+});
+
+tape( 'when invoked with a `--help` flag, the command-line interface prints the help text to `stderr`', opts, function test( t ) {
+ var expected;
+ var cmd;
+
+ expected = readFileSync( resolve( __dirname, '..', 'docs', 'usage.txt' ), {
+ 'encoding': 'utf8'
+ });
+ cmd = [
+ EXEC_PATH,
+ fpath,
+ '--help'
+ ];
+
+ exec( cmd.join( ' ' ), done );
+
+ function done( error, stdout, stderr ) {
+ if ( error ) {
+ t.fail( error.message );
+ } else {
+ t.strictEqual( stdout.toString(), '', 'does not print to `stdout`' );
+ t.strictEqual( stderr.toString(), expected+'\n', 'expected value' );
+ }
+ t.end();
+ }
+});
+
+tape( 'when invoked with a `-h` flag, the command-line interface prints the help text to `stderr`', opts, function test( t ) {
+ var expected;
+ var cmd;
+
+ expected = readFileSync( resolve( __dirname, '..', 'docs', 'usage.txt' ), {
+ 'encoding': 'utf8'
+ });
+ cmd = [
+ EXEC_PATH,
+ fpath,
+ '-h'
+ ];
+
+ exec( cmd.join( ' ' ), done );
+
+ function done( error, stdout, stderr ) {
+ if ( error ) {
+ t.fail( error.message );
+ } else {
+ t.strictEqual( stdout.toString(), '', 'does not print to `stdout`' );
+ t.strictEqual( stderr.toString(), expected+'\n', 'expected value' );
+ }
+ t.end();
+ }
+});
+
+tape( 'when invoked with a `--version` flag, the command-line interface prints the version to `stderr`', opts, function test( t ) {
+ var cmd = [
+ EXEC_PATH,
+ fpath,
+ '--version'
+ ];
+
+ exec( cmd.join( ' ' ), done );
+
+ function done( error, stdout, stderr ) {
+ if ( error ) {
+ t.fail( error.message );
+ } else {
+ t.strictEqual( stdout.toString(), '', 'does not print to `stdout`' );
+ t.strictEqual( stderr.toString(), PKG_VERSION+'\n', 'expected value' );
+ }
+ t.end();
+ }
+});
+
+tape( 'when invoked with a `-V` flag, the command-line interface prints the version to `stderr`', opts, function test( t ) {
+ var cmd = [
+ EXEC_PATH,
+ fpath,
+ '-V'
+ ];
+
+ exec( cmd.join( ' ' ), done );
+
+ function done( error, stdout, stderr ) {
+ if ( error ) {
+ t.fail( error.message );
+ } else {
+ t.strictEqual( stdout.toString(), '', 'does not print to `stdout`' );
+ t.strictEqual( stderr.toString(), PKG_VERSION+'\n', 'expected value' );
+ }
+ t.end();
+ }
+});
+
+tape( 'the command-line interface prints either `true` or `false` to `stdout` indicating whether an environment provides Promise support', opts, function test( t ) {
+ var cmd = [
+ EXEC_PATH,
+ fpath
+ ];
+
+ exec( cmd.join( ' ' ), done );
+
+ function done( error, stdout, stderr ) {
+ var str;
+ if ( error ) {
+ t.fail( error.message );
+ } else {
+ str = stdout.toString();
+ t.strictEqual( str === 'true\n' || str === 'false\n', true, 'prints either `true` or `false` to `stdout`' );
+ t.strictEqual( stderr.toString(), '', 'does not print to `stderr`' );
+ }
+ t.end();
+ }
+});
diff --git a/lib/node_modules/@stdlib/assert/has-promise-support/test/test.js b/lib/node_modules/@stdlib/assert/has-promise-support/test/test.js
new file mode 100644
index 000000000000..baf416e0b939
--- /dev/null
+++ b/lib/node_modules/@stdlib/assert/has-promise-support/test/test.js
@@ -0,0 +1,133 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2026 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+'use strict';
+
+// MODULES //
+
+var tape = require( 'tape' );
+var proxyquire = require( 'proxyquire' );
+var detect = require( './../lib' );
+
+
+// VARIABLES //
+
+var hasPromise = ( typeof Promise === 'function' ); // eslint-disable-line stdlib/require-globals
+
+
+// FUNCTIONS //
+
+/**
+* Returns a mock Promise constructor.
+*
+* @private
+* @param {Object} methods - methods to attach
+* @param {boolean} [methods.resolve] - boolean indicating whether to attach a `resolve` method
+* @param {boolean} [methods.reject] - boolean indicating whether to attach a `reject` method
+* @returns {Function} mock constructor
+*/
+function createMock( methods ) {
+ function Mock() {
+ // No-op...
+ }
+ if ( methods.resolve ) {
+ Mock.resolve = noop;
+ }
+ if ( methods.reject ) {
+ Mock.reject = noop;
+ }
+ Mock[ '@noCallThru' ] = true;
+ return Mock;
+
+ /**
+ * No-op function.
+ *
+ * @private
+ */
+ function noop() {
+ // No-op...
+ }
+}
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+ t.ok( true, __filename );
+ t.strictEqual( typeof detect, 'function', 'main export is a function' );
+ t.end();
+});
+
+tape( 'feature detection result is a boolean', function test( t ) {
+ t.strictEqual( typeof detect(), 'boolean', 'returns expected value' );
+ t.end();
+});
+
+tape( 'if `Promise` is supported, detection result is `true`', function test( t ) {
+ var mocked;
+ var Mock;
+
+ if ( hasPromise ) {
+ t.strictEqual( detect(), true, 'returns expected value' );
+ } else {
+ t.strictEqual( detect(), false, 'returns expected value' );
+ }
+
+ Mock = createMock({
+ 'resolve': true,
+ 'reject': true
+ });
+ mocked = proxyquire( './../lib/main.js', {
+ './promise.js': Mock
+ });
+ t.strictEqual( mocked(), true, 'returns expected value' );
+ t.end();
+});
+
+tape( 'if `Promise` is not supported, detection result is `false`', function test( t ) {
+ var mocked;
+ var Mock;
+
+ if ( hasPromise ) {
+ t.strictEqual( detect(), true, 'returns expected value' );
+ } else {
+ t.strictEqual( detect(), false, 'returns expected value' );
+ }
+ mocked = proxyquire( './../lib/main.js', {
+ './promise.js': {}
+ });
+ t.strictEqual( mocked(), false, 'returns expected value' );
+
+ Mock = createMock({
+ 'reject': true
+ });
+ mocked = proxyquire( './../lib/main.js', {
+ './promise.js': Mock
+ });
+ t.strictEqual( mocked(), false, 'returns expected value' );
+
+ Mock = createMock({
+ 'resolve': true
+ });
+ mocked = proxyquire( './../lib/main.js', {
+ './promise.js': Mock
+ });
+ t.strictEqual( mocked(), false, 'returns expected value' );
+
+ t.end();
+});