| /* |
| * Copyright 2014 Google Inc. All rights reserved. |
| * |
| * Use of this source code is governed by a BSD-style |
| * license that can be found in the LICENSE file or at |
| * https://developers.google.com/open-source/licenses/bsd |
| */ |
| |
| part of charted.test.layout; |
| |
| testPieLayout() { |
| List mockPieData = [ |
| [5, 5, 10], |
| [0, 0], |
| [4], |
| [10, 5, 5], // Case for sorting, results the same as the first case. |
| ]; |
| List mockPieAngle = [ |
| [[0, pi / 2], [pi / 2, pi], [pi, pi * 2]], |
| [[0, 0], [0, 0]], |
| [[0, 2 * pi]], |
| [[0, pi / 2], [pi / 2, pi], [pi, pi * 2]], |
| ]; |
| |
| group('PieLayout.startAngleCallback', () { |
| PieLayout pieLayout = new PieLayout(); |
| test('= 0 by default', () { |
| expect(pieLayout.startAngleCallback(null, 0, null), equals(0)); |
| }); |
| PieLayout pieLayout2 = new PieLayout(); |
| pieLayout2.startAngle = 0.4; |
| test('equals the manually set value after set by startAngle setter', () { |
| expect(pieLayout2.startAngleCallback(null, 0, null), equals(0.4)); |
| }); |
| }); |
| |
| group('PieLayout.endAngleCallback', () { |
| PieLayout pieLayout = new PieLayout(); |
| test('= 2 * PI by default', () { |
| expect(pieLayout.endAngleCallback(null, 0, null), equals(2 * pi)); |
| }); |
| PieLayout pieLayout2 = new PieLayout(); |
| pieLayout2.endAngle = 0.4; |
| test('equals the manually set value after set by endAngle setter', () { |
| expect(pieLayout2.endAngleCallback(null, 0, null), equals(0.4)); |
| }); |
| }); |
| |
| group('PieLayout.layout', () { |
| test('generates a list of SvgArcData object for pie-chart', () { |
| PieLayout pieLayout = new PieLayout(); |
| List slice = pieLayout.layout(mockPieData[0]); |
| for (var i = 0; i < 3; ++i) { |
| expect(slice[i].startAngle, closeTo(mockPieAngle[0][i][0], EPSILON)); |
| expect(slice[i].endAngle, closeTo(mockPieAngle[0][i][1], EPSILON)); |
| } |
| }); |
| test('generates zero-angled slice for total 0 data', () { |
| PieLayout pieLayout = new PieLayout(); |
| List slice = pieLayout.layout(mockPieData[1]); |
| for (var i = 0; i < 2; ++i) { |
| expect(slice[i].startAngle, closeTo(mockPieAngle[1][i][0], EPSILON)); |
| expect(slice[i].endAngle, closeTo(mockPieAngle[1][i][1], EPSILON)); |
| } |
| }); |
| test('generates concentric pie sector for solo non-zero data', () { |
| PieLayout pieLayout = new PieLayout(); |
| List slice = pieLayout.layout(mockPieData[2]); |
| expect(slice[0].startAngle, closeTo(mockPieAngle[2][0][0], EPSILON)); |
| expect(slice[0].endAngle, closeTo(mockPieAngle[2][0][1], EPSILON)); |
| }); |
| test('supports sorting data', () { |
| PieLayout pieLayout = new PieLayout(); |
| pieLayout.compare = (num a, num b) => (a - b).ceil(); |
| List slice = pieLayout.layout(mockPieData[3]); |
| for (var i = 0; i < 3; ++i) { |
| expect(slice[i].startAngle, closeTo(mockPieAngle[3][i][0], EPSILON)); |
| expect(slice[i].endAngle, closeTo(mockPieAngle[3][i][1], EPSILON)); |
| } |
| }); |
| }); |
| } |