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.Utf16Length(empty), 0); 13assert.strictEqual(test_string.Utf8Length(empty), 0); 14 15const str1 = 'hello world'; 16assert.strictEqual(test_string.TestLatin1(str1), str1); 17assert.strictEqual(test_string.TestUtf8(str1), str1); 18assert.strictEqual(test_string.TestUtf16(str1), str1); 19assert.strictEqual(test_string.TestLatin1Insufficient(str1), str1.slice(0, 3)); 20assert.strictEqual(test_string.TestUtf8Insufficient(str1), str1.slice(0, 3)); 21assert.strictEqual(test_string.TestUtf16Insufficient(str1), str1.slice(0, 3)); 22assert.strictEqual(test_string.Utf16Length(str1), 11); 23assert.strictEqual(test_string.Utf8Length(str1), 11); 24 25const str2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 26assert.strictEqual(test_string.TestLatin1(str2), str2); 27assert.strictEqual(test_string.TestUtf8(str2), str2); 28assert.strictEqual(test_string.TestUtf16(str2), str2); 29assert.strictEqual(test_string.TestLatin1Insufficient(str2), str2.slice(0, 3)); 30assert.strictEqual(test_string.TestUtf8Insufficient(str2), str2.slice(0, 3)); 31assert.strictEqual(test_string.TestUtf16Insufficient(str2), str2.slice(0, 3)); 32assert.strictEqual(test_string.Utf16Length(str2), 62); 33assert.strictEqual(test_string.Utf8Length(str2), 62); 34 35const str3 = '?!@#$%^&*()_+-=[]{}/.,<>\'"\\'; 36assert.strictEqual(test_string.TestLatin1(str3), str3); 37assert.strictEqual(test_string.TestUtf8(str3), str3); 38assert.strictEqual(test_string.TestUtf16(str3), str3); 39assert.strictEqual(test_string.TestLatin1Insufficient(str3), str3.slice(0, 3)); 40assert.strictEqual(test_string.TestUtf8Insufficient(str3), str3.slice(0, 3)); 41assert.strictEqual(test_string.TestUtf16Insufficient(str3), str3.slice(0, 3)); 42assert.strictEqual(test_string.Utf16Length(str3), 27); 43assert.strictEqual(test_string.Utf8Length(str3), 27); 44 45const str4 = '¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿'; 46assert.strictEqual(test_string.TestLatin1(str4), str4); 47assert.strictEqual(test_string.TestUtf8(str4), str4); 48assert.strictEqual(test_string.TestUtf16(str4), str4); 49assert.strictEqual(test_string.TestLatin1Insufficient(str4), str4.slice(0, 3)); 50assert.strictEqual(test_string.TestUtf8Insufficient(str4), str4.slice(0, 1)); 51assert.strictEqual(test_string.TestUtf16Insufficient(str4), str4.slice(0, 3)); 52assert.strictEqual(test_string.Utf16Length(str4), 31); 53assert.strictEqual(test_string.Utf8Length(str4), 62); 54 55const str5 = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ'; 56assert.strictEqual(test_string.TestLatin1(str5), str5); 57assert.strictEqual(test_string.TestUtf8(str5), str5); 58assert.strictEqual(test_string.TestUtf16(str5), str5); 59assert.strictEqual(test_string.TestLatin1Insufficient(str5), str5.slice(0, 3)); 60assert.strictEqual(test_string.TestUtf8Insufficient(str5), str5.slice(0, 1)); 61assert.strictEqual(test_string.TestUtf16Insufficient(str5), str5.slice(0, 3)); 62assert.strictEqual(test_string.Utf16Length(str5), 63); 63assert.strictEqual(test_string.Utf8Length(str5), 126); 64 65const str6 = '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}'; 66assert.strictEqual(test_string.TestUtf8(str6), str6); 67assert.strictEqual(test_string.TestUtf16(str6), str6); 68assert.strictEqual(test_string.TestUtf8Insufficient(str6), str6.slice(0, 1)); 69assert.strictEqual(test_string.TestUtf16Insufficient(str6), str6.slice(0, 3)); 70assert.strictEqual(test_string.Utf16Length(str6), 5); 71assert.strictEqual(test_string.Utf8Length(str6), 14); 72 73assert.throws(() => { 74 test_string.TestLargeUtf8(); 75}, /^Error: Invalid argument$/); 76 77assert.throws(() => { 78 test_string.TestLargeLatin1(); 79}, /^Error: Invalid argument$/); 80 81assert.throws(() => { 82 test_string.TestLargeUtf16(); 83}, /^Error: Invalid argument$/); 84 85test_string.TestMemoryCorruption(' '.repeat(64 * 1024)); 86