| 5 | module.exports = require('./common').runTest(test); |
| 6 | |
| 7 | function test (binding) { |
| 8 | const expected = '123456789'; |
| 9 | |
| 10 | assert.throws(binding.name.nullStringShouldThrow, { |
| 11 | name: 'Error', |
| 12 | message: 'Error in native callback' |
| 13 | }); |
| 14 | assert.ok(binding.name.checkString(expected, 'utf8')); |
| 15 | assert.ok(binding.name.checkString(expected, 'utf16')); |
| 16 | assert.ok(binding.name.checkString(expected.substr(0, 3), 'utf8', 3)); |
| 17 | assert.ok(binding.name.checkString(expected.substr(0, 3), 'utf16', 3)); |
| 18 | |
| 19 | const str1 = binding.name.createString('utf8'); |
| 20 | assert.strictEqual(str1, expected); |
| 21 | assert.ok(binding.name.checkString(str1, 'utf8')); |
| 22 | assert.ok(binding.name.checkString(str1, 'utf16')); |
| 23 | |
| 24 | const substr1 = binding.name.createString('utf8', 3); |
| 25 | assert.strictEqual(substr1, expected.substr(0, 3)); |
| 26 | assert.ok(binding.name.checkString(substr1, 'utf8', 3)); |
| 27 | assert.ok(binding.name.checkString(substr1, 'utf16', 3)); |
| 28 | |
| 29 | const str2 = binding.name.createString('utf16'); |
| 30 | assert.strictEqual(str1, expected); |
| 31 | assert.ok(binding.name.checkString(str2, 'utf8')); |
| 32 | assert.ok(binding.name.checkString(str2, 'utf16')); |
| 33 | |
| 34 | const substr2 = binding.name.createString('utf16', 3); |
| 35 | assert.strictEqual(substr1, expected.substr(0, 3)); |
| 36 | assert.ok(binding.name.checkString(substr2, 'utf8', 3)); |
| 37 | assert.ok(binding.name.checkString(substr2, 'utf16', 3)); |
| 38 | |
| 39 | // eslint-disable-next-line symbol-description |
| 40 | assert.ok(binding.name.checkSymbol(Symbol())); |
| 41 | assert.ok(binding.name.checkSymbol(Symbol('test'))); |
| 42 | |
| 43 | const sym1 = binding.name.createSymbol(); |
| 44 | assert.strictEqual(typeof sym1, 'symbol'); |
| 45 | assert.ok(binding.name.checkSymbol(sym1)); |
| 46 | |
| 47 | const sym2 = binding.name.createSymbol('test'); |
| 48 | assert.strictEqual(typeof sym2, 'symbol'); |
| 49 | assert.ok(binding.name.checkSymbol(sym1)); |
| 50 | |
| 51 | // Check for off-by-one errors which might only appear for strings of certain sizes, |
| 52 | // due to how std::string increments its capacity in chunks. |
| 53 | const longString = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; |
| 54 | for (let i = 10; i <= longString.length; i++) { |
| 55 | const str = longString.substr(0, i); |
| 56 | assert.strictEqual(binding.name.echoString(str, 'utf8'), str); |
| 57 | assert.strictEqual(binding.name.echoString(str, 'utf16'), str); |
| 58 | } |
| 59 | |
| 60 | assert.strictEqual(binding.name.createStringFromStringView(), 'hello1'); |
| 61 | const symFromStringView = binding.name.createSymbolFromStringView(); |
| 62 | assert.strictEqual(typeof symFromStringView, 'symbol'); |
| 63 | assert.strictEqual(symFromStringView.description, 'hello2'); |
| 64 | } |