node-fontnik/test/composite.test.js

48 lines
1.7 KiB
JavaScript

'use strict';
const fontnik = require('../');
const tape = require('tape');
const fs = require('fs');
const path = require('path');
const protobuf = require('protocol-buffers');
const messages = protobuf(fs.readFileSync(path.join(__dirname, '../proto/glyphs.proto')));
const glyphs = messages.glyphs;
var openSans512 = fs.readFileSync(__dirname + '/fixtures/opensans.512.767.pbf'),
arialUnicode512 = fs.readFileSync(__dirname + '/fixtures/arialunicode.512.767.pbf'),
league512 = fs.readFileSync(__dirname + '/fixtures/league.512.767.pbf'),
composite512 = fs.readFileSync(__dirname + '/fixtures/opensans.arialunicode.512.767.pbf'),
triple512 = fs.readFileSync(__dirname + '/fixtures/league.opensans.arialunicode.512.767.pbf');
tape('compositing two pbfs', function(t) {
fontnik.composite([openSans512, arialUnicode512], (err, data) => {
var composite = glyphs.decode(data);
var expected = glyphs.decode(composite512);
t.ok(composite.stacks, 'has stacks');
t.equal(composite.stacks.length, 1, 'has one stack');
var stack = composite.stacks[0];
t.ok(stack.name, 'is a named stack');
t.ok(stack.range, 'has a glyph range');
t.deepEqual(composite, expected, 'equals a server-composited stack');
composite = glyphs.encode(composite);
expected = glyphs.encode(expected);
t.deepEqual(composite, expected, 're-encodes nicely');
fontnik.composite([league512, composite], (err, data2) => {
var recomposite = glyphs.decode(data2),
reexpect = glyphs.decode(triple512);
t.deepEqual(recomposite, reexpect, 'can add on a third for good measure');
t.end();
});
});
});