Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Unified Diff: packages/charted/test.disabled/charts/renderers/pie_chart_renderer_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: packages/charted/test.disabled/charts/renderers/pie_chart_renderer_test.dart
diff --git a/packages/charted/test.disabled/charts/renderers/pie_chart_renderer_test.dart b/packages/charted/test.disabled/charts/renderers/pie_chart_renderer_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..163dd64157e5a40ba6b8c9a174aa58805e38d368
--- /dev/null
+++ b/packages/charted/test.disabled/charts/renderers/pie_chart_renderer_test.dart
@@ -0,0 +1,137 @@
+library charted.test.piechartrenderer;
+
+import 'dart:async';
+import 'dart:html';
+
+import 'package:charted/charts/charts.dart';
+import 'package:charted/core/core.dart';
+import 'package:charted/layout/layout.dart';
+import 'package:charted/svg/svg.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+ const CHART_WIDTH = 1000;
+ const CHART_HEIGHT = 400;
+
+ List COLUMNS = [
+ new ChartColumnSpec(label:'Country', type:ChartColumnSpec.TYPE_STRING),
+ new ChartColumnSpec(label:'statsList1'),
+ new ChartColumnSpec(label:'statsList2'),
+ new ChartColumnSpec(label:'statsList3')
+ ];
+
+ const List ROWS = const [
+ const['USA', 950, 500, 200],
+ const['Japan',150, 990, 200],
+ ];
+
+ ChartData data = new ChartData(COLUMNS, ROWS);
+ ChartConfig config;
+ ChartArea area;
+ Element host = new DivElement()..classes.add('host');
+
+ // Helper for constructing the SvgArcData of each slice of the pie.
+ List<SvgArcData> produceArcData(List rows) {
+ var arcDataList = [];
+ var layout = new PieLayout();
+ var innerRadius = 0;
+ // height is shorter than width.
+ var pieRadius = area.layout.renderArea.height / 2;
+ var outerRadius = pieRadius - 10;
+ var sliceRadius = (pieRadius - 10 - innerRadius) / rows.length;
+
+ for (var i = 0; i < rows.length; i++) {
+ var arcData = layout.layout(rows[i]);
+ arcData.forEach((e) {
+ e.innerRadius = outerRadius - sliceRadius * (i + 1) + 0.5;
+ e.outerRadius = outerRadius - sliceRadius * i;
+ });
+
+ arcDataList.addAll(arcData);
+ }
+
+ return arcDataList;
+ }
+
+ // Extracts the data used to compute each pie in the input.
+ List extractPieData() {
+ return new List()..addAll(area.data.rows.map((e) {
+ var row = [];
+ for (var measure in config.series.elementAt(0).measures) {
+ row.add(e[measure]);
+ }
+ return row;
+ }));
+ }
+
+ void checkRenderResult() {
+ // Check dimension of the chart element.
+ var chartElement = host.querySelector('.charted-chart');
+ expect(chartElement.attributes['width'], CHART_WIDTH.toString());
+ expect(chartElement.attributes['height'], CHART_HEIGHT.toString());
+
+ // Should have as much slicesList and statsList text as there are measures.
+ var rowGroups = host.querySelectorAll('.row-group');
+ var slicesList = [];
+ var statsList = [];
+ for (var rowGroup in rowGroups) {
+ slicesList.add(rowGroup.children.where((e) =>
+ e.classes.contains('pie-path')));
+ statsList.add(rowGroup.children.where((e) =>
+ e.classes.contains('statistic')));
+ expect(slicesList.last.length,
+ area.config.series.elementAt(0).measures.length);
+ expect(statsList.last.length,
+ area.config.series.elementAt(0).measures.length);
+ }
+
+ // Check offset for the actual render area.
+ var xOffset = area.layout.renderArea.width / 2;
+ var yOffset = area.layout.renderArea.height / 2;
+ expect(rowGroups.elementAt(0).attributes['transform'],
+ 'translate(${xOffset}, ${yOffset})');
+
+ // Tests all the text elements that show the percentage stats of each slice.
+ var pieRows = extractPieData();
+ for (var i = 0; i < statsList.length; i++) {
+ var pieData = pieRows.elementAt(i);
+ var sum = pieData.reduce((a, b) => a + b);
+ var textElements = statsList[i];
+ for (var j = 0; j < textElements.length; j++) {
+ var stat = textElements.elementAt(j);
+ num percentage = pieData.elementAt(j) / sum;
+ percentage.round();
+ expect((percentage * 100).round().toString() + '%', stat.text);
+ }
+ }
+
+ // Tests the path of each slices in each pie. Utilizing the PieLayout and
+ // SvgArc which is individually tested.
+ var arc = new SvgArc();
+ var arcDataList = produceArcData(pieRows);
+ for (var i = 0; i < slicesList.length; i++) {
+ var slices = slicesList[i]; // Slices of one pie.
+ for (var j = 0; j < slices.length; j++) {
+ expect(slices.elementAt(j).attributes['d'],
+ arc.path(arcDataList[i * slices.length + j], 0, host));
+ }
+ }
+ }
+
+ test('pie chart renderer test', () {
+ var chartAreaHost = new DivElement()..classes.add('chart-host'),
+ series = new ChartSeries('pie', [1, 2, 3], new PieChartRenderer());
+ host.children.add(chartAreaHost);
+ config = new ChartConfig([series], [0]);
+ config.minimumSize = new Rect.size(CHART_WIDTH, CHART_HEIGHT);
+ area = new ChartArea(chartAreaHost, data, config, dimensionAxesCount: 0);
+ area.draw();
+
+ // The series group is not painted until the axis is painted. However
+ // The ChartArea.draw current doesn't return a Future upon paint completion
+ // Also there is currently a default transition that we can not remove (will
+ // change in the near future). Set enough delay to ensure all the elements
+ // in the chart has finished their initial animation.
+ new Timer(new Duration(milliseconds:1000), expectAsync(checkRenderResult));
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698