'use strict'; /*jshint asi: true*/ var request = require('request') , fs = require('fs') , vm = require('vm') , path = require('path') , shim = require('../..') , jsdom = require('jsdom').jsdom , shimsdir = path.join(__dirname, '..', 'fixtures', 'shims') , entryFile = path.join(__dirname, '..', 'fixtures', 'entry-straight-export.js') var html = '' + '' + ' ' + ' Some empty page' + ' ' + ' ' + ' ' + '' function generateEntry(alias) { // just pass in exported shim in order to ensure it can be required return ('module.exports = require("' + alias + '");\n') } require('tap').on('end', function () { // fs.unlinkSync(file); fs.unlinkSync(entryFile); }) module.exports = function testLib(t, opts) { var baseUrl = opts.baseUrl , name = opts.name , shimConfig = opts.shimConfig , runTest = opts.test request( baseUrl + name, function(err, resp, body) { var file = path.join(shimsdir, name) , firstConfigKey = Object.keys(shimConfig)[0] , firstConfig = shimConfig[firstConfigKey] firstConfig.path = file; fs.writeFileSync(file, body, 'utf-8'); fs.writeFileSync(entryFile, generateEntry(firstConfigKey), 'utf-8'); shim(require('browserify')(), shimConfig) .require(require.resolve(entryFile), { expose: 'entry' }) .bundle(function (err, src) { fs.unlinkSync(file); if (err) { t.fail(err); return t.end() } var window = jsdom(html).createWindow() , context = vm.createContext(window) Object.keys(window).forEach(function (k) { context[k] = window[k] }) var require_ = vm.runInContext(src, context); runTest(t, require_('entry')); }); }); };