blob: 62b926044cccf68c08ded158fd63b2622779aa2c [file] [log] [blame]
/*
* 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));
}
});
});
}