From: Jukka Kurkela Date: Wed, 17 Mar 2021 22:22:21 +0000 (+0200) Subject: Update tick positioning (#8657) X-Git-Tag: v3.0.0-rc~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=416062bf68908dc76c5bfb419a321611d9af1738;p=thirdparty%2FChart.js.git Update tick positioning (#8657) * Update tick positioning * Update tests --- diff --git a/src/core/core.scale.js b/src/core/core.scale.js index 2da297290..d6da91d3e 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -43,7 +43,7 @@ defaults.set('scale', { drawBorder: true, drawOnChartArea: true, drawTicks: true, - tickLength: 10, + tickLength: 8, tickWidth: (_ctx, options) => options.lineWidth, tickColor: (_ctx, options) => options.color, offset: false, @@ -75,7 +75,7 @@ defaults.set('scale', { mirror: false, textStrokeWidth: 0, textStrokeColor: '', - padding: 0, + padding: 3, display: true, autoSkip: true, autoSkipPadding: 3, @@ -783,7 +783,7 @@ export default class Scale extends Element { const labelSizes = me._getLabelSizes(); const maxLabelWidth = labelSizes.widest.width; - const maxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset; + const maxLabelHeight = labelSizes.highest.height; // Estimate the width of each grid based on the canvas width, the maximum // label width and the number of tick intervals @@ -822,104 +822,40 @@ export default class Scale extends Element { height: 0 }; - const chart = me.chart; - const opts = me.options; - const tickOpts = opts.ticks; - const titleOpts = opts.title; - const gridLineOpts = opts.grid; + const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = me; const display = me._isVisible(); - const labelsBelowTicks = opts.position !== 'top' && me.axis === 'x'; const isHorizontal = me.isHorizontal(); - const titleHeight = display && getTitleHeight(titleOpts, chart.options.font); - - // Width - if (isHorizontal) { - minSize.width = me.maxWidth; - } else if (display) { - minSize.width = getTickMarkLength(gridLineOpts) + titleHeight; - } - // height - if (!isHorizontal) { - minSize.height = me.maxHeight; // fill all the height - } else if (display) { - minSize.height = getTickMarkLength(gridLineOpts) + titleHeight; - } + if (display) { + const titleHeight = getTitleHeight(titleOpts, chart.options.font); + if (isHorizontal) { + minSize.width = me.maxWidth; + minSize.height = getTickMarkLength(gridOpts) + titleHeight; + } else { + minSize.height = me.maxHeight; // fill all the height + minSize.width = getTickMarkLength(gridOpts) + titleHeight; + } - // Don't bother fitting the ticks if we are not showing the labels - if (tickOpts.display && display && me.ticks.length) { - const labelSizes = me._getLabelSizes(); - const firstLabelSize = labelSizes.first; - const lastLabelSize = labelSizes.last; - const widestLabelSize = labelSizes.widest; - const highestLabelSize = labelSizes.highest; - const lineSpace = highestLabelSize.offset * 0.8; - const tickPadding = tickOpts.padding; + // Don't bother fitting the ticks if we are not showing the labels + if (tickOpts.display && me.ticks.length) { + const {first, last, widest, highest} = me._getLabelSizes(); + const tickPadding = tickOpts.padding * 2; + const angleRadians = toRadians(me.labelRotation); + const cos = Math.cos(angleRadians); + const sin = Math.sin(angleRadians); - if (isHorizontal) { + if (isHorizontal) { // A horizontal axis is more constrained by the height. - const isRotated = me.labelRotation !== 0; - const angleRadians = toRadians(me.labelRotation); - const cosRotation = Math.cos(angleRadians); - const sinRotation = Math.sin(angleRadians); - - const labelHeight = sinRotation * widestLabelSize.width - + cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0)) - + (isRotated ? 0 : lineSpace); // padding - - minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding); - - const offsetLeft = me.getPixelForTick(0) - me.left; - const offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1); - let paddingLeft, paddingRight; - - // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned - // which means that the right padding is dominated by the font height - if (isRotated) { - paddingLeft = labelsBelowTicks ? - cosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset : - sinRotation * (firstLabelSize.height - firstLabelSize.offset); - paddingRight = labelsBelowTicks ? - sinRotation * (lastLabelSize.height - lastLabelSize.offset) : - cosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset; - } else if (tickOpts.align === 'start') { - paddingLeft = 0; - paddingRight = lastLabelSize.width; - } else if (tickOpts.align === 'end') { - paddingLeft = firstLabelSize.width; - paddingRight = 0; + const labelHeight = sin * widest.width + cos * highest.height; + minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding); } else { - paddingLeft = firstLabelSize.width / 2; - paddingRight = lastLabelSize.width / 2; - } - - // Adjust padding taking into account changes in offsets - // and add 3 px to move away from canvas edges - me.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3; - me.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3; - } else { // A vertical axis is more constrained by the width. Labels are the // dominant factor here, so get that length first and account for padding - const labelWidth = tickOpts.mirror ? 0 : - // use lineSpace for consistency with horizontal axis - // tickPadding is not implemented for horizontal - widestLabelSize.width + tickPadding + lineSpace; - - minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth); - - let paddingTop = lastLabelSize.height / 2; - let paddingBottom = firstLabelSize.height / 2; - - if (tickOpts.align === 'start') { - paddingTop = 0; - paddingBottom = firstLabelSize.height; - } else if (tickOpts.align === 'end') { - paddingTop = lastLabelSize.height; - paddingBottom = 0; - } + const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; - me.paddingTop = paddingTop; - me.paddingBottom = paddingBottom; + minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding); + } + me._calculatePadding(first, last, sin, cos); } } @@ -934,6 +870,57 @@ export default class Scale extends Element { } } + _calculatePadding(first, last, sin, cos) { + const me = this; + const {ticks: {align, padding}, position} = me.options; + const isRotated = me.labelRotation !== 0; + const labelsBelowTicks = position !== 'top' && me.axis === 'x'; + + if (me.isHorizontal()) { + const offsetLeft = me.getPixelForTick(0) - me.left; + const offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1); + let paddingLeft = 0; + let paddingRight = 0; + + // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned + // which means that the right padding is dominated by the font height + if (isRotated) { + if (labelsBelowTicks) { + paddingLeft = cos * first.width; + paddingRight = sin * last.height; + } else { + paddingLeft = sin * first.height; + paddingRight = cos * last.width; + } + } else if (align === 'start') { + paddingRight = last.width; + } else if (align === 'end') { + paddingLeft = first.width; + } else { + paddingLeft = first.width / 2; + paddingRight = last.width / 2; + } + + // Adjust padding taking into account changes in offsets + me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0); + me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0); + } else { + let paddingTop = last.height / 2; + let paddingBottom = first.height / 2; + + if (align === 'start') { + paddingTop = 0; + paddingBottom = first.height; + } else if (align === 'end') { + paddingTop = last.height; + paddingBottom = 0; + } + + me.paddingTop = paddingTop + padding; + me.paddingBottom = paddingBottom + padding; + } + } + /** * Handle margins and padding interactions * @private @@ -990,7 +977,13 @@ export default class Scale extends Element { let labelSizes = me._labelSizes; if (!labelSizes) { - me._labelSizes = labelSizes = me._computeLabelSizes(); + const sampleSize = me.options.ticks.sampleSize; + let ticks = me.ticks; + if (sampleSize < ticks.length) { + ticks = sample(ticks, sampleSize); + } + + me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length); } return labelSizes; @@ -1002,26 +995,17 @@ export default class Scale extends Element { * @return {{ first: object, last: object, widest: object, highest: object }} * @private */ - _computeLabelSizes() { - const me = this; - const ctx = me.ctx; - const caches = me._longestTextCache; - const sampleSize = me.options.ticks.sampleSize; + _computeLabelSizes(ticks, length) { + const {ctx, _longestTextCache: caches} = this; const widths = []; const heights = []; - const offsets = []; let widestLabelSize = 0; let highestLabelSize = 0; - let ticks = me.ticks; - if (sampleSize < ticks.length) { - ticks = sample(ticks, sampleSize); - } - const length = ticks.length; let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel; for (i = 0; i < length; ++i) { label = ticks[i].label; - tickFont = me._resolveTickFontOptions(i); + tickFont = this._resolveTickFontOptions(i); ctx.font = fontString = tickFont.string; cache = caches[fontString] = caches[fontString] || {data: {}, gc: []}; lineHeight = tickFont.lineHeight; @@ -1043,7 +1027,6 @@ export default class Scale extends Element { } widths.push(width); heights.push(height); - offsets.push(lineHeight / 2); widestLabelSize = Math.max(width, widestLabelSize); highestLabelSize = Math.max(height, highestLabelSize); } @@ -1052,13 +1035,7 @@ export default class Scale extends Element { const widest = widths.indexOf(widestLabelSize); const highest = heights.indexOf(highestLabelSize); - function valueAt(idx) { - return { - width: widths[idx] || 0, - height: heights[idx] || 0, - offset: offsets[idx] || 0 - }; - } + const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0}); return { first: valueAt(0), @@ -1299,7 +1276,7 @@ export default class Scale extends Element { tx2 = me.left + tl; } else if (axis === 'x') { if (position === 'center') { - borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2); + borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); } else if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; @@ -1458,24 +1435,20 @@ export default class Scale extends Element { x = pixel; if (position === 'top') { if (crossAlign === 'near' || rotation !== 0) { - textOffset = (Math.sin(rotation) * halfCount + 0.5) * lineHeight; - textOffset -= (rotation === 0 ? (lineCount - 0.5) : Math.cos(rotation) * halfCount) * lineHeight; + textOffset = -lineCount * lineHeight + lineHeight / 2; } else if (crossAlign === 'center') { - textOffset = -1 * (labelSizes.highest.height / 2); - textOffset -= halfCount * lineHeight; + textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; } else { - textOffset = (-1 * labelSizes.highest.height) + (0.5 * lineHeight); + textOffset = -labelSizes.highest.height + lineHeight / 2; } } else { // eslint-disable-next-line no-lonely-if if (crossAlign === 'near' || rotation !== 0) { - textOffset = Math.sin(rotation) * halfCount * lineHeight; - textOffset += (rotation === 0 ? 0.5 : Math.cos(rotation) * halfCount) * lineHeight; + textOffset = lineHeight / 2; } else if (crossAlign === 'center') { - textOffset = labelSizes.highest.height / 2; - textOffset -= halfCount * lineHeight; + textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; } else { - textOffset = labelSizes.highest.height - ((lineCount - 0.5) * lineHeight); + textOffset = labelSizes.highest.height - lineCount * lineHeight; } } } else { @@ -1522,12 +1495,10 @@ export default class Scale extends Element { _getYAxisLabelAlignment(tl) { const me = this; - const {position, ticks} = me.options; - const {crossAlign, mirror, padding} = ticks; + const {position, ticks: {crossAlign, mirror, padding}} = me.options; const labelSizes = me._getLabelSizes(); const tickAndPadding = tl + padding; const widest = labelSizes.widest.width; - const lineSpace = labelSizes.highest.offset * 0.8; let textAlign; let x; @@ -1546,7 +1517,7 @@ export default class Scale extends Element { x -= (widest / 2); } else { textAlign = 'left'; - x = me.left + lineSpace; + x = me.left; } } } else if (position === 'right') { @@ -1563,7 +1534,7 @@ export default class Scale extends Element { x += widest / 2; } else { textAlign = 'right'; - x = me.right - lineSpace; + x = me.right; } } } else { diff --git a/test/fixtures/controller.bar/minBarLength/horizontal-neg.png b/test/fixtures/controller.bar/minBarLength/horizontal-neg.png index 3ffb6841a..4b8335a43 100644 Binary files a/test/fixtures/controller.bar/minBarLength/horizontal-neg.png and b/test/fixtures/controller.bar/minBarLength/horizontal-neg.png differ diff --git a/test/fixtures/controller.bar/minBarLength/horizontal-pos.png b/test/fixtures/controller.bar/minBarLength/horizontal-pos.png index 7999ebbba..b19acd767 100644 Binary files a/test/fixtures/controller.bar/minBarLength/horizontal-pos.png and b/test/fixtures/controller.bar/minBarLength/horizontal-pos.png differ diff --git a/test/fixtures/controller.bar/minBarLength/horizontal.png b/test/fixtures/controller.bar/minBarLength/horizontal.png index 83d5b82dc..39b1d3f12 100644 Binary files a/test/fixtures/controller.bar/minBarLength/horizontal.png and b/test/fixtures/controller.bar/minBarLength/horizontal.png differ diff --git a/test/fixtures/controller.bar/not-grouped/on-time.png b/test/fixtures/controller.bar/not-grouped/on-time.png index 92506bd3a..9ed7d0ca2 100644 Binary files a/test/fixtures/controller.bar/not-grouped/on-time.png and b/test/fixtures/controller.bar/not-grouped/on-time.png differ diff --git a/test/fixtures/controller.bubble/clip.png b/test/fixtures/controller.bubble/clip.png index 2c2c454de..6ce0ce124 100644 Binary files a/test/fixtures/controller.bubble/clip.png and b/test/fixtures/controller.bubble/clip.png differ diff --git a/test/fixtures/controller.line/clip/default-x-max.png b/test/fixtures/controller.line/clip/default-x-max.png index d5010ad17..4379fba82 100644 Binary files a/test/fixtures/controller.line/clip/default-x-max.png and b/test/fixtures/controller.line/clip/default-x-max.png differ diff --git a/test/fixtures/controller.line/clip/default-x-min.png b/test/fixtures/controller.line/clip/default-x-min.png index 7f406b11e..f76bbf52a 100644 Binary files a/test/fixtures/controller.line/clip/default-x-min.png and b/test/fixtures/controller.line/clip/default-x-min.png differ diff --git a/test/fixtures/controller.line/clip/default-x.png b/test/fixtures/controller.line/clip/default-x.png index a409d1979..7b40d7718 100644 Binary files a/test/fixtures/controller.line/clip/default-x.png and b/test/fixtures/controller.line/clip/default-x.png differ diff --git a/test/fixtures/controller.line/clip/default-y-max.png b/test/fixtures/controller.line/clip/default-y-max.png index cb41b2e71..75aaec984 100644 Binary files a/test/fixtures/controller.line/clip/default-y-max.png and b/test/fixtures/controller.line/clip/default-y-max.png differ diff --git a/test/fixtures/controller.line/clip/default-y-min.png b/test/fixtures/controller.line/clip/default-y-min.png index 356eff3b0..2db3da79f 100644 Binary files a/test/fixtures/controller.line/clip/default-y-min.png and b/test/fixtures/controller.line/clip/default-y-min.png differ diff --git a/test/fixtures/controller.line/clip/default-y.png b/test/fixtures/controller.line/clip/default-y.png index 745b99870..6fe1d01dc 100644 Binary files a/test/fixtures/controller.line/clip/default-y.png and b/test/fixtures/controller.line/clip/default-y.png differ diff --git a/test/fixtures/controller.line/clip/specified.png b/test/fixtures/controller.line/clip/specified.png index 6aa531c97..0f7eeef7c 100644 Binary files a/test/fixtures/controller.line/clip/specified.png and b/test/fixtures/controller.line/clip/specified.png differ diff --git a/test/fixtures/core.layouts/hidden-vertical-boxes.png b/test/fixtures/core.layouts/hidden-vertical-boxes.png index 3142b96f3..a236a4c48 100644 Binary files a/test/fixtures/core.layouts/hidden-vertical-boxes.png and b/test/fixtures/core.layouts/hidden-vertical-boxes.png differ diff --git a/test/fixtures/core.layouts/long-labels.png b/test/fixtures/core.layouts/long-labels.png index c12a70a87..5f20aa5aa 100644 Binary files a/test/fixtures/core.layouts/long-labels.png and b/test/fixtures/core.layouts/long-labels.png differ diff --git a/test/fixtures/core.layouts/refit-vertical-boxes.png b/test/fixtures/core.layouts/refit-vertical-boxes.png index e18af5ca6..c28d8c7dd 100644 Binary files a/test/fixtures/core.layouts/refit-vertical-boxes.png and b/test/fixtures/core.layouts/refit-vertical-boxes.png differ diff --git a/test/fixtures/core.layouts/scriptable.png b/test/fixtures/core.layouts/scriptable.png index 6b3da5d10..a96bfa9f2 100644 Binary files a/test/fixtures/core.layouts/scriptable.png and b/test/fixtures/core.layouts/scriptable.png differ diff --git a/test/fixtures/core.scale/autoSkip/fit-after.png b/test/fixtures/core.scale/autoSkip/fit-after.png index cfc1b7a42..c1def9722 100644 Binary files a/test/fixtures/core.scale/autoSkip/fit-after.png and b/test/fixtures/core.scale/autoSkip/fit-after.png differ diff --git a/test/fixtures/core.scale/autoSkip/no-offset.png b/test/fixtures/core.scale/autoSkip/no-offset.png index 9a24900a7..f8d2d1851 100644 Binary files a/test/fixtures/core.scale/autoSkip/no-offset.png and b/test/fixtures/core.scale/autoSkip/no-offset.png differ diff --git a/test/fixtures/core.scale/autoSkip/offset.png b/test/fixtures/core.scale/autoSkip/offset.png index 6c1f8c62d..72ee4eef4 100644 Binary files a/test/fixtures/core.scale/autoSkip/offset.png and b/test/fixtures/core.scale/autoSkip/offset.png differ diff --git a/test/fixtures/core.scale/backgroundColor.png b/test/fixtures/core.scale/backgroundColor.png index 5855420b9..19d6e583a 100644 Binary files a/test/fixtures/core.scale/backgroundColor.png and b/test/fixtures/core.scale/backgroundColor.png differ diff --git a/test/fixtures/core.scale/cartesian-axis-border-settings.png b/test/fixtures/core.scale/cartesian-axis-border-settings.png index a36dd2535..8a9759c55 100644 Binary files a/test/fixtures/core.scale/cartesian-axis-border-settings.png and b/test/fixtures/core.scale/cartesian-axis-border-settings.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-center.png b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-center.png index b817e5bc3..6f3aaed90 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-center.png and b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-center.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-far.png b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-far.png index 6dd7a50fa..abca217fa 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-far.png and b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-far.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-near.png b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-near.png index a7bfa8de1..02791ad91 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-bottom-near.png and b/test/fixtures/core.scale/crossAlignment/cross-align-bottom-near.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-left-center.png b/test/fixtures/core.scale/crossAlignment/cross-align-left-center.png index 747d70493..004856ced 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-left-center.png and b/test/fixtures/core.scale/crossAlignment/cross-align-left-center.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-left-far-clipped.png b/test/fixtures/core.scale/crossAlignment/cross-align-left-far-clipped.png index 75258b70b..d0cb6e397 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-left-far-clipped.png and b/test/fixtures/core.scale/crossAlignment/cross-align-left-far-clipped.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-left-far.png b/test/fixtures/core.scale/crossAlignment/cross-align-left-far.png index be066d19b..79b92fde7 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-left-far.png and b/test/fixtures/core.scale/crossAlignment/cross-align-left-far.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-left-near.png b/test/fixtures/core.scale/crossAlignment/cross-align-left-near.png index 50d27b83a..c9cae15fc 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-left-near.png and b/test/fixtures/core.scale/crossAlignment/cross-align-left-near.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-right-center.png b/test/fixtures/core.scale/crossAlignment/cross-align-right-center.png index baa12cb7f..ca66bcd9b 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-right-center.png and b/test/fixtures/core.scale/crossAlignment/cross-align-right-center.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-right-far.png b/test/fixtures/core.scale/crossAlignment/cross-align-right-far.png index ae02309c1..10678359a 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-right-far.png and b/test/fixtures/core.scale/crossAlignment/cross-align-right-far.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-right-near.png b/test/fixtures/core.scale/crossAlignment/cross-align-right-near.png index d0cd81122..5352cbb72 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-right-near.png and b/test/fixtures/core.scale/crossAlignment/cross-align-right-near.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-top-center.png b/test/fixtures/core.scale/crossAlignment/cross-align-top-center.png index 4f5eb963c..c9083a830 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-top-center.png and b/test/fixtures/core.scale/crossAlignment/cross-align-top-center.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-top-far.png b/test/fixtures/core.scale/crossAlignment/cross-align-top-far.png index ea5c88d50..b186168a8 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-top-far.png and b/test/fixtures/core.scale/crossAlignment/cross-align-top-far.png differ diff --git a/test/fixtures/core.scale/crossAlignment/cross-align-top-near.png b/test/fixtures/core.scale/crossAlignment/cross-align-top-near.png index 932166863..ce9e5c67a 100644 Binary files a/test/fixtures/core.scale/crossAlignment/cross-align-top-near.png and b/test/fixtures/core.scale/crossAlignment/cross-align-top-near.png differ diff --git a/test/fixtures/core.scale/label-align-center.png b/test/fixtures/core.scale/label-align-center.png index 576f0254d..e0b0d2030 100644 Binary files a/test/fixtures/core.scale/label-align-center.png and b/test/fixtures/core.scale/label-align-center.png differ diff --git a/test/fixtures/core.scale/label-align-end.png b/test/fixtures/core.scale/label-align-end.png index 8581fc922..57640fd21 100644 Binary files a/test/fixtures/core.scale/label-align-end.png and b/test/fixtures/core.scale/label-align-end.png differ diff --git a/test/fixtures/core.scale/label-align-start.png b/test/fixtures/core.scale/label-align-start.png index 13098ae90..18941892f 100644 Binary files a/test/fixtures/core.scale/label-align-start.png and b/test/fixtures/core.scale/label-align-start.png differ diff --git a/test/fixtures/core.scale/label-offset-vertical-axes.png b/test/fixtures/core.scale/label-offset-vertical-axes.png index 05785b8bc..bf9da7b76 100644 Binary files a/test/fixtures/core.scale/label-offset-vertical-axes.png and b/test/fixtures/core.scale/label-offset-vertical-axes.png differ diff --git a/test/fixtures/core.scale/tick-drawing.png b/test/fixtures/core.scale/tick-drawing.png index b59f3a6f9..6c34af30f 100644 Binary files a/test/fixtures/core.scale/tick-drawing.png and b/test/fixtures/core.scale/tick-drawing.png differ diff --git a/test/fixtures/core.scale/tick-override-styles.png b/test/fixtures/core.scale/tick-override-styles.png index 8e55ea433..568fdf5af 100644 Binary files a/test/fixtures/core.scale/tick-override-styles.png and b/test/fixtures/core.scale/tick-override-styles.png differ diff --git a/test/fixtures/core.scale/ticks-mirror.png b/test/fixtures/core.scale/ticks-mirror.png index 15a23c2f1..dc483b516 100644 Binary files a/test/fixtures/core.scale/ticks-mirror.png and b/test/fixtures/core.scale/ticks-mirror.png differ diff --git a/test/fixtures/core.scale/ticks/rotated-long.js b/test/fixtures/core.scale/ticks/rotated-long.js new file mode 100644 index 000000000..3009d4cda --- /dev/null +++ b/test/fixtures/core.scale/ticks/rotated-long.js @@ -0,0 +1,47 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: ['Red Red Red Red', 'Blue Blue Blue Blue', 'Black Black Black Black', 'Green Green Green Green', 'Purple Purple Purple Purple', 'Orange Orange Orange Orange Orange Orange'], + datasets: [ + { + data: [12, 19, 3, 5, 2, 3] + }, + ] + }, + options: { + plugins: { + legend: false, + tooltip: false, + filler: false, + title: false + }, + scales: { + bottom: { + type: 'category', + position: 'bottom' + }, + top: { + type: 'category', + position: 'top' + } + } + }, + plugins: [{ + afterDraw(chart) { + const ctx = chart.ctx; + ctx.save(); + ctx.strokeStyle = 'red'; + ctx.strokeRect(0, 0, chart.width, chart.height); + ctx.restore(); + } + }] + }, + options: { + spriteText: true, + canvas: { + width: 1024, + height: 512 + } + } +}; diff --git a/test/fixtures/core.scale/ticks/rotated-long.png b/test/fixtures/core.scale/ticks/rotated-long.png new file mode 100644 index 000000000..04bc0b644 Binary files /dev/null and b/test/fixtures/core.scale/ticks/rotated-long.png differ diff --git a/test/fixtures/core.scale/ticks/rotated-multi-line.js b/test/fixtures/core.scale/ticks/rotated-multi-line.js new file mode 100644 index 000000000..271c0b312 --- /dev/null +++ b/test/fixtures/core.scale/ticks/rotated-multi-line.js @@ -0,0 +1,47 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [['Red', 'Red', 'Red', 'Red'], ['Blue', 'Blue', 'Blue', 'Blue'], ['Black', 'Black', 'Black', 'Black'], ['Green', 'Green', 'Green', 'Green'], ['Purple', 'Purple', 'Purple', 'Purple'], ['Orange Orange', 'Orange', 'Orange', 'Orange', 'Orange Orange']], + datasets: [ + { + data: [12, 19, 3, 5, 2, 3] + }, + ] + }, + options: { + plugins: { + legend: false, + tooltip: false, + filler: false, + title: false + }, + scales: { + bottom: { + type: 'category', + position: 'bottom' + }, + top: { + type: 'category', + position: 'top' + } + } + }, + plugins: [{ + afterDraw(chart) { + const ctx = chart.ctx; + ctx.save(); + ctx.strokeStyle = 'red'; + ctx.strokeRect(0, 0, chart.width, chart.height); + ctx.restore(); + } + }] + }, + options: { + spriteText: true, + canvas: { + width: 610, + height: 512 + } + } +}; diff --git a/test/fixtures/core.scale/ticks/rotated-multi-line.png b/test/fixtures/core.scale/ticks/rotated-multi-line.png new file mode 100644 index 000000000..4c46fc3a0 Binary files /dev/null and b/test/fixtures/core.scale/ticks/rotated-multi-line.png differ diff --git a/test/fixtures/core.scale/title/align-end.png b/test/fixtures/core.scale/title/align-end.png index f52a7bf73..dbd5397fa 100644 Binary files a/test/fixtures/core.scale/title/align-end.png and b/test/fixtures/core.scale/title/align-end.png differ diff --git a/test/fixtures/core.scale/title/align-start.png b/test/fixtures/core.scale/title/align-start.png index 7a1317ec1..21ffbea26 100644 Binary files a/test/fixtures/core.scale/title/align-start.png and b/test/fixtures/core.scale/title/align-start.png differ diff --git a/test/fixtures/core.scale/title/multi-line/align-end.png b/test/fixtures/core.scale/title/multi-line/align-end.png index 155da25ec..326db59e5 100644 Binary files a/test/fixtures/core.scale/title/multi-line/align-end.png and b/test/fixtures/core.scale/title/multi-line/align-end.png differ diff --git a/test/fixtures/core.scale/title/multi-line/align-start.png b/test/fixtures/core.scale/title/multi-line/align-start.png index dcba4607a..b653aa5b6 100644 Binary files a/test/fixtures/core.scale/title/multi-line/align-start.png and b/test/fixtures/core.scale/title/multi-line/align-start.png differ diff --git a/test/fixtures/core.scale/x-axis-position-center.png b/test/fixtures/core.scale/x-axis-position-center.png index f98457085..284056f50 100644 Binary files a/test/fixtures/core.scale/x-axis-position-center.png and b/test/fixtures/core.scale/x-axis-position-center.png differ diff --git a/test/fixtures/core.scale/x-axis-position-dynamic.png b/test/fixtures/core.scale/x-axis-position-dynamic.png index cfee585b6..62fc3ec86 100644 Binary files a/test/fixtures/core.scale/x-axis-position-dynamic.png and b/test/fixtures/core.scale/x-axis-position-dynamic.png differ diff --git a/test/fixtures/core.scale/y-axis-position-center.png b/test/fixtures/core.scale/y-axis-position-center.png index 5d741d188..a2e6f0110 100644 Binary files a/test/fixtures/core.scale/y-axis-position-center.png and b/test/fixtures/core.scale/y-axis-position-center.png differ diff --git a/test/fixtures/core.scale/y-axis-position-dynamic.png b/test/fixtures/core.scale/y-axis-position-dynamic.png index 33863ea8f..a3a38a5d1 100644 Binary files a/test/fixtures/core.scale/y-axis-position-dynamic.png and b/test/fixtures/core.scale/y-axis-position-dynamic.png differ diff --git a/test/fixtures/mixed/bar+line.png b/test/fixtures/mixed/bar+line.png index e366a8aa0..921a510fd 100644 Binary files a/test/fixtures/mixed/bar+line.png and b/test/fixtures/mixed/bar+line.png differ diff --git a/test/fixtures/scale.category/ticks-from-data.png b/test/fixtures/scale.category/ticks-from-data.png index 9c3fc405e..8bc1d66e9 100644 Binary files a/test/fixtures/scale.category/ticks-from-data.png and b/test/fixtures/scale.category/ticks-from-data.png differ diff --git a/test/fixtures/scale.linear/grace-neg.png b/test/fixtures/scale.linear/grace-neg.png index fbe444b38..76ffd239d 100644 Binary files a/test/fixtures/scale.linear/grace-neg.png and b/test/fixtures/scale.linear/grace-neg.png differ diff --git a/test/fixtures/scale.linear/grace-pos.png b/test/fixtures/scale.linear/grace-pos.png index e6b654505..bb902fee9 100644 Binary files a/test/fixtures/scale.linear/grace-pos.png and b/test/fixtures/scale.linear/grace-pos.png differ diff --git a/test/fixtures/scale.linear/grace.png b/test/fixtures/scale.linear/grace.png index b7556e412..5e4539682 100644 Binary files a/test/fixtures/scale.linear/grace.png and b/test/fixtures/scale.linear/grace.png differ diff --git a/test/fixtures/scale.linear/min-max-skip.png b/test/fixtures/scale.linear/min-max-skip.png index 9141f8d20..1ede56493 100644 Binary files a/test/fixtures/scale.linear/min-max-skip.png and b/test/fixtures/scale.linear/min-max-skip.png differ diff --git a/test/fixtures/scale.linear/tick-count-data-limits.png b/test/fixtures/scale.linear/tick-count-data-limits.png index bb365bcd1..fd3f4ebbd 100644 Binary files a/test/fixtures/scale.linear/tick-count-data-limits.png and b/test/fixtures/scale.linear/tick-count-data-limits.png differ diff --git a/test/fixtures/scale.linear/tick-count-min-max-not-aligned.png b/test/fixtures/scale.linear/tick-count-min-max-not-aligned.png index dea42ece5..6e4b21d9f 100644 Binary files a/test/fixtures/scale.linear/tick-count-min-max-not-aligned.png and b/test/fixtures/scale.linear/tick-count-min-max-not-aligned.png differ diff --git a/test/fixtures/scale.linear/tick-count-min-max.png b/test/fixtures/scale.linear/tick-count-min-max.png index dcba5ad84..a82179124 100644 Binary files a/test/fixtures/scale.linear/tick-count-min-max.png and b/test/fixtures/scale.linear/tick-count-min-max.png differ diff --git a/test/fixtures/scale.linear/tick-step-min-max.png b/test/fixtures/scale.linear/tick-step-min-max.png index dea42ece5..6e4b21d9f 100644 Binary files a/test/fixtures/scale.linear/tick-step-min-max.png and b/test/fixtures/scale.linear/tick-step-min-max.png differ diff --git a/test/fixtures/scale.linear/tiny-numbers.png b/test/fixtures/scale.linear/tiny-numbers.png index bc537d10a..a336cd10e 100644 Binary files a/test/fixtures/scale.linear/tiny-numbers.png and b/test/fixtures/scale.linear/tiny-numbers.png differ diff --git a/test/fixtures/scale.time/autoskip-major.png b/test/fixtures/scale.time/autoskip-major.png index 6888ad636..0c1d3a323 100644 Binary files a/test/fixtures/scale.time/autoskip-major.png and b/test/fixtures/scale.time/autoskip-major.png differ diff --git a/test/fixtures/scale.time/custom-parser.js b/test/fixtures/scale.time/custom-parser.js index e3496e04f..8a449a39e 100644 --- a/test/fixtures/scale.time/custom-parser.js +++ b/test/fixtures/scale.time/custom-parser.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0025, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/custom-parser.png b/test/fixtures/scale.time/custom-parser.png index 4c41f5ad0..adc1d7682 100644 Binary files a/test/fixtures/scale.time/custom-parser.png and b/test/fixtures/scale.time/custom-parser.png differ diff --git a/test/fixtures/scale.time/data-ty.js b/test/fixtures/scale.time/data-ty.js index 5565c3e0d..0b0bb5327 100644 --- a/test/fixtures/scale.time/data-ty.js +++ b/test/fixtures/scale.time/data-ty.js @@ -4,6 +4,7 @@ function newDateFromRef(days) { module.exports = { threshold: 0.01, + tolerance: 0.003, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/data-ty.png b/test/fixtures/scale.time/data-ty.png index db373eb14..c1a05e72a 100644 Binary files a/test/fixtures/scale.time/data-ty.png and b/test/fixtures/scale.time/data-ty.png differ diff --git a/test/fixtures/scale.time/data-xy.js b/test/fixtures/scale.time/data-xy.js index 4e582a297..759fdf3d5 100644 --- a/test/fixtures/scale.time/data-xy.js +++ b/test/fixtures/scale.time/data-xy.js @@ -4,6 +4,7 @@ function newDateFromRef(days) { module.exports = { threshold: 0.01, + tolerance: 0.003, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/data-xy.png b/test/fixtures/scale.time/data-xy.png index db373eb14..c1a05e72a 100644 Binary files a/test/fixtures/scale.time/data-xy.png and b/test/fixtures/scale.time/data-xy.png differ diff --git a/test/fixtures/scale.time/invalid-data.png b/test/fixtures/scale.time/invalid-data.png index 2257064a2..60c1ec16f 100644 Binary files a/test/fixtures/scale.time/invalid-data.png and b/test/fixtures/scale.time/invalid-data.png differ diff --git a/test/fixtures/scale.time/labels-date.js b/test/fixtures/scale.time/labels-date.js index 2a79b6fa2..165f9ab14 100644 --- a/test/fixtures/scale.time/labels-date.js +++ b/test/fixtures/scale.time/labels-date.js @@ -3,7 +3,8 @@ function newDateFromRef(days) { } module.exports = { - threshold: 0.01, + threshold: 0.1, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/labels-date.png b/test/fixtures/scale.time/labels-date.png index ac95ea0cd..865729c65 100644 Binary files a/test/fixtures/scale.time/labels-date.png and b/test/fixtures/scale.time/labels-date.png differ diff --git a/test/fixtures/scale.time/labels-strings.js b/test/fixtures/scale.time/labels-strings.js index c9e83075c..2417c48e6 100644 --- a/test/fixtures/scale.time/labels-strings.js +++ b/test/fixtures/scale.time/labels-strings.js @@ -1,5 +1,6 @@ module.exports = { - threshold: 0.01, + threshold: 0.05, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/labels-strings.png b/test/fixtures/scale.time/labels-strings.png index ac95ea0cd..865729c65 100644 Binary files a/test/fixtures/scale.time/labels-strings.png and b/test/fixtures/scale.time/labels-strings.png differ diff --git a/test/fixtures/scale.time/labels.js b/test/fixtures/scale.time/labels.js index 6f63c191d..0ec95e019 100644 --- a/test/fixtures/scale.time/labels.js +++ b/test/fixtures/scale.time/labels.js @@ -8,6 +8,7 @@ var timeOpts = { module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/labels.png b/test/fixtures/scale.time/labels.png index 5170f5131..a6c3db6a0 100644 Binary files a/test/fixtures/scale.time/labels.png and b/test/fixtures/scale.time/labels.png differ diff --git a/test/fixtures/scale.time/negative-times.png b/test/fixtures/scale.time/negative-times.png index 7f0a88149..8bb66db48 100644 Binary files a/test/fixtures/scale.time/negative-times.png and b/test/fixtures/scale.time/negative-times.png differ diff --git a/test/fixtures/scale.time/offset-with-no-ticks.png b/test/fixtures/scale.time/offset-with-no-ticks.png index 9bea4ec59..a43c8c006 100644 Binary files a/test/fixtures/scale.time/offset-with-no-ticks.png and b/test/fixtures/scale.time/offset-with-no-ticks.png differ diff --git a/test/fixtures/scale.time/source-auto-linear.js b/test/fixtures/scale.time/source-auto-linear.js index a7bfc60db..3313ecd29 100644 --- a/test/fixtures/scale.time/source-auto-linear.js +++ b/test/fixtures/scale.time/source-auto-linear.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0025, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/source-auto-linear.png b/test/fixtures/scale.time/source-auto-linear.png index 004842c46..fb668ecc2 100644 Binary files a/test/fixtures/scale.time/source-auto-linear.png and b/test/fixtures/scale.time/source-auto-linear.png differ diff --git a/test/fixtures/scale.time/source-data-linear.js b/test/fixtures/scale.time/source-data-linear.js index a9d9742c3..34c00ba81 100644 --- a/test/fixtures/scale.time/source-data-linear.js +++ b/test/fixtures/scale.time/source-data-linear.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/source-data-linear.png b/test/fixtures/scale.time/source-data-linear.png index bfff4d846..3b4d1a03c 100644 Binary files a/test/fixtures/scale.time/source-data-linear.png and b/test/fixtures/scale.time/source-data-linear.png differ diff --git a/test/fixtures/scale.time/source-labels-linear-offset-min-max.js b/test/fixtures/scale.time/source-labels-linear-offset-min-max.js index a09b83238..4b54a3d07 100644 --- a/test/fixtures/scale.time/source-labels-linear-offset-min-max.js +++ b/test/fixtures/scale.time/source-labels-linear-offset-min-max.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/source-labels-linear-offset-min-max.png b/test/fixtures/scale.time/source-labels-linear-offset-min-max.png index 3d7ed5d5d..f7c2fbe9d 100644 Binary files a/test/fixtures/scale.time/source-labels-linear-offset-min-max.png and b/test/fixtures/scale.time/source-labels-linear-offset-min-max.png differ diff --git a/test/fixtures/scale.time/source-labels-linear.js b/test/fixtures/scale.time/source-labels-linear.js index 19aebba64..69565ff7e 100644 --- a/test/fixtures/scale.time/source-labels-linear.js +++ b/test/fixtures/scale.time/source-labels-linear.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/source-labels-linear.png b/test/fixtures/scale.time/source-labels-linear.png index bfff4d846..3b4d1a03c 100644 Binary files a/test/fixtures/scale.time/source-labels-linear.png and b/test/fixtures/scale.time/source-labels-linear.png differ diff --git a/test/fixtures/scale.time/ticks-capacity.js b/test/fixtures/scale.time/ticks-capacity.js index 8cc6200dc..225bc9164 100644 --- a/test/fixtures/scale.time/ticks-capacity.js +++ b/test/fixtures/scale.time/ticks-capacity.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-capacity.png b/test/fixtures/scale.time/ticks-capacity.png index 9c5524d95..b17a91cb8 100644 Binary files a/test/fixtures/scale.time/ticks-capacity.png and b/test/fixtures/scale.time/ticks-capacity.png differ diff --git a/test/fixtures/scale.time/ticks-minunit.js b/test/fixtures/scale.time/ticks-minunit.js index 05b9595f5..438366019 100644 --- a/test/fixtures/scale.time/ticks-minunit.js +++ b/test/fixtures/scale.time/ticks-minunit.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-minunit.png b/test/fixtures/scale.time/ticks-minunit.png index 861870dd0..dbe322145 100644 Binary files a/test/fixtures/scale.time/ticks-minunit.png and b/test/fixtures/scale.time/ticks-minunit.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-linear-min-max.js b/test/fixtures/scale.time/ticks-reverse-linear-min-max.js index 0f5a10801..6785fdf13 100644 --- a/test/fixtures/scale.time/ticks-reverse-linear-min-max.js +++ b/test/fixtures/scale.time/ticks-reverse-linear-min-max.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-reverse-linear-min-max.png b/test/fixtures/scale.time/ticks-reverse-linear-min-max.png index 5638c06df..01c9c7631 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-linear-min-max.png and b/test/fixtures/scale.time/ticks-reverse-linear-min-max.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-linear.png b/test/fixtures/scale.time/ticks-reverse-linear.png index 10c62a2f9..992504c1c 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-linear.png and b/test/fixtures/scale.time/ticks-reverse-linear.png differ diff --git a/test/fixtures/scale.time/ticks-reverse-offset.js b/test/fixtures/scale.time/ticks-reverse-offset.js index 7975115c5..37a3ebb89 100644 --- a/test/fixtures/scale.time/ticks-reverse-offset.js +++ b/test/fixtures/scale.time/ticks-reverse-offset.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-reverse-offset.png b/test/fixtures/scale.time/ticks-reverse-offset.png index 4744479f4..91ed7304f 100644 Binary files a/test/fixtures/scale.time/ticks-reverse-offset.png and b/test/fixtures/scale.time/ticks-reverse-offset.png differ diff --git a/test/fixtures/scale.time/ticks-reverse.js b/test/fixtures/scale.time/ticks-reverse.js index fd8daab71..02df39fce 100644 --- a/test/fixtures/scale.time/ticks-reverse.js +++ b/test/fixtures/scale.time/ticks-reverse.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-reverse.png b/test/fixtures/scale.time/ticks-reverse.png index 383e5eec1..7fb014439 100644 Binary files a/test/fixtures/scale.time/ticks-reverse.png and b/test/fixtures/scale.time/ticks-reverse.png differ diff --git a/test/fixtures/scale.time/ticks-round.png b/test/fixtures/scale.time/ticks-round.png index e969ba136..eb1317eaa 100644 Binary files a/test/fixtures/scale.time/ticks-round.png and b/test/fixtures/scale.time/ticks-round.png differ diff --git a/test/fixtures/scale.time/ticks-stepsize.png b/test/fixtures/scale.time/ticks-stepsize.png index 005f38b61..bb192fb0c 100644 Binary files a/test/fixtures/scale.time/ticks-stepsize.png and b/test/fixtures/scale.time/ticks-stepsize.png differ diff --git a/test/fixtures/scale.time/ticks-unit.js b/test/fixtures/scale.time/ticks-unit.js index b725c5ff1..b18150b07 100644 --- a/test/fixtures/scale.time/ticks-unit.js +++ b/test/fixtures/scale.time/ticks-unit.js @@ -1,5 +1,6 @@ module.exports = { - threshold: 0.01, + threshold: 0.05, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.time/ticks-unit.png b/test/fixtures/scale.time/ticks-unit.png index 08210e77b..a9867b489 100644 Binary files a/test/fixtures/scale.time/ticks-unit.png and b/test/fixtures/scale.time/ticks-unit.png differ diff --git a/test/fixtures/scale.timeseries/financial-daily.js b/test/fixtures/scale.timeseries/financial-daily.js index 249572f2b..465f70f3d 100644 --- a/test/fixtures/scale.timeseries/financial-daily.js +++ b/test/fixtures/scale.timeseries/financial-daily.js @@ -2,6 +2,7 @@ const data = [{x: 631180800000, y: 31.80}, {x: 631267200000, y: 30.20}, {x: 6313 module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { data: { datasets: [{ diff --git a/test/fixtures/scale.timeseries/financial-daily.png b/test/fixtures/scale.timeseries/financial-daily.png index 1daf5786a..659c0a1da 100644 Binary files a/test/fixtures/scale.timeseries/financial-daily.png and b/test/fixtures/scale.timeseries/financial-daily.png differ diff --git a/test/fixtures/scale.timeseries/normalize.js b/test/fixtures/scale.timeseries/normalize.js index b87b30e3d..af1d8c042 100644 --- a/test/fixtures/scale.timeseries/normalize.js +++ b/test/fixtures/scale.timeseries/normalize.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/normalize.png b/test/fixtures/scale.timeseries/normalize.png index 37d90a43f..ea7fb8ce2 100644 Binary files a/test/fixtures/scale.timeseries/normalize.png and b/test/fixtures/scale.timeseries/normalize.png differ diff --git a/test/fixtures/scale.timeseries/source-auto.js b/test/fixtures/scale.timeseries/source-auto.js index e53922bb4..814943775 100644 --- a/test/fixtures/scale.timeseries/source-auto.js +++ b/test/fixtures/scale.timeseries/source-auto.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0025, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/source-auto.png b/test/fixtures/scale.timeseries/source-auto.png index c1a9facf6..532509c39 100644 Binary files a/test/fixtures/scale.timeseries/source-auto.png and b/test/fixtures/scale.timeseries/source-auto.png differ diff --git a/test/fixtures/scale.timeseries/source-data-offset-min-max.js b/test/fixtures/scale.timeseries/source-data-offset-min-max.js index e63b5dc5e..84e9a2652 100644 --- a/test/fixtures/scale.timeseries/source-data-offset-min-max.js +++ b/test/fixtures/scale.timeseries/source-data-offset-min-max.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/source-data-offset-min-max.png b/test/fixtures/scale.timeseries/source-data-offset-min-max.png index 35c950904..a23747193 100644 Binary files a/test/fixtures/scale.timeseries/source-data-offset-min-max.png and b/test/fixtures/scale.timeseries/source-data-offset-min-max.png differ diff --git a/test/fixtures/scale.timeseries/source-data.js b/test/fixtures/scale.timeseries/source-data.js index 2601cb351..ae3a3e1cc 100644 --- a/test/fixtures/scale.timeseries/source-data.js +++ b/test/fixtures/scale.timeseries/source-data.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/source-data.png b/test/fixtures/scale.timeseries/source-data.png index f1f8665fd..b352b93f2 100644 Binary files a/test/fixtures/scale.timeseries/source-data.png and b/test/fixtures/scale.timeseries/source-data.png differ diff --git a/test/fixtures/scale.timeseries/source-labels-offset-min-max.js b/test/fixtures/scale.timeseries/source-labels-offset-min-max.js index 9c71c6557..897a2fd75 100644 --- a/test/fixtures/scale.timeseries/source-labels-offset-min-max.js +++ b/test/fixtures/scale.timeseries/source-labels-offset-min-max.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/source-labels-offset-min-max.png b/test/fixtures/scale.timeseries/source-labels-offset-min-max.png index 35c950904..a23747193 100644 Binary files a/test/fixtures/scale.timeseries/source-labels-offset-min-max.png and b/test/fixtures/scale.timeseries/source-labels-offset-min-max.png differ diff --git a/test/fixtures/scale.timeseries/source-labels.js b/test/fixtures/scale.timeseries/source-labels.js index 0087f4a56..8b02c83d1 100644 --- a/test/fixtures/scale.timeseries/source-labels.js +++ b/test/fixtures/scale.timeseries/source-labels.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/source-labels.png b/test/fixtures/scale.timeseries/source-labels.png index f1f8665fd..b352b93f2 100644 Binary files a/test/fixtures/scale.timeseries/source-labels.png and b/test/fixtures/scale.timeseries/source-labels.png differ diff --git a/test/fixtures/scale.timeseries/ticks-reverse-max.png b/test/fixtures/scale.timeseries/ticks-reverse-max.png index 6ba3fabb4..1189549db 100644 Binary files a/test/fixtures/scale.timeseries/ticks-reverse-max.png and b/test/fixtures/scale.timeseries/ticks-reverse-max.png differ diff --git a/test/fixtures/scale.timeseries/ticks-reverse-min-max.js b/test/fixtures/scale.timeseries/ticks-reverse-min-max.js index 4d892b650..4222a2e8d 100644 --- a/test/fixtures/scale.timeseries/ticks-reverse-min-max.js +++ b/test/fixtures/scale.timeseries/ticks-reverse-min-max.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.002, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/ticks-reverse-min-max.png b/test/fixtures/scale.timeseries/ticks-reverse-min-max.png index 490c68dda..f6c66ec67 100644 Binary files a/test/fixtures/scale.timeseries/ticks-reverse-min-max.png and b/test/fixtures/scale.timeseries/ticks-reverse-min-max.png differ diff --git a/test/fixtures/scale.timeseries/ticks-reverse-min.png b/test/fixtures/scale.timeseries/ticks-reverse-min.png index 340557d4b..97315b374 100644 Binary files a/test/fixtures/scale.timeseries/ticks-reverse-min.png and b/test/fixtures/scale.timeseries/ticks-reverse-min.png differ diff --git a/test/fixtures/scale.timeseries/ticks-reverse.js b/test/fixtures/scale.timeseries/ticks-reverse.js index 237b473d7..f71c6d8e8 100644 --- a/test/fixtures/scale.timeseries/ticks-reverse.js +++ b/test/fixtures/scale.timeseries/ticks-reverse.js @@ -1,5 +1,6 @@ module.exports = { threshold: 0.01, + tolerance: 0.0015, config: { type: 'line', data: { diff --git a/test/fixtures/scale.timeseries/ticks-reverse.png b/test/fixtures/scale.timeseries/ticks-reverse.png index 5de56dcd1..d7d13f4ee 100644 Binary files a/test/fixtures/scale.timeseries/ticks-reverse.png and b/test/fixtures/scale.timeseries/ticks-reverse.png differ diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index 08436e93b..fc3a601ed 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -1485,8 +1485,8 @@ describe('Chart', function() { 'afterDataLimits', 'beforeBuildTicks', 'afterBuildTicks', - 'beforeBuildTicks', // y-axis re-fit - 'afterBuildTicks', + // 'beforeBuildTicks', // y-axis re-fit + // 'afterBuildTicks', 'afterLayout', 'beforeDatasetsUpdate', 'beforeDatasetUpdate', diff --git a/test/specs/core.layouts.tests.js b/test/specs/core.layouts.tests.js index ee70b2ea7..67a3d4b93 100644 --- a/test/specs/core.layouts.tests.js +++ b/test/specs/core.layouts.tests.js @@ -31,21 +31,21 @@ describe('Chart.layouts', function() { }); expect(chart.chartArea.bottom).toBeCloseToPixel(120); - expect(chart.chartArea.left).toBeCloseToPixel(34); - expect(chart.chartArea.right).toBeCloseToPixel(247); + expect(chart.chartArea.left).toBeCloseToPixel(31); + expect(chart.chartArea.right).toBeCloseToPixel(250); expect(chart.chartArea.top).toBeCloseToPixel(32); // Is xScale at the right spot expect(chart.scales.x.bottom).toBeCloseToPixel(150); - expect(chart.scales.x.left).toBeCloseToPixel(34); - expect(chart.scales.x.right).toBeCloseToPixel(247); + expect(chart.scales.x.left).toBeCloseToPixel(31); + expect(chart.scales.x.right).toBeCloseToPixel(250); expect(chart.scales.x.top).toBeCloseToPixel(120); expect(chart.scales.x.labelRotation).toBeCloseTo(0); // Is yScale at the right spot expect(chart.scales.y.bottom).toBeCloseToPixel(120); expect(chart.scales.y.left).toBeCloseToPixel(0); - expect(chart.scales.y.right).toBeCloseToPixel(34); + expect(chart.scales.y.right).toBeCloseToPixel(31); expect(chart.scales.y.top).toBeCloseToPixel(32); expect(chart.scales.y.labelRotation).toBeCloseTo(0); }); @@ -78,21 +78,21 @@ describe('Chart.layouts', function() { } }); - expect(chart.chartArea.bottom).toBeCloseToPixel(142); - expect(chart.chartArea.left).toBeCloseToPixel(3); - expect(chart.chartArea.right).toBeCloseToPixel(216); + expect(chart.chartArea.bottom).toBeCloseToPixel(139); + expect(chart.chartArea.left).toBeCloseToPixel(0); + expect(chart.chartArea.right).toBeCloseToPixel(218); expect(chart.chartArea.top).toBeCloseToPixel(62); // Is xScale at the right spot expect(chart.scales.x.bottom).toBeCloseToPixel(62); - expect(chart.scales.x.left).toBeCloseToPixel(3); - expect(chart.scales.x.right).toBeCloseToPixel(216); + expect(chart.scales.x.left).toBeCloseToPixel(0); + expect(chart.scales.x.right).toBeCloseToPixel(218); expect(chart.scales.x.top).toBeCloseToPixel(32); expect(chart.scales.x.labelRotation).toBeCloseTo(0); // Is yScale at the right spot - expect(chart.scales.y.bottom).toBeCloseToPixel(142); - expect(chart.scales.y.left).toBeCloseToPixel(216); + expect(chart.scales.y.bottom).toBeCloseToPixel(139); + expect(chart.scales.y.left).toBeCloseToPixel(218); expect(chart.scales.y.right).toBeCloseToPixel(250); expect(chart.scales.y.top).toBeCloseToPixel(62); expect(chart.scales.y.labelRotation).toBeCloseTo(0); @@ -158,28 +158,28 @@ describe('Chart.layouts', function() { } }); - expect(chart.chartArea.bottom).toBeCloseToPixel(118); - expect(chart.chartArea.left).toBeCloseToPixel(73); - expect(chart.chartArea.right).toBeCloseToPixel(247); + expect(chart.chartArea.bottom).toBeCloseToPixel(110); + expect(chart.chartArea.left).toBeCloseToPixel(70); + expect(chart.chartArea.right).toBeCloseToPixel(250); expect(chart.chartArea.top).toBeCloseToPixel(32); // Is xScale at the right spot expect(chart.scales.x.bottom).toBeCloseToPixel(150); - expect(chart.scales.x.left).toBeCloseToPixel(73); - expect(chart.scales.x.right).toBeCloseToPixel(247); - expect(chart.scales.x.top).toBeCloseToPixel(118); + expect(chart.scales.x.left).toBeCloseToPixel(70); + expect(chart.scales.x.right).toBeCloseToPixel(250); + expect(chart.scales.x.top).toBeCloseToPixel(110); expect(chart.scales.x.labelRotation).toBeCloseTo(40, -1); // Are yScales at the right spot - expect(chart.scales.y.bottom).toBeCloseToPixel(118); - expect(chart.scales.y.left).toBeCloseToPixel(41); - expect(chart.scales.y.right).toBeCloseToPixel(73); + expect(chart.scales.y.bottom).toBeCloseToPixel(110); + expect(chart.scales.y.left).toBeCloseToPixel(38); + expect(chart.scales.y.right).toBeCloseToPixel(70); expect(chart.scales.y.top).toBeCloseToPixel(32); expect(chart.scales.y.labelRotation).toBeCloseTo(0); - expect(chart.scales.y2.bottom).toBeCloseToPixel(118); + expect(chart.scales.y2.bottom).toBeCloseToPixel(110); expect(chart.scales.y2.left).toBeCloseToPixel(0); - expect(chart.scales.y2.right).toBeCloseToPixel(41); + expect(chart.scales.y2.right).toBeCloseToPixel(38); expect(chart.scales.y2.top).toBeCloseToPixel(32); expect(chart.scales.y2.labelRotation).toBeCloseTo(0); }); @@ -217,13 +217,13 @@ describe('Chart.layouts', function() { }); expect(chart.chartArea.bottom).toBeCloseToPixel(484); - expect(chart.chartArea.left).toBeCloseToPixel(40); + expect(chart.chartArea.left).toBeCloseToPixel(39); expect(chart.chartArea.right).toBeCloseToPixel(496); expect(chart.chartArea.top).toBeCloseToPixel(62); // Are xScales at the right spot expect(chart.scales.x.bottom).toBeCloseToPixel(512); - expect(chart.scales.x.left).toBeCloseToPixel(40); + expect(chart.scales.x.left).toBeCloseToPixel(39); expect(chart.scales.x.right).toBeCloseToPixel(496); expect(chart.scales.x.top).toBeCloseToPixel(484); @@ -235,7 +235,7 @@ describe('Chart.layouts', function() { // Is yScale at the right spot expect(chart.scales.y.bottom).toBeCloseToPixel(484); expect(chart.scales.y.left).toBeCloseToPixel(0); - expect(chart.scales.y.right).toBeCloseToPixel(40); + expect(chart.scales.y.right).toBeCloseToPixel(39); expect(chart.scales.y.top).toBeCloseToPixel(62); }); @@ -565,7 +565,7 @@ describe('Chart.layouts', function() { // issue #4441: y-axis labels partially hidden. // minimum horizontal space required to fit labels - expect(yAxis.width).toBeCloseToPixel(33); + expect(yAxis.width).toBeCloseToPixel(30); expect(getLabels(yAxis)).toEqual(['0', '0.5', '1.0', '1.5', '2.0', '2.5']); }); }); diff --git a/test/specs/platform.basic.tests.js b/test/specs/platform.basic.tests.js index 1ee7278b9..16b969912 100644 --- a/test/specs/platform.basic.tests.js +++ b/test/specs/platform.basic.tests.js @@ -53,8 +53,8 @@ describe('Platform.basic', function() { expect(chart.platform).toBeInstanceOf(Chart.platforms.BasicPlatform); expect(chart.chartArea.bottom).toBeCloseToPixel(120); - expect(chart.chartArea.left).toBeCloseToPixel(34); - expect(chart.chartArea.right).toBeCloseToPixel(247); + expect(chart.chartArea.left).toBeCloseToPixel(31); + expect(chart.chartArea.right).toBeCloseToPixel(250); expect(chart.chartArea.top).toBeCloseToPixel(32); }); @@ -83,8 +83,8 @@ describe('Platform.basic', function() { chart.resize(); expect(chart.chartArea.bottom).toBeCloseToPixel(150); - expect(chart.chartArea.left).toBeCloseToPixel(34); - expect(chart.chartArea.right).toBeCloseToPixel(297); + expect(chart.chartArea.left).toBeCloseToPixel(31); + expect(chart.chartArea.right).toBeCloseToPixel(300); expect(chart.chartArea.top).toBeCloseToPixel(32); }); }); diff --git a/test/specs/scale.category.tests.js b/test/specs/scale.category.tests.js index 5fc3872e1..24bcf46b1 100644 --- a/test/specs/scale.category.tests.js +++ b/test/specs/scale.category.tests.js @@ -279,7 +279,7 @@ describe('Category scale tests', function() { expect(yScale.getPixelForValue(0)).toBeCloseToPixel(32); expect(yScale.getValueForPixel(257)).toBe(2); - expect(yScale.getPixelForValue(4)).toBeCloseToPixel(481); + expect(yScale.getPixelForValue(4)).toBeCloseToPixel(484); expect(yScale.getValueForPixel(144)).toBe(1); yScale.options.offset = true; @@ -288,7 +288,7 @@ describe('Category scale tests', function() { expect(yScale.getPixelForValue(0)).toBeCloseToPixel(77); expect(yScale.getValueForPixel(256)).toBe(2); - expect(yScale.getPixelForValue(4)).toBeCloseToPixel(436); + expect(yScale.getPixelForValue(4)).toBeCloseToPixel(438); expect(yScale.getValueForPixel(167)).toBe(1); }); @@ -402,7 +402,7 @@ describe('Category scale tests', function() { var yScale = chart.scales.y; expect(yScale.getPixelForValue(0)).toBeCloseToPixel(32); - expect(yScale.getPixelForValue(4)).toBeCloseToPixel(481); + expect(yScale.getPixelForValue(4)).toBeCloseToPixel(483); }); it('Should get the correct pixel for an object value in a bar chart', function() { @@ -437,8 +437,8 @@ describe('Category scale tests', function() { var xScale = chart.scales.x; expect(xScale.getPixelForValue(0)).toBeCloseToPixel(89); - expect(xScale.getPixelForValue(3)).toBeCloseToPixel(449); - expect(xScale.getPixelForValue(4)).toBeCloseToPixel(569); + expect(xScale.getPixelForValue(3)).toBeCloseToPixel(451); + expect(xScale.getPixelForValue(4)).toBeCloseToPixel(572); }); it('Should get the correct pixel for an object value in a horizontal bar chart', function() { diff --git a/test/specs/scale.linear.tests.js b/test/specs/scale.linear.tests.js index 364cbe76b..9ed464105 100644 --- a/test/specs/scale.linear.tests.js +++ b/test/specs/scale.linear.tests.js @@ -835,8 +835,8 @@ describe('Linear Scale', function() { var xScale = chart.scales.x; expect(xScale.getPixelForValue(1)).toBeCloseToPixel(501); // right - paddingRight - expect(xScale.getPixelForValue(-1)).toBeCloseToPixel(31 + 6); // left + paddingLeft + lineSpace - expect(xScale.getPixelForValue(0)).toBeCloseToPixel(266 + 6 / 2); // halfway*/ + expect(xScale.getPixelForValue(-1)).toBeCloseToPixel(31 + 3); // left + paddingLeft + tick padding + expect(xScale.getPixelForValue(0)).toBeCloseToPixel(266 + 3 / 2); // halfway*/ expect(xScale.getValueForPixel(501)).toBeCloseTo(1, 1e-2); expect(xScale.getValueForPixel(31)).toBeCloseTo(-1, 1e-2); @@ -893,14 +893,14 @@ describe('Linear Scale', function() { expect(xScale.paddingBottom).toBeCloseToPixel(0); expect(xScale.paddingLeft).toBeCloseToPixel(12); expect(xScale.paddingRight).toBeCloseToPixel(13.5); - expect(xScale.width).toBeCloseToPixel(468 - 6); // minus lineSpace + expect(xScale.width).toBeCloseToPixel(468 - 3); // minus tick padding expect(xScale.height).toBeCloseToPixel(30); - expect(yScale.paddingTop).toBeCloseToPixel(7); - expect(yScale.paddingBottom).toBeCloseToPixel(7); + expect(yScale.paddingTop).toBeCloseToPixel(10); + expect(yScale.paddingBottom).toBeCloseToPixel(10); expect(yScale.paddingLeft).toBeCloseToPixel(0); expect(yScale.paddingRight).toBeCloseToPixel(0); - expect(yScale.width).toBeCloseToPixel(30 + 6); // plus lineSpace + expect(yScale.width).toBeCloseToPixel(31 + 3); // plus tick padding expect(yScale.height).toBeCloseToPixel(450); // Extra size when scale label showing @@ -912,15 +912,15 @@ describe('Linear Scale', function() { expect(xScale.paddingBottom).toBeCloseToPixel(0); expect(xScale.paddingLeft).toBeCloseToPixel(12); expect(xScale.paddingRight).toBeCloseToPixel(13.5); - expect(xScale.width).toBeCloseToPixel(440); - expect(xScale.height).toBeCloseToPixel(53); + expect(xScale.width).toBeCloseToPixel(442); + expect(xScale.height).toBeCloseToPixel(50); - expect(yScale.paddingTop).toBeCloseToPixel(7); - expect(yScale.paddingBottom).toBeCloseToPixel(7); + expect(yScale.paddingTop).toBeCloseToPixel(10); + expect(yScale.paddingBottom).toBeCloseToPixel(10); expect(yScale.paddingLeft).toBeCloseToPixel(0); expect(yScale.paddingRight).toBeCloseToPixel(0); expect(yScale.width).toBeCloseToPixel(58); - expect(yScale.height).toBeCloseToPixel(427); + expect(yScale.height).toBeCloseToPixel(429); }); it('should fit correctly when display is turned off', function() { diff --git a/test/specs/scale.time.tests.js b/test/specs/scale.time.tests.js index 9309ffd2b..e9fccdf8f 100644 --- a/test/specs/scale.time.tests.js +++ b/test/specs/scale.time.tests.js @@ -1114,7 +1114,7 @@ describe('Time scale tests', function() { }); const scale = chart.scales.x; expect(scale.getPixelForDecimal(0)).toBeCloseToPixel(29); - expect(scale.getPixelForDecimal(1.0)).toBeCloseToPixel(509); + expect(scale.getPixelForDecimal(1.0)).toBeCloseToPixel(512); }); ['data', 'labels'].forEach(function(source) {