You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/node_modules/derequire/test/test.js

84 lines
4.1 KiB
JavaScript

var should = require('chai').should();
var derequire = require('../');
var fs = require("fs");
var crypto = require('crypto');
function hash(data){
return crypto.createHash('sha512').update(data).digest('base64');
}
var compare = hash(fs.readFileSync('./test/pouchdb.dereq.js', {encoding: 'utf8'}));
var compareCjsSmartass = fs.readFileSync('./test/cjs-smartass.dereq.js', {encoding: 'utf8'});
var compareCjslazy = fs.readFileSync('./test/cjs-lazy.js', {encoding: 'utf8'});
describe('derequire', function(){
it('should work', function(){
var exampleText = "var x=function(require,module,exports){var process=require(\"__browserify_process\");var requireText = \"require\";}";
derequire(exampleText).should.equal("var x=function(_dereq_,module,exports){var process=_dereq_(\"__browserify_process\");var requireText = \"require\";}");
});
it('should only replace arguments and calls',function(){
var exampleText = "function x(require,module,exports){var process=require(\"__browserify_process\");var requireText = {}; requireText.require = \"require\";(function(){var require = 'blah';}())}";
derequire(exampleText).should.equal("function x(_dereq_,module,exports){var process=_dereq_(\"__browserify_process\");var requireText = {}; requireText.require = \"require\";(function(){var require = 'blah';}())}");
});
it('should handle top level return statments', function(){
var exampleText = 'return (function(require){return require();}(function(){return "sentinel";}));';
derequire(exampleText).should.equal('return (function(_dereq_){return _dereq_();}(function(){return "sentinel";}));');
});
it('should work with a comment on the end', function(){
var exampleText = 'var x=function(require,module,exports){var process=require("__browserify_process");var requireText = "require";}//lala';
derequire(exampleText).should.equal('var x=function(_dereq_,module,exports){var process=_dereq_("__browserify_process");var requireText = "require";}//lala');
});
it('should work with whitespace inside require statement', function(){
var exampleText = 'var x=function(require,module,exports){var process=require( "__browserify_process" )}';
derequire(exampleText).should.equal('var x=function(_dereq_,module,exports){var process=_dereq_( "__browserify_process" )}');
});
it('should work with single quoted requires', function(){
var exampleText = 'var x=function(require,module,exports){var process=require(\'__browserify_process\')}';
derequire(exampleText).should.equal('var x=function(_dereq_,module,exports){var process=_dereq_(\'__browserify_process\')}');
});
it('should throw an error if you try to change things of different sizes', function(){
should.throw(function(){
derequire('require("x")', 'lalalalla', 'la');
});
});
it("should return notthe code back if it can't parse it", function(){
derequire("/*").should.equal("/*");
});
it("should return the code back if it can't parse it and it has a require", function(){
derequire("/*require('").should.equal("/*require('");
});
it('should work on something big', function(done){
fs.readFile('./test/pouchdb.js', {encoding:'utf8'}, function(err, data){
if(err){
return done(err);
}
var transformed = derequire(data);
hash(transformed).should.equal(compare);
done();
});
});
it('should not fail on attribute lookups', function(){
var txt = 'var x=function(require,module,exports){'
+ 'var W=require("stream").Writable;'
+ '}'
;
var expected = 'var x=function(_dereq_,module,exports){'
+ 'var W=_dereq_("stream").Writable;'
+ '}'
;
derequire(txt).should.equal(expected);
});
it('should fix cjs-smartassery', function (done){
fs.readFile('./test/cjs-smartass.js', {encoding:'utf8'}, function(err, data){
if(err){
return done(err);
}
var transformed = derequire(data);
transformed.should.equal(compareCjsSmartass);
done();
});
});
it('should fix not fix cjs-lazy', function (){
derequire(compareCjslazy).should.equal(compareCjslazy);
});
});