Files
enviPy-bayer/static/js/ketcher2/node_modules/gulp-svgicons2svgfont/tests/tests.mocha.js
2025-06-23 20:13:54 +02:00

595 lines
19 KiB
JavaScript
Executable File

/* eslint max-nested-callbacks:[1] */
'use strict';
var fs = require('fs');
var path = require('path');
var gulp = require('gulp');
var gutil = require('gulp-util');
var rimraf = require('rimraf');
var mkdirp = require('mkdirp');
var assert = require('assert');
var streamtest = require('streamtest');
var neatequal = require('neatequal');
var svgicons2svgfont = require('../src/index');
var defaultMetadataProvider = require('svgicons2svgfont/src/metadata');
describe('gulp-svgicons2svgfont', function() {
beforeEach(function(done) {
mkdirp(path.join(__dirname, 'results'), done);
});
afterEach(function(done) {
rimraf(path.join(__dirname, 'results'), done);
});
streamtest.versions.forEach(function(version) {
describe('for ' + version + ' streams', function() {
describe('must emit an error', function() {
it('when a glyph is bad', function(done) {
streamtest[version].fromObjects([new gutil.File({
path: 'bibabelula.svg',
contents: streamtest.v2.fromChunks(['oh', 'yeah']),
})])
.pipe(svgicons2svgfont({
fontName: 'unprefixedicons',
})
.on('error', function(err) {
assert.equal(
err.message,
'Non-whitespace before first tag.\nLine: 0\nColumn: 1\nChar: o'
);
}).pipe(streamtest.v2.toObjects(function(err) {
if(err) {
return done(err);
}
done();
})));
});
});
describe('with null contents', function() {
it('should let null files pass through', function(done) {
var file = new gutil.File({
path: 'bibabelula.svg',
contents: null,
});
streamtest[version].fromObjects([file])
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files[0].path, 'bibabelula.svg');
assert.equal(files[0].contents, null);
assert.equal(files.length, 1);
done();
}));
});
});
it('should let non-svg files pass through (prependUnicode)', function(done) {
var file = new gutil.File({
path: 'bibabelula.foo',
contents: streamtest.v2.fromChunks(['oh', 'yeah']),
});
streamtest[version].fromObjects([file])
.pipe(svgicons2svgfont({
fontName: 'unprefixedicons',
startUnicode: 0xE001,
prependUnicode: true,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files[0].path, 'bibabelula.foo');
assert.equal(files.length, 1);
done();
}));
});
it('should let non-svg files pass through', function(done) {
var file = new gutil.File({
path: 'bibabelula.foo',
contents: streamtest.v2.fromChunks(['oh', 'yeah']),
});
streamtest[version].fromObjects([file])
.pipe(svgicons2svgfont({
fontName: 'unprefixedicons',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files[0].path, 'bibabelula.foo');
assert.equal(files.length, 1);
done();
}));
});
describe('in stream mode', function() {
it('should work with cleanicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-cleanicons-font.svg'),
'utf8'
)
);
done();
}));
}));
});
it('should work with the metadataProvider option', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
metadataProvider: defaultMetadataProvider({
startUnicode: 0xE001,
}),
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-cleanicons-font.svg'),
'utf8'
)
);
done();
}));
}));
});
it('should work with prefixedicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'prefixedicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'prefixedicons',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-prefixedicons-font.svg'),
'utf8'
)
);
done();
}));
}));
});
it('should work with originalicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'originalicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'originalicons',
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-originalicons-font.svg'),
'utf8'
)
);
done();
}));
}));
});
describe('', function() {
beforeEach(function(done) {
gulp.src(path.join(__dirname, 'fixtures', 'unprefixedicons', '*.svg'))
.pipe(gulp.dest(path.join(__dirname, 'results', 'unprefixedicons')))
.on('error', done)
.on('end', done);
});
it('should work with unprefixed icons and the prependUnicode option', function(done) {
gulp.src(
path.join(__dirname, 'results', 'unprefixedicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'unprefixedicons',
prependUnicode: true,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-unprefixedicons-font.svg'),
'utf8'
)
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unprefixedicons', 'uEA01-arrow-down.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unprefixedicons',
'uEA01-arrow-down.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unprefixedicons',
'arrow-down.svg'
), 'utf8')
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unprefixedicons', 'uEA02-arrow-left.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unprefixedicons',
'uEA02-arrow-left.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unprefixedicons', 'arrow-left.svg'
), 'utf8')
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unprefixedicons', 'uEA03-arrow-right.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unprefixedicons',
'uEA03-arrow-right.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unprefixedicons', 'arrow-right.svg'
), 'utf8')
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unprefixedicons', 'uEA04-arrow-up.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unprefixedicons',
'uEA04-arrow-up.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unprefixedicons', 'arrow-up.svg'
), 'utf8')
);
done();
}));
}));
});
});
describe('', function() {
beforeEach(function(done) {
gulp.src(path.join(__dirname, 'fixtures', 'unicons', '*.svg'))
.pipe(gulp.dest(path.join(__dirname, 'results', 'unicons')))
.on('error', done)
.on('end', done);
});
it('should work with mixed icons and the prependUnicode option', function(done) {
gulp.src(
path.join(__dirname, 'results', 'unicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'unicons',
prependUnicode: true,
})).on('error', done)
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-unicons-font.svg'),
'utf8'
)
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unicons', 'uEA01-twitter.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unicons',
'uEA01-twitter.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unicons', 'uEA01-twitter.svg'
), 'utf8')
);
assert.equal(fs.existsSync(path.join(
__dirname, 'results', 'unicons', 'uEA02-facebook.svg'
)), true);
assert.equal(
fs.readFileSync(path.join(
__dirname, 'results', 'unicons',
'uEA02-facebook.svg'
), 'utf8'),
fs.readFileSync(path.join(
__dirname, 'fixtures', 'unicons', 'facebook.svg'
), 'utf8')
);
done();
}));
}));
});
});
it('should emit an event with the codepoint mapping', function(done) {
var codepoints;
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
startUnicode: 0xE001,
}))
.on('glyphs', function(_codepoints_) {
codepoints = _codepoints_;
})
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
files[0].pipe(streamtest.v2.toText(function(err2, text) {
if(err2) {
return done(err2);
}
assert(codepoints);
neatequal(
codepoints,
JSON.parse(fs.readFileSync(
path.join(__dirname, 'expected', 'test-codepoints.json'),
'utf8'
))
);
assert.equal(
text,
fs.readFileSync(
path.join(__dirname, 'expected', 'test-cleanicons-font.svg'),
'utf8'
)
);
done();
}));
}));
});
it('should support filename change', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: false }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
fileName: 'newName',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isStream(), true);
assert.equal(fs.exists(__dirname, 'fixtures', 'cleanicons', 'newName.svg'));
done();
}));
});
});
describe('in buffer mode', function() {
it('should work with cleanicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: true }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isBuffer(), true);
assert.equal(
files[0].contents.toString('utf8'),
fs.readFileSync(path.join(__dirname, 'expected', 'test-cleanicons-font.svg'))
);
done();
}));
});
it('should work with prefixedicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'prefixedicons', '*.svg'),
{ buffer: true }
)
.pipe(svgicons2svgfont({
fontName: 'prefixedicons',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isBuffer(), true);
assert.equal(
files[0].contents.toString('utf8'),
fs.readFileSync(path.join(__dirname, 'expected', 'test-prefixedicons-font.svg'))
);
done();
}));
});
it('should work with originalicons', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'originalicons', '*.svg'),
{ buffer: true }
)
.pipe(svgicons2svgfont({
fontName: 'originalicons',
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isBuffer(), true);
assert.equal(
files[0].contents.toString('utf8'),
fs.readFileSync(path.join(__dirname, 'expected', 'test-originalicons-font.svg'))
);
done();
}));
});
it('should support filename change', function(done) {
gulp.src(
path.join(__dirname, 'fixtures', 'cleanicons', '*.svg'),
{ buffer: true }
)
.pipe(svgicons2svgfont({
fontName: 'cleanicons',
fileName: 'newName',
startUnicode: 0xE001,
}))
.pipe(streamtest.v2.toObjects(function(err, files) {
if(err) {
return done(err);
}
assert.equal(files.length, 1);
assert.equal(files[0].isBuffer(), true);
assert.equal(fs.exists(__dirname, 'fixtures', 'cleanicons', 'newName.svg'));
done();
}));
});
});
});
});
describe('must throw error', function() {
it('when no fontname is given', function() {
assert.throws(function() {
svgicons2svgfont();
});
});
it('when using old options', function() {
assert.throws(function() {
svgicons2svgfont({
appendUnicode: true,
});
});
});
});
});