]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Check some more data on the linear scale after fitting
authorEvert Timberg <evert.timberg@gmail.com>
Mon, 31 Aug 2015 01:50:41 +0000 (21:50 -0400)
committerEvert Timberg <evert.timberg@gmail.com>
Mon, 31 Aug 2015 01:50:41 +0000 (21:50 -0400)
test/scale.linear.tests.js

index f0ac83c392f3f86d68d2ca8875823a7e288573ab..811876ab0d8dde4fde604af3c9da1fc377b54745 100644 (file)
@@ -162,6 +162,47 @@ describe('Linear Scale', function() {
                expect(scale.max).toBe(1);
        });
 
+       it ('should forcibly include 0 in the range if the beginAtZero option is used', function() {
+               var scaleID = 'myScale';
+
+               var mockData = {
+                       datasets: [{
+                               yAxisID: scaleID,
+                               data: [20, 30, 40, 50]
+                       }]
+               };
+
+               var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('linear'));
+               
+
+               var Constructor = Chart.scaleService.getScaleConstructor('linear');
+               var scale = new Constructor({
+                       ctx: {},
+                       options: config,
+                       data: mockData,
+                       id: scaleID
+               });
+
+               scale.calculateRange();
+               scale.generateTicks(400, 400);
+               expect(scale.ticks).toEqual([50, 45, 40, 35, 30, 25, 20]);
+
+               config.beginAtZero = true;
+               scale.calculateRange();
+               scale.generateTicks(400, 400);
+               expect(scale.ticks).toEqual([50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0]);
+
+               mockData.datasets[0].data = [-20, -30, -40, -50];
+               scale.calculateRange();
+               scale.generateTicks(400, 400);
+               expect(scale.ticks).toEqual([0, -5, -10, -15, -20, -25, -30, -35, -40, -45, -50]);
+
+               config.beginAtZero = false;
+               scale.calculateRange();
+               scale.generateTicks(400, 400);
+               expect(scale.ticks).toEqual([-20, -25, -30, -35, -40, -45, -50]);
+       });
+
        it ('Should generate tick marks', function() {
                var scaleID = 'myScale';
 
@@ -406,4 +447,86 @@ describe('Linear Scale', function() {
                expect(horizontalScale.getPointPixelForValue(-2, 0, 0)).toBe(5); // left + paddingLeft
                expect(horizontalScale.getPointPixelForValue(0, 0, 0)).toBe(55); // halfway
        });
+
+       it ('should get the correct pixel value for a bar', function() {
+               var scaleID = 'myScale';
+
+               var mockData = {
+                       datasets: [{
+                               xAxisID: scaleID, // for the horizontal scale
+                               yAxisID: scaleID,
+                               data: [-5, 0, 2, -3, 5]
+                       }]
+               };
+
+               var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('linear'));
+               var Constructor = Chart.scaleService.getScaleConstructor('linear');
+               var verticalScale = new Constructor({
+                       ctx: {},
+                       options: config,
+                       data: mockData,
+                       id: scaleID
+               });
+
+               verticalScale.calculateRange();
+               verticalScale.generateTicks(50, 100);
+
+               // Fake out positioning of the scale service
+               verticalScale.left = 0;
+               verticalScale.top = 0;
+               verticalScale.right = 50;
+               verticalScale.bottom = 110;
+               verticalScale.paddingTop = 5;
+               verticalScale.paddingBottom = 5;
+               verticalScale.width = 50;
+               verticalScale.height = 110;
+
+               expect(verticalScale.calculateBarBase()).toBe(56); // 0 point
+               expect(verticalScale.calculateBarY(0, 0)).toBe(96.66666666666667); // bottom
+       });
+
+       it ('should fit correctly', function() {
+               var scaleID = 'myScale';
+
+               var mockData = {
+                       datasets: [{
+                               xAxisID: scaleID, // for the horizontal scale
+                               yAxisID: scaleID,
+                               data: [-5, 0, 2, -3, 5]
+                       }]
+               };
+               var mockContext = window.createMockContext();
+
+               var config = Chart.helpers.clone(Chart.scaleService.getScaleDefaults('linear'));
+               var Constructor = Chart.scaleService.getScaleConstructor('linear');
+               var verticalScale = new Constructor({
+                       ctx: mockContext,
+                       options: config,
+                       data: mockData,
+                       id: scaleID
+               });
+
+               var minSize = verticalScale.fit(100, 300);
+               expect(minSize).toEqual({
+                       width: 33,
+                       height: 300,
+               });
+               expect(verticalScale.width).toBe(33);
+               expect(verticalScale.height).toBe(300);
+               expect(verticalScale.paddingTop).toBe(6);
+               expect(verticalScale.paddingBottom).toBe(6);
+               expect(verticalScale.paddingLeft).toBe(0);
+               expect(verticalScale.paddingRight).toBe(0);
+
+               // Refit with margins to see the padding go away
+               minSize = verticalScale.fit(33, 300, {left: 0, right: 0, top: 15, bottom: 3});
+               expect(minSize).toEqual({
+                       width: 33,
+                       height: 300,
+               });
+               expect(verticalScale.paddingTop).toBe(0);
+               expect(verticalScale.paddingBottom).toBe(3);
+               expect(verticalScale.paddingLeft).toBe(0);
+               expect(verticalScale.paddingRight).toBe(0);
+       });
 });
\ No newline at end of file