Add and improve tests
This commit is contained in:
@@ -121,6 +121,7 @@ ol.render.canvas.textHeights_ = {};
|
|||||||
* @param {string} fontSpec CSS font spec.
|
* @param {string} fontSpec CSS font spec.
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.checkFont = (function() {
|
ol.render.canvas.checkFont = (function() {
|
||||||
|
var retries = 60;
|
||||||
var checked = ol.render.canvas.checkedFonts_;
|
var checked = ol.render.canvas.checkedFonts_;
|
||||||
var labelCache = ol.render.canvas.labelCache;
|
var labelCache = ol.render.canvas.labelCache;
|
||||||
var font = '32px monospace';
|
var font = '32px monospace';
|
||||||
@@ -146,13 +147,13 @@ ol.render.canvas.checkFont = (function() {
|
|||||||
function check() {
|
function check() {
|
||||||
var done = true;
|
var done = true;
|
||||||
for (var font in checked) {
|
for (var font in checked) {
|
||||||
if (checked[font] < 60) {
|
if (checked[font] < retries) {
|
||||||
if (isAvailable(font)) {
|
if (isAvailable(font)) {
|
||||||
checked[font] = 60;
|
checked[font] = retries;
|
||||||
labelCache.clear();
|
|
||||||
ol.obj.clear(ol.render.canvas.textHeights_);
|
ol.obj.clear(ol.render.canvas.textHeights_);
|
||||||
// Make sure that loaded fonts are picked up by Safari
|
// Make sure that loaded fonts are picked up by Safari
|
||||||
ol.render.canvas.measureContext_ = null;
|
ol.render.canvas.measureContext_ = null;
|
||||||
|
labelCache.clear();
|
||||||
} else {
|
} else {
|
||||||
++checked[font];
|
++checked[font];
|
||||||
done = false;
|
done = false;
|
||||||
@@ -173,7 +174,7 @@ ol.render.canvas.checkFont = (function() {
|
|||||||
for (var i = 0, ii = fontFamilies.length; i < ii; ++i) {
|
for (var i = 0, ii = fontFamilies.length; i < ii; ++i) {
|
||||||
var fontFamily = fontFamilies[i];
|
var fontFamily = fontFamilies[i];
|
||||||
if (!(fontFamily in checked)) {
|
if (!(fontFamily in checked)) {
|
||||||
checked[fontFamily] = 60;
|
checked[fontFamily] = retries;
|
||||||
if (!isAvailable(fontFamily)) {
|
if (!isAvailable(fontFamily)) {
|
||||||
checked[fontFamily] = 0;
|
checked[fontFamily] = 0;
|
||||||
if (interval === undefined) {
|
if (interval === undefined) {
|
||||||
|
|||||||
@@ -12,56 +12,72 @@ describe('ol.render.canvas', function() {
|
|||||||
|
|
||||||
describe('ol.render.canvas.checkFont()', function() {
|
describe('ol.render.canvas.checkFont()', function() {
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
ol.obj.clear(ol.render.canvas.checkedFonts_);
|
||||||
|
ol.render.canvas.getMeasureContext();
|
||||||
|
ol.render.canvas.measureTextHeight('12px sans-serif');
|
||||||
|
});
|
||||||
|
|
||||||
var checkFont = ol.render.canvas.checkFont;
|
var checkFont = ol.render.canvas.checkFont;
|
||||||
|
var retries = 60;
|
||||||
|
|
||||||
it('does not clear the label cache for unavailable fonts', function(done) {
|
it('does not clear label cache and measurements for unavailable fonts', function(done) {
|
||||||
ol.obj.clear(ol.render.canvas.checkedFonts_);
|
this.timeout(3000);
|
||||||
var spy = sinon.spy();
|
var spy = sinon.spy();
|
||||||
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
var interval = setInterval(function() {
|
||||||
|
if (ol.render.canvas.checkedFonts_['foo'] == retries && ol.render.canvas.checkedFonts_['sans-serif'] == retries) {
|
||||||
|
clearInterval(interval);
|
||||||
|
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
expect(spy.callCount).to.be(0);
|
||||||
|
expect(ol.render.canvas.measureContext_).to.not.be(null);
|
||||||
|
expect(ol.render.canvas.textHeights_).to.not.eql({});
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
}, 32);
|
||||||
checkFont('12px foo,sans-serif');
|
checkFont('12px foo,sans-serif');
|
||||||
setTimeout(function() {
|
|
||||||
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
|
||||||
expect(spy.callCount).to.be(0);
|
|
||||||
done();
|
|
||||||
}, 1600);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not clear the label cache for available fonts', function(done) {
|
it('does not clear label cache and measurements for available fonts', function(done) {
|
||||||
ol.obj.clear(ol.render.canvas.checkedFonts_);
|
|
||||||
var spy = sinon.spy();
|
var spy = sinon.spy();
|
||||||
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
var interval = setInterval(function() {
|
||||||
|
if (ol.render.canvas.checkedFonts_['sans-serif'] == retries) {
|
||||||
|
clearInterval(interval);
|
||||||
|
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
expect(spy.callCount).to.be(0);
|
||||||
|
expect(ol.render.canvas.measureContext_).to.not.be(null);
|
||||||
|
expect(ol.render.canvas.textHeights_).to.not.eql({});
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
}, 32);
|
||||||
checkFont('12px sans-serif');
|
checkFont('12px sans-serif');
|
||||||
setTimeout(function() {
|
|
||||||
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
|
||||||
expect(spy.callCount).to.be(0);
|
|
||||||
done();
|
|
||||||
}, 800);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not clear the label cache for the \'monospace\' font', function(done) {
|
it('does not clear label cache and measurements for the \'monospace\' font', function(done) {
|
||||||
ol.obj.clear(ol.render.canvas.checkedFonts_);
|
|
||||||
var spy = sinon.spy();
|
var spy = sinon.spy();
|
||||||
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
var interval = setInterval(function() {
|
||||||
|
if (ol.render.canvas.checkedFonts_['monospace'] == retries) {
|
||||||
|
clearInterval(interval);
|
||||||
|
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
||||||
|
expect(spy.callCount).to.be(0);
|
||||||
|
expect(ol.render.canvas.measureContext_).to.not.be(null);
|
||||||
|
expect(ol.render.canvas.textHeights_).to.not.eql({});
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
}, 32);
|
||||||
checkFont('12px monospace');
|
checkFont('12px monospace');
|
||||||
setTimeout(function() {
|
|
||||||
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
|
||||||
expect(spy.callCount).to.be(0);
|
|
||||||
done();
|
|
||||||
}, 800);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('clears the label cache for fonts that become available', function(done) {
|
it('clears label cache and measurements for fonts that become available', function(done) {
|
||||||
ol.obj.clear(ol.render.canvas.checkedFonts_);
|
|
||||||
head.appendChild(font);
|
head.appendChild(font);
|
||||||
var spy = sinon.spy();
|
ol.events.listen(ol.render.canvas.labelCache, 'clear', function() {
|
||||||
ol.events.listen(ol.render.canvas.labelCache, 'clear', spy);
|
expect(ol.render.canvas.measureContext_).to.be(null);
|
||||||
checkFont('12px Abel');
|
expect(ol.render.canvas.textHeights_).to.eql({});
|
||||||
setTimeout(function() {
|
|
||||||
ol.events.unlisten(ol.render.canvas.labelCache, 'clear', spy);
|
|
||||||
head.removeChild(font);
|
|
||||||
expect(spy.callCount).to.be(1);
|
|
||||||
done();
|
done();
|
||||||
}, 1600);
|
});
|
||||||
|
checkFont('12px Abel');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user