1'use strict'; 2const common = require('../../common'); 3const assert = require('assert'); 4 5// Testing api calls for string 6const test_string = require(`./build/${common.buildType}/test_string`); 7 8const empty = ''; 9assert.strictEqual(test_string.TestLatin1(empty), empty); 10assert.strictEqual(test_string.TestUtf8(empty), empty); 11assert.strictEqual(test_string.TestUtf16(empty), empty); 12assert.strictEqual(test_string.TestLatin1AutoLength(empty), empty); 13assert.strictEqual(test_string.TestUtf8AutoLength(empty), empty); 14assert.strictEqual(test_string.TestUtf16AutoLength(empty), empty); 15assert.strictEqual(test_string.TestLatin1External(empty), empty); 16assert.strictEqual(test_string.TestUtf16External(empty), empty); 17assert.strictEqual(test_string.TestLatin1ExternalAutoLength(empty), empty); 18assert.strictEqual(test_string.TestUtf16ExternalAutoLength(empty), empty); 19assert.strictEqual(test_string.Utf16Length(empty), 0); 20assert.strictEqual(test_string.Utf8Length(empty), 0); 21 22const str1 = 'hello world'; 23assert.strictEqual(test_string.TestLatin1(str1), str1); 24assert.strictEqual(test_string.TestUtf8(str1), str1); 25assert.strictEqual(test_string.TestUtf16(str1), str1); 26assert.strictEqual(test_string.TestLatin1AutoLength(str1), str1); 27assert.strictEqual(test_string.TestUtf8AutoLength(str1), str1); 28assert.strictEqual(test_string.TestUtf16AutoLength(str1), str1); 29assert.strictEqual(test_string.TestLatin1External(str1), str1); 30assert.strictEqual(test_string.TestUtf16External(str1), str1); 31assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str1), str1); 32assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str1), str1); 33assert.strictEqual(test_string.TestLatin1Insufficient(str1), str1.slice(0, 3)); 34assert.strictEqual(test_string.TestUtf8Insufficient(str1), str1.slice(0, 3)); 35assert.strictEqual(test_string.TestUtf16Insufficient(str1), str1.slice(0, 3)); 36assert.strictEqual(test_string.Utf16Length(str1), 11); 37assert.strictEqual(test_string.Utf8Length(str1), 11); 38 39const str2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 40assert.strictEqual(test_string.TestLatin1(str2), str2); 41assert.strictEqual(test_string.TestUtf8(str2), str2); 42assert.strictEqual(test_string.TestUtf16(str2), str2); 43assert.strictEqual(test_string.TestLatin1AutoLength(str2), str2); 44assert.strictEqual(test_string.TestUtf8AutoLength(str2), str2); 45assert.strictEqual(test_string.TestUtf16AutoLength(str2), str2); 46assert.strictEqual(test_string.TestLatin1External(str2), str2); 47assert.strictEqual(test_string.TestUtf16External(str2), str2); 48assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str2), str2); 49assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str2), str2); 50assert.strictEqual(test_string.TestLatin1Insufficient(str2), str2.slice(0, 3)); 51assert.strictEqual(test_string.TestUtf8Insufficient(str2), str2.slice(0, 3)); 52assert.strictEqual(test_string.TestUtf16Insufficient(str2), str2.slice(0, 3)); 53assert.strictEqual(test_string.Utf16Length(str2), 62); 54assert.strictEqual(test_string.Utf8Length(str2), 62); 55 56const str3 = '?!@#$%^&*()_+-=[]{}/.,<>\'"\\'; 57assert.strictEqual(test_string.TestLatin1(str3), str3); 58assert.strictEqual(test_string.TestUtf8(str3), str3); 59assert.strictEqual(test_string.TestUtf16(str3), str3); 60assert.strictEqual(test_string.TestLatin1AutoLength(str3), str3); 61assert.strictEqual(test_string.TestUtf8AutoLength(str3), str3); 62assert.strictEqual(test_string.TestUtf16AutoLength(str3), str3); 63assert.strictEqual(test_string.TestLatin1External(str3), str3); 64assert.strictEqual(test_string.TestUtf16External(str3), str3); 65assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str3), str3); 66assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str3), str3); 67assert.strictEqual(test_string.TestLatin1Insufficient(str3), str3.slice(0, 3)); 68assert.strictEqual(test_string.TestUtf8Insufficient(str3), str3.slice(0, 3)); 69assert.strictEqual(test_string.TestUtf16Insufficient(str3), str3.slice(0, 3)); 70assert.strictEqual(test_string.Utf16Length(str3), 27); 71assert.strictEqual(test_string.Utf8Length(str3), 27); 72 73const str4 = '¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿'; 74assert.strictEqual(test_string.TestLatin1(str4), str4); 75assert.strictEqual(test_string.TestUtf8(str4), str4); 76assert.strictEqual(test_string.TestUtf16(str4), str4); 77assert.strictEqual(test_string.TestLatin1AutoLength(str4), str4); 78assert.strictEqual(test_string.TestUtf8AutoLength(str4), str4); 79assert.strictEqual(test_string.TestUtf16AutoLength(str4), str4); 80assert.strictEqual(test_string.TestLatin1External(str4), str4); 81assert.strictEqual(test_string.TestUtf16External(str4), str4); 82assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str4), str4); 83assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str4), str4); 84assert.strictEqual(test_string.TestLatin1Insufficient(str4), str4.slice(0, 3)); 85assert.strictEqual(test_string.TestUtf8Insufficient(str4), str4.slice(0, 1)); 86assert.strictEqual(test_string.TestUtf16Insufficient(str4), str4.slice(0, 3)); 87assert.strictEqual(test_string.Utf16Length(str4), 31); 88assert.strictEqual(test_string.Utf8Length(str4), 62); 89 90const str5 = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ'; 91assert.strictEqual(test_string.TestLatin1(str5), str5); 92assert.strictEqual(test_string.TestUtf8(str5), str5); 93assert.strictEqual(test_string.TestUtf16(str5), str5); 94assert.strictEqual(test_string.TestLatin1AutoLength(str5), str5); 95assert.strictEqual(test_string.TestUtf8AutoLength(str5), str5); 96assert.strictEqual(test_string.TestUtf16AutoLength(str5), str5); 97assert.strictEqual(test_string.TestLatin1External(str5), str5); 98assert.strictEqual(test_string.TestUtf16External(str5), str5); 99assert.strictEqual(test_string.TestLatin1ExternalAutoLength(str5), str5); 100assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str5), str5); 101assert.strictEqual(test_string.TestLatin1Insufficient(str5), str5.slice(0, 3)); 102assert.strictEqual(test_string.TestUtf8Insufficient(str5), str5.slice(0, 1)); 103assert.strictEqual(test_string.TestUtf16Insufficient(str5), str5.slice(0, 3)); 104assert.strictEqual(test_string.Utf16Length(str5), 63); 105assert.strictEqual(test_string.Utf8Length(str5), 126); 106 107const str6 = '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}'; 108assert.strictEqual(test_string.TestUtf8(str6), str6); 109assert.strictEqual(test_string.TestUtf16(str6), str6); 110assert.strictEqual(test_string.TestUtf8AutoLength(str6), str6); 111assert.strictEqual(test_string.TestUtf16AutoLength(str6), str6); 112assert.strictEqual(test_string.TestUtf16External(str6), str6); 113assert.strictEqual(test_string.TestUtf16ExternalAutoLength(str6), str6); 114assert.strictEqual(test_string.TestUtf8Insufficient(str6), str6.slice(0, 1)); 115assert.strictEqual(test_string.TestUtf16Insufficient(str6), str6.slice(0, 3)); 116assert.strictEqual(test_string.Utf16Length(str6), 5); 117assert.strictEqual(test_string.Utf8Length(str6), 14); 118 119assert.throws(() => { 120 test_string.TestLargeUtf8(); 121}, /^Error: Invalid argument$/); 122 123assert.throws(() => { 124 test_string.TestLargeLatin1(); 125}, /^Error: Invalid argument$/); 126 127assert.throws(() => { 128 test_string.TestLargeUtf16(); 129}, /^Error: Invalid argument$/); 130 131test_string.TestMemoryCorruption(' '.repeat(64 * 1024)); 132