Skip to content

Commit

Permalink
chore: Rework test patterns (#39)
Browse files Browse the repository at this point in the history
phated authored Oct 13, 2022
1 parent 504b073 commit 34b2282
Showing 2 changed files with 269 additions and 298 deletions.
339 changes: 166 additions & 173 deletions test/add.js
Original file line number Diff line number Diff line change
@@ -31,16 +31,16 @@ function makeSourcemap() {
};
}

describe('add', function () {
function makeFile() {
return new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: Buffer.from(sourceContent),
});
}
function makeFile(contents) {
return new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: contents,
});
}

describe('add', function () {
it('errors if file argument is undefined', function (done) {
sourcemaps.add(undefined, function (err) {
expect(
@@ -72,8 +72,7 @@ describe('add', function () {
});

it('errors if file argument is a Vinyl object with contents from streamx.Readable', function (done) {
var file = makeFile();
file.contents = streamx.Readable.from([]);
var file = makeFile(streamx.Readable.from([]));
sourcemaps.add(file, function (err) {
expect(
err instanceof Error &&
@@ -84,8 +83,7 @@ describe('add', function () {
});

it('errors if file argument is a Vinyl object with contents from stream.Readable', function (done) {
var file = makeFile();
file.contents = stream.Readable.from([]);
var file = makeFile(stream.Readable.from([]));
sourcemaps.add(file, function (err) {
expect(
err instanceof Error &&
@@ -94,18 +92,19 @@ describe('add', function () {
done();
});
});
});

describe('add (buffered contents)', function () {
function makeFile() {
return new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: Buffer.from(sourceContent),
it('calls back with the untouched file if file contents are null', function (done) {
var file = makeFile(null);
sourcemaps.add(file, function (err, outFile) {
expect(err).toBeFalsy();
expect(file).toBeTruthy();
expect(outFile).toEqual(file);
done(err);
});
}
});
});

describe('add (buffer contents)', function () {
function makeFileWithInlineSourceMap() {
var inline = convert.fromObject(makeSourcemap()).toComment();
return new File({
@@ -120,7 +119,7 @@ describe('add (buffered contents)', function () {
}

it('does not error if file argument is a Vinyl object with Buffer contents', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.add(file, function (err) {
expect(err).toBeFalsy();
done();
@@ -136,241 +135,233 @@ describe('add (buffered contents)', function () {
sourcesContent: ['testContent'],
};

var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.sourceMap = sourceMap;
sourcemaps.add(file, function (err, data) {
expect(data).toBeTruthy();
expect(File.isVinyl(data)).toEqual(true);
expect(data.sourceMap).toBe(sourceMap);
expect(data).toBe(file);
done(err);
});
});

it('calls back with the untouched file if file contents are null', function (done) {
var file = makeFile();
file.contents = null;
sourcemaps.add(file, function (err, outFile) {
expect(err).toBeFalsy();
expect(file).toBeTruthy();
expect(outFile).toEqual(file);
expect(outFile).toBeTruthy();
expect(File.isVinyl(outFile)).toEqual(true);
expect(outFile.sourceMap).toBe(sourceMap);
expect(outFile).toBe(file);
done(err);
});
});

it('adds an empty sourceMap if none are found', function (done) {
sourcemaps.add(makeFile(), function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources[0]).toEqual('helloworld.js');
expect(data.sourceMap.sourcesContent[0]).toEqual(sourceContent);
expect(data.sourceMap.names).toEqual([]);
expect(data.sourceMap.mappings).toEqual('');
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources[0]).toEqual('helloworld.js');
expect(outFile.sourceMap.sourcesContent[0]).toEqual(sourceContent);
expect(outFile.sourceMap.names).toEqual([]);
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('imports an existing inline sourcemap', function (done) {
sourcemaps.add(makeFileWithInlineSourceMap(), function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['test1.js', 'test2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
var file = makeFileWithInlineSourceMap();
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['test1.js', 'test2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'console.log("line 1.1");\nconsole.log("line 1.2");\n',
'console.log("line 2.1");\nconsole.log("line 2.2");',
]);
expect(data.sourceMap.mappings).toEqual(
expect(outFile.sourceMap.mappings).toEqual(
'AAAAA,QAAAC,IAAA,YACAD,QAAAC,IAAA,YCDAD,QAAAC,IAAA,YACAD,QAAAC,IAAA'
);
done(err);
});
});

it('removes an imported inline sourcemap', function (done) {
sourcemaps.add(makeFileWithInlineSourceMap(), function (err, data) {
expect(/sourceMappingURL/.test(data.contents.toString())).toEqual(false);
var file = makeFileWithInlineSourceMap();
sourcemaps.add(file, function (err, outFile) {
expect(outFile.contents.toString()).not.toMatch(/sourceMappingURL/);
done(err);
});
});

it('loads external sourcemap file from //# comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld2.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld2.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['helloworld2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['helloworld2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'source content from source map',
]);
expect(data.sourceMap.mappings).toEqual('');
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('removes an imported sourcemap file //# comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld2.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld2.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(/sourceMappingURL/.test(data.contents.toString())).toEqual(false);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.contents.toString()).not.toMatch(/sourceMappingURL/);
done(err);
});
});

it('loads external sourcemap file from //@ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//@ sourceMappingURL=helloworld2.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//@ sourceMappingURL=helloworld2.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['helloworld2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['helloworld2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'source content from source map',
]);
expect(data.sourceMap.mappings).toEqual('');
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('removes an imported sourcemap file //@ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//@ sourceMappingURL=helloworld2.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//@ sourceMappingURL=helloworld2.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(/sourceMappingURL/.test(data.contents.toString())).toEqual(false);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.contents.toString()).not.toMatch(/sourceMappingURL/);
done(err);
});
});

it('loads external sourcemap file from /*# */ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n/*# sourceMappingURL=helloworld2.js.map */'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '/*# sourceMappingURL=helloworld2.js.map */')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['helloworld2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['helloworld2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'source content from source map',
]);
expect(data.sourceMap.mappings).toEqual('');
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('removes an imported sourcemap file /*# */ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n/*# sourceMappingURL=helloworld2.js.map */'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '/*# sourceMappingURL=helloworld2.js.map */')
);
sourcemaps.add(file, function (err, data) {
expect(/sourceMappingURL/.test(data.contents.toString())).toEqual(false);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.contents.toString()).not.toMatch(/sourceMappingURL/);
done(err);
});
});

it('loads external sourcemap file from /*@ */ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n/*@ sourceMappingURL=helloworld2.js.map */'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '/*@ sourceMappingURL=helloworld2.js.map */')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['helloworld2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['helloworld2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'source content from source map',
]);
expect(data.sourceMap.mappings).toEqual('');
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('removes an imported sourcemap file /*@ */ comment', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n/*@ sourceMappingURL=helloworld2.js.map */'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '/*@ sourceMappingURL=helloworld2.js.map */')
);
sourcemaps.add(file, function (err, data) {
expect(/sourceMappingURL/.test(data.contents.toString())).toEqual(false);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.contents.toString()).not.toMatch(/sourceMappingURL/);
done(err);
});
});

it('loads external sourcemap by filename if no source mapping comment', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.path = file.path.replace('helloworld.js', 'helloworld2.js');
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.version).toEqual(3);
expect(data.sourceMap.sources).toEqual(['helloworld2.js']);
expect(data.sourceMap.sourcesContent).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.version).toEqual(3);
expect(outFile.sourceMap.sources).toEqual(['helloworld2.js']);
expect(outFile.sourceMap.sourcesContent).toEqual([
'source content from source map',
]);
expect(data.sourceMap.mappings).toEqual('');
expect(outFile.sourceMap.mappings).toEqual('');
done(err);
});
});

it('loads sourcesContent if missing', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld3.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld3.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sourcesContent).toEqual([
file.contents.toString(),
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sourcesContent).toEqual([
content,
"console.log('test1');\n",
]);
done(err);
});
});

it('does not error when source file for sourcesContent not found', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld4.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld4.js.map')
);
sourcemaps.add(file, function (err, data) {
sourcemaps.add(file, function (err, outFile) {
expect(err).toBeFalsy();
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sources).toEqual(['helloworld.js', 'missingfile']);
expect(data.sourceMap.sourcesContent).toEqual([
file.contents.toString(),
null,
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sources).toEqual([
'helloworld.js',
'missingfile',
]);
expect(outFile.sourceMap.sourcesContent).toEqual([content, null]);
done(err);
});
});

it('uses unix style paths in sourcemap', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.base = file.cwd;
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.file).toEqual('assets/helloworld.js');
expect(data.sourceMap.sources).toEqual(['assets/helloworld.js']);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.file).toEqual('assets/helloworld.js');
expect(outFile.sourceMap.sources).toEqual(['assets/helloworld.js']);
done(err);
});
});

it('normalizes Windows paths in sources to unix paths', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld8.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld8.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sources).toEqual([
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sources).toEqual([
'../helloworld.js',
'../test1.js',
]);
@@ -379,51 +370,53 @@ describe('add (buffered contents)', function () {
});

it('sets file.relative as file property in sourcemap', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.stem = 'brandnew';
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.file).toEqual('brandnew.js');
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.file).toEqual('brandnew.js');
done(err);
});
});

it('normalizes Windows paths in file.relative before using in sourcemap', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.stem = 'assets\\\\brandnew';
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.file).toEqual('assets/brandnew.js');
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.file).toEqual('assets/brandnew.js');
done(err);
});
});

it('uses relative sourceRoot to resolve sources', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld5.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld5.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sourceRoot).toEqual('test');
expect(data.sourceMap.sourcesContent).toEqual([
file.contents.toString(),
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sourceRoot).toEqual('test');
expect(outFile.sourceMap.sourcesContent).toEqual([
content,
"console.log('test1');\n",
]);
done(err);
});
});

it('uses absolute sourceRoot to resolve sources', function (done) {
var file = makeFile();
var map = convert.fromObject(makeSourcemap());
delete map.sourcemap.sourcesContent;
var inline = map.toComment();
file.contents = Buffer.from(sourceContent + '\n' + inline);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sourceRoot).toEqual(path.join(__dirname, 'assets'));
expect(data.sourceMap.sourcesContent).toEqual([
var content = sourceContent + '\n';
var file = makeFile(Buffer.from(content + inline));
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sourceRoot).toEqual(
path.join(__dirname, 'assets')
);
expect(outFile.sourceMap.sourcesContent).toEqual([
"console.log('test1');\n",
"console.log('test2');\n",
]);
@@ -432,14 +425,14 @@ describe('add (buffered contents)', function () {
});

it('does not load sourcesContent when sourceRoot is a url', function (done) {
var file = makeFile();
file.contents = Buffer.from(
sourceContent + '\n//# sourceMappingURL=helloworld6.js.map'
var content = sourceContent + '\n';
var file = makeFile(
Buffer.from(content + '//# sourceMappingURL=helloworld6.js.map')
);
sourcemaps.add(file, function (err, data) {
expect(data.sourceMap).toBeTruthy();
expect(data.sourceMap.sourceRoot).toEqual('http://example.com/');
expect(data.sourceMap.sourcesContent).toEqual([null, null]);
sourcemaps.add(file, function (err, outFile) {
expect(outFile.sourceMap).toBeTruthy();
expect(outFile.sourceMap.sourceRoot).toEqual('http://example.com/');
expect(outFile.sourceMap.sourcesContent).toEqual([null, null]);
done(err);
});
});
228 changes: 103 additions & 125 deletions test/write.js
Original file line number Diff line number Diff line change
@@ -25,6 +25,28 @@ function makeSourceMap() {
};
}

function makeFile(contents) {
var file = new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: contents,
sourceMap: makeSourceMap(),
});
return file;
}

function makeNestedFile(contents) {
var file = new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'dir1', 'dir2', 'helloworld.js'),
contents: contents,
sourceMap: makeSourceMap(),
});
return file;
}

function base64JSON(object) {
return (
'data:application/json;charset=utf-8;base64,' +
@@ -33,17 +55,6 @@ function base64JSON(object) {
}

describe('write', function () {
function makeFile() {
var file = new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: Buffer.from(sourceContent),
sourceMap: makeSourceMap(),
});
return file;
}

it('errors if file argument is undefined', function (done) {
sourcemaps.write(undefined, function (err) {
expect(
@@ -75,8 +86,7 @@ describe('write', function () {
});

it('errors if file argument is a Vinyl object with contents from streamx.Readable', function (done) {
var file = makeFile();
file.contents = streamx.Readable.from([]);
var file = makeFile(streamx.Readable.from([]));
sourcemaps.write(file, function (err) {
expect(
err instanceof Error &&
@@ -87,8 +97,7 @@ describe('write', function () {
});

it('errors if file argument is a Vinyl object with contents from stream.Readable', function (done) {
var file = makeFile();
file.contents = stream.Readable.from([]);
var file = makeFile(stream.Readable.from([]));
sourcemaps.write(file, function (err) {
expect(
err instanceof Error &&
@@ -98,40 +107,60 @@ describe('write', function () {
});
});

it('calls back with the untouched file if file contents are null', function (done) {
var file = makeFile(null);
sourcemaps.write(file, function (err, outFile) {
expect(err).toBeFalsy();
expect(file).toBeTruthy();
expect(outFile).toEqual(file);
done(err);
});
});
});

describe('write (buffer contents)', function () {
it('does not error if file argument is a Vinyl object with Buffer contents', function (done) {
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, function (err) {
expect(err).toBeFalsy();
done();
});
});

it('accepts null destPath argument', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, null, function (err) {
expect(err).toBeFalsy();
done(err);
});
});

it('accepts undefined destPath argument', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, undefined, function (err) {
expect(err).toBeFalsy();
done(err);
});
});

it('accepts string destPath argument', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, 'something', function (err) {
expect(err).toBeFalsy();
done(err);
});
});

it('juggles callback if no destPath argument', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, function (err) {
expect(err).toBeFalsy();
done(err);
});
});

it('calls back with the untouched file if sourceMap property does not exist', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
delete file.sourceMap;
sourcemaps.write(file, function (err, outFile) {
expect(err).toBeFalsy();
@@ -141,160 +170,109 @@ describe('write', function () {
});
});

it('calls back with the untouched file if file contents are null', function (done) {
var file = makeFile();
file.contents = null;
sourcemaps.write(file, function (err, outFile) {
expect(err).toBeFalsy();
expect(file).toBeTruthy();
expect(outFile).toEqual(file);
done(err);
});
});
});

describe('write (buffered contents)', function () {
function makeFile() {
var file = new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'helloworld.js'),
contents: Buffer.from(sourceContent),
sourceMap: makeSourceMap(),
});
return file;
}

function makeNestedFile() {
var file = new File({
cwd: __dirname,
base: path.join(__dirname, 'assets'),
path: path.join(__dirname, 'assets', 'dir1', 'dir2', 'helloworld.js'),
contents: Buffer.from(sourceContent),
sourceMap: makeSourceMap(),
});
return file;
}

it('does not error if file argument is a Vinyl object with Buffer contents', function (done) {
var file = makeFile();
sourcemaps.write(file, function (err) {
expect(err).toBeFalsy();
done();
});
});

it('writes an inline sourcemap when no destPath', function (done) {
var file = makeFile();
sourcemaps.write(file, function (err, updatedFile, sourceMapFile) {
expect(updatedFile).toBeTruthy();
it('appends an inline sourcemap when no destPath', function (done) {
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, function (err, outFile, sourceMapFile) {
expect(outFile).toBeTruthy();
expect(sourceMapFile).toBeFalsy();
expect(File.isVinyl(updatedFile)).toEqual(true);
expect(updatedFile).toEqual(file);
expect(updatedFile.contents.toString()).toEqual(
expect(File.isVinyl(outFile)).toEqual(true);
expect(outFile).toEqual(file);
expect(outFile.contents.toString()).toEqual(
sourceContent +
'//# sourceMappingURL=' +
base64JSON(updatedFile.sourceMap) +
base64JSON(outFile.sourceMap) +
'\n'
);
done(err);
});
});

it('writes /*# */ comment if .css extension', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.path = file.path.replace('.js', '.css');
sourcemaps.write(file, function (err, updatedFile) {
expect(updatedFile.contents.toString()).toEqual(
sourcemaps.write(file, function (err, outFile) {
expect(outFile.contents.toString()).toEqual(
sourceContent +
'/*# sourceMappingURL=' +
base64JSON(updatedFile.sourceMap) +
base64JSON(outFile.sourceMap) +
' */\n'
);
done(err);
});
});

it('write //# comment if any non-.css extension', function (done) {
var file = makeFile();
var file = makeFile(Buffer.from(sourceContent));
file.path = file.path.replace('.js', '.txt');
sourcemaps.write(file, function (err, updatedFile) {
expect(updatedFile.contents.toString()).toEqual(
sourcemaps.write(file, function (err, outFile) {
expect(outFile.contents.toString()).toEqual(
sourceContent +
'//# sourceMappingURL=' +
base64JSON(updatedFile.sourceMap) +
base64JSON(outFile.sourceMap) +
'\n'
);
done(err);
});
});

it('uses \\n or \\r\\n depending on the existing style', function (done) {
var file = makeFile();
it('uses \\r\\n depending on the existing style', function (done) {
var customContents = sourceContent.replace(/\n/g, '\r\n');
file.contents = Buffer.from(customContents);
sourcemaps.write(file, function (err, updatedFile) {
expect(updatedFile.contents.toString()).toEqual(
var file = makeFile(Buffer.from(customContents));
sourcemaps.write(file, function (err, outFile) {
expect(outFile.contents.toString()).toEqual(
customContents +
'//# sourceMappingURL=' +
base64JSON(updatedFile.sourceMap) +
base64JSON(outFile.sourceMap) +
'\r\n'
);
done(err);
});
});

it('uses os.EOL if no EOL in contents', function (done) {
var file = makeFile();
var customContents = sourceContent.replace(/\n/g, '\r');
file.contents = Buffer.from(customContents);
sourcemaps.write(file, function (err, updatedFile) {
expect(updatedFile.contents.toString()).toEqual(
var customContents = sourceContent.replace(/\n/g, '');
var file = makeFile(Buffer.from(customContents));
sourcemaps.write(file, function (err, outFile) {
expect(outFile.contents.toString()).toEqual(
customContents +
'//# sourceMappingURL=' +
base64JSON(updatedFile.sourceMap) +
base64JSON(outFile.sourceMap) +
os.EOL
);
done(err);
});
});

it('writes an external sourcemap when given a destPath', function (done) {
var file = makeFile();
sourcemaps.write(
file,
'../maps',
function (err, updatedFile, sourceMapFile) {
expect(File.isVinyl(updatedFile)).toEqual(true);
expect(updatedFile).toEqual(file);
expect(updatedFile.contents.toString()).toEqual(
sourceContent + '//# sourceMappingURL=../maps/helloworld.js.map\n'
);
var file = makeFile(Buffer.from(sourceContent));
sourcemaps.write(file, '../maps', function (err, outFile, sourceMapFile) {
expect(File.isVinyl(outFile)).toEqual(true);
expect(outFile).toEqual(file);
expect(outFile.contents.toString()).toEqual(
sourceContent + '//# sourceMappingURL=../maps/helloworld.js.map\n'
);

expect(File.isVinyl(sourceMapFile)).toEqual(true);
expect(sourceMapFile.path).toEqual(
path.join(__dirname, 'maps/helloworld.js.map')
);
expect(JSON.parse(sourceMapFile.contents)).toEqual(
updatedFile.sourceMap
);
expect(sourceMapFile.stat.isFile()).toEqual(true);
expect(sourceMapFile.stat.isDirectory()).toEqual(false);
expect(sourceMapFile.stat.isBlockDevice()).toEqual(false);
expect(sourceMapFile.stat.isCharacterDevice()).toEqual(false);
expect(sourceMapFile.stat.isSymbolicLink()).toEqual(false);
expect(sourceMapFile.stat.isFIFO()).toEqual(false);
expect(sourceMapFile.stat.isSocket()).toEqual(false);
expect(File.isVinyl(sourceMapFile)).toEqual(true);
expect(sourceMapFile.path).toEqual(
path.join(__dirname, 'maps/helloworld.js.map')
);
expect(JSON.parse(sourceMapFile.contents)).toEqual(outFile.sourceMap);
expect(sourceMapFile.stat.isFile()).toEqual(true);
expect(sourceMapFile.stat.isDirectory()).toEqual(false);
expect(sourceMapFile.stat.isBlockDevice()).toEqual(false);
expect(sourceMapFile.stat.isCharacterDevice()).toEqual(false);
expect(sourceMapFile.stat.isSymbolicLink()).toEqual(false);
expect(sourceMapFile.stat.isFIFO()).toEqual(false);
expect(sourceMapFile.stat.isSocket()).toEqual(false);

done(err);
}
);
done(err);
});
});

it('create shortest path to map in file comment', function (done) {
var file = makeNestedFile();
sourcemaps.write(file, 'dir1/maps', function (err, updatedFile) {
expect(updatedFile.contents.toString()).toEqual(
var file = makeNestedFile(Buffer.from(sourceContent));
sourcemaps.write(file, 'dir1/maps', function (err, outFile) {
expect(outFile.contents.toString()).toEqual(
sourceContent +
'//# sourceMappingURL=../maps/dir1/dir2/helloworld.js.map\n'
);
@@ -307,8 +285,8 @@ describe('write (buffered contents)', function () {
var file = makeNestedFile();
file.path = file.path.replace(/\//g, '\\\\');
console.log(file.path);
sourcemaps.write(file, '..\\\\maps', function (err, updatedFile) {
expect(updatedFile.contents).toEqual(
sourcemaps.write(file, '..\\\\maps', function (err, outFile) {
expect(outFile.contents).toEqual(
sourceContent + '//# sourceMappingURL=../maps/helloworld.js.map\n'
);
done(err);
@@ -318,8 +296,8 @@ describe('write (buffered contents)', function () {
// TODO: need to figure out this test
it.skip('properly handles remote paths', function (done) {
var file = makeNestedFile();
sourcemaps.write(file, 'http://example.com', function (err, updatedFile) {
expect(updatedFile.contents).toEqual(
sourcemaps.write(file, 'http://example.com', function (err, outFile) {
expect(outFile.contents).toEqual(
sourceContent +
'//# sourceMappingURL=http://example.com/dir1/dir2/helloworld.js.map\n'
);

0 comments on commit 34b2282

Please sign in to comment.