mirror of https://github.com/nodejs/node.git
92 lines
3.3 KiB
JavaScript
92 lines
3.3 KiB
JavaScript
'use strict';
|
|
const common = require('../../common');
|
|
const assert = require('assert');
|
|
|
|
// Testing api calls for string
|
|
const test_string = require(`./build/${common.buildType}/test_string`);
|
|
// The insufficient buffer test case allocates a buffer of size 4, including
|
|
// the null terminator.
|
|
const kInsufficientIdx = 3;
|
|
|
|
const asciiCases = [
|
|
'',
|
|
'hello world',
|
|
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
|
'?!@#$%^&*()_+-=[]{}/.,<>\'"\\',
|
|
];
|
|
|
|
const latin1Cases = [
|
|
{
|
|
str: '¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿',
|
|
utf8Length: 62,
|
|
utf8InsufficientIdx: 1,
|
|
},
|
|
{
|
|
str: 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ',
|
|
utf8Length: 126,
|
|
utf8InsufficientIdx: 1,
|
|
},
|
|
];
|
|
|
|
const unicodeCases = [
|
|
{
|
|
str: '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}',
|
|
utf8Length: 14,
|
|
utf8InsufficientIdx: 1,
|
|
},
|
|
];
|
|
|
|
function testLatin1Cases(str) {
|
|
assert.strictEqual(test_string.TestLatin1(str), str);
|
|
assert.strictEqual(test_string.TestLatin1AutoLength(str), str);
|
|
assert.strictEqual(test_string.TestLatin1External(str), str);
|
|
assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyLatin1(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyLatin1AutoLength(str), str);
|
|
assert.strictEqual(test_string.Latin1Length(str), str.length);
|
|
|
|
if (str !== '') {
|
|
assert.strictEqual(test_string.TestLatin1Insufficient(str), str.slice(0, kInsufficientIdx));
|
|
}
|
|
}
|
|
|
|
function testUnicodeCases(str, utf8Length, utf8InsufficientIdx) {
|
|
assert.strictEqual(test_string.TestUtf8(str), str);
|
|
assert.strictEqual(test_string.TestUtf16(str), str);
|
|
assert.strictEqual(test_string.TestUtf8AutoLength(str), str);
|
|
assert.strictEqual(test_string.TestUtf16AutoLength(str), str);
|
|
assert.strictEqual(test_string.TestUtf16External(str), str);
|
|
assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyUtf8(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyUtf8AutoLength(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyUtf16(str), str);
|
|
assert.strictEqual(test_string.TestPropertyKeyUtf16AutoLength(str), str);
|
|
assert.strictEqual(test_string.Utf8Length(str), utf8Length);
|
|
assert.strictEqual(test_string.Utf16Length(str), str.length);
|
|
|
|
if (str !== '') {
|
|
assert.strictEqual(test_string.TestUtf8Insufficient(str), str.slice(0, utf8InsufficientIdx));
|
|
assert.strictEqual(test_string.TestUtf16Insufficient(str), str.slice(0, kInsufficientIdx));
|
|
}
|
|
}
|
|
|
|
asciiCases.forEach(testLatin1Cases);
|
|
asciiCases.forEach((str) => testUnicodeCases(str, str.length, kInsufficientIdx));
|
|
latin1Cases.forEach((it) => testLatin1Cases(it.str));
|
|
latin1Cases.forEach((it) => testUnicodeCases(it.str, it.utf8Length, it.utf8InsufficientIdx));
|
|
unicodeCases.forEach((it) => testUnicodeCases(it.str, it.utf8Length, it.utf8InsufficientIdx));
|
|
|
|
assert.throws(() => {
|
|
test_string.TestLargeUtf8();
|
|
}, /^Error: Invalid argument$/);
|
|
|
|
assert.throws(() => {
|
|
test_string.TestLargeLatin1();
|
|
}, /^Error: Invalid argument$/);
|
|
|
|
assert.throws(() => {
|
|
test_string.TestLargeUtf16();
|
|
}, /^Error: Invalid argument$/);
|
|
|
|
test_string.TestMemoryCorruption(' '.repeat(64 * 1024));
|