Blob Blame History Raw
'use strict';
var test = require('ava');
var fn = require('./');

test(function (t) {
	t.assert(fn('🐴') === 0x1F434);

	// borrowed from:
	// https://github.com/mathiasbynens/String.prototype.codePointAt/blob/075017413b4a99568d0bf290250c8b17ff5441be/tests/tests.js

	// String that starts with a BMP symbol
	t.assert(fn('abc\uD834\uDF06def', '') === 0x61);
	t.assert(fn('abc\uD834\uDF06def', '_') === 0x61);
	t.assert(fn('abc\uD834\uDF06def') === 0x61);
	t.assert(fn('abc\uD834\uDF06def', -Infinity) === undefined);
	t.assert(fn('abc\uD834\uDF06def', -1) === undefined);
	t.assert(fn('abc\uD834\uDF06def', -0) === 0x61);
	t.assert(fn('abc\uD834\uDF06def', 0) === 0x61);
	t.assert(fn('abc\uD834\uDF06def', 3) === 0x1D306);
	t.assert(fn('abc\uD834\uDF06def', 4) === 0xDF06);
	t.assert(fn('abc\uD834\uDF06def', 5) === 0x64);
	t.assert(fn('abc\uD834\uDF06def', 42) === undefined);
	t.assert(fn('abc\uD834\uDF06def', Infinity) === undefined);
	t.assert(fn('abc\uD834\uDF06def', Infinity) === undefined);
	t.assert(fn('abc\uD834\uDF06def', NaN) === 0x61);
	t.assert(fn('abc\uD834\uDF06def', false) === 0x61);
	t.assert(fn('abc\uD834\uDF06def', null) === 0x61);
	t.assert(fn('abc\uD834\uDF06def', undefined) === 0x61);

	// String that starts with an astral symbol
	t.assert(fn('\uD834\uDF06def', '') === 0x1D306);
	t.assert(fn('\uD834\uDF06def', '1') === 0xDF06);
	t.assert(fn('\uD834\uDF06def', '_') === 0x1D306);
	t.assert(fn('\uD834\uDF06def') === 0x1D306);
	t.assert(fn('\uD834\uDF06def', -1) === undefined);
	t.assert(fn('\uD834\uDF06def', -0) === 0x1D306);
	t.assert(fn('\uD834\uDF06def', 0) === 0x1D306);
	t.assert(fn('\uD834\uDF06def', 1) === 0xDF06);
	t.assert(fn('\uD834\uDF06def', 42) === undefined);
	t.assert(fn('\uD834\uDF06def', false) === 0x1D306);
	t.assert(fn('\uD834\uDF06def', null) === 0x1D306);
	t.assert(fn('\uD834\uDF06def', undefined) === 0x1D306);

	// Lone high surrogates
	t.assert(fn('\uD834abc', '') === 0xD834);
	t.assert(fn('\uD834abc', '_') === 0xD834);
	t.assert(fn('\uD834abc') === 0xD834);
	t.assert(fn('\uD834abc', -1) === undefined);
	t.assert(fn('\uD834abc', -0) === 0xD834);
	t.assert(fn('\uD834abc', 0) === 0xD834);
	t.assert(fn('\uD834abc', false) === 0xD834);
	t.assert(fn('\uD834abc', NaN) === 0xD834);
	t.assert(fn('\uD834abc', null) === 0xD834);
	t.assert(fn('\uD834abc', undefined) === 0xD834);

	// Lone low surrogates
	t.assert(fn('\uDF06abc', '') === 0xDF06);
	t.assert(fn('\uDF06abc', '_') === 0xDF06);
	t.assert(fn('\uDF06abc') === 0xDF06);
	t.assert(fn('\uDF06abc', -1) === undefined);
	t.assert(fn('\uDF06abc', -0) === 0xDF06);
	t.assert(fn('\uDF06abc', 0) === 0xDF06);
	t.assert(fn('\uDF06abc', false) === 0xDF06);
	t.assert(fn('\uDF06abc', NaN) === 0xDF06);
	t.assert(fn('\uDF06abc', null) === 0xDF06);
	t.assert(fn('\uDF06abc', undefined) === 0xDF06);

	t.end();
});