text: 'use strict';
  const assert = require('assert');
  const path = require('path');
  const ref = require('@coderwxl/ref-napi');
  const ffi = require('../');
  const fs = require('fs-extra');
  const DynamicLibrary = ffi.DynamicLibrary;
  
  describe('DynamicLibrary', function () {
    it('should be a function', function () {
      assert.strictEqual('function', typeof DynamicLibrary);
    });
  
    it('should return a "DynamicLibrary" instance when invoked', function () {
      const lib = process.platform == 'win32' ? 'msvcrt' : 'libc';
      const handle = DynamicLibrary(lib + ffi.LIB_EXT);
      assert(handle instanceof DynamicLibrary);
    });
  
    describe('get()', function () {
      it('should return a "pointer" Buffer to a symbol', function () {
        const lib = process.platform == 'win32' ? 'msvcrt' : 'libc';
        const handle = DynamicLibrary(lib + ffi.LIB_EXT);
        const symbol = handle.get('free');
        assert(ref.isAddress(symbol));
        assert.strictEqual(0, symbol.length);
      });
  
      it('should set the "name" property to the name of the symbol', function () {
        const lib = process.platform == 'win32' ? 'msvcrt' : 'libc';
        const handle = DynamicLibrary(lib + ffi.LIB_EXT);
        const name = 'free';
        const symbol = handle.get(name);
        assert.strictEqual(name, symbol.name);
      });
  
      it('should load libraries when pathname contains unicode characters', function() {
        // Directory and file names are "I can't read this" and "Or this"
        // translated into Simplified Chinese by Google Translate
        let lib, t;
        for (t of ['Debug', 'Release']) {
          lib = path.join(__dirname, 'build', t, 'ffi_tests.node'); // .node file is just a dynamic library
          if (fs.existsSync(lib)) break;
        }
        const toDir = path.join(__dirname, 'build', t, String.fromCharCode(0x6211, 0x65e0, 0x6cd5, 0x9605, 0x8bfb));
        const toLib = path.join(toDir, String.fromCharCode(0x6216, 0x8005, 0x8fd9) + '.node');
        fs.mkdirsSync(toDir);
        fs.copySync(lib, toLib);
        const handle = DynamicLibrary(toLib);
        const name = 'ExportedFunction';
        const symbol = handle.get(name);
        assert.strictEqual(name, symbol.name);
      });
    });
  });
  