OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2014 Google Inc. All rights reserved. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style |
| 5 * license that can be found in the LICENSE file or at |
| 6 * https://developers.google.com/open-source/licenses/bsd |
| 7 */ |
| 8 |
| 9 part of charted.test.svg; |
| 10 |
| 11 testSvgArc() { |
| 12 |
| 13 List mockSvgData = [ |
| 14 new SvgArcData(null, 0, 0, 0, 0, 100), // Init sector |
| 15 new SvgArcData(null, 0, 0, 0, 50, 100), // Init donut |
| 16 new SvgArcData(null, 0, 0, 2 * PI, 0, 100), // Whole sector |
| 17 new SvgArcData(null, 0, 0, 2 * PI, 50, 100), // Whole donut |
| 18 new SvgArcData(null, 0, 0, PI / 3, 0, 100), // Sector start angle 0 |
| 19 new SvgArcData(null, 0, 0, PI / 3, 50, 100), // Slice start angle 0 |
| 20 new SvgArcData(null, 0, PI / 3, PI, 0, 100), // Sector start angle > 0 |
| 21 new SvgArcData(null, 0, PI / 3, PI, 50, 100), // Slice start angle > 0 |
| 22 ]; |
| 23 |
| 24 test('interpolateSvgArcData() returns an InterpolateFn that ' |
| 25 'correctly interpolates two SvgArcData', () { |
| 26 InterpolateFn arcInterpolator = |
| 27 interpolateSvgArcData(mockSvgData[5], mockSvgData[6]); |
| 28 for (var i = 0.0; i <= 1.0; i += 0.2) { |
| 29 SvgArcData arcData = arcInterpolator(i); |
| 30 expect(arcData.startAngle, closeTo(mockSvgData[5].startAngle * (1 - i) + |
| 31 mockSvgData[6].startAngle * i, EPSILON)); |
| 32 expect(arcData.endAngle, closeTo(mockSvgData[5].endAngle * (1 - i) + |
| 33 mockSvgData[6].endAngle * i, EPSILON)); |
| 34 expect(arcData.innerRadius, closeTo(mockSvgData[5].innerRadius * (1 - i) + |
| 35 mockSvgData[6].innerRadius * i, EPSILON)); |
| 36 expect(arcData.outerRadius, closeTo(mockSvgData[5].outerRadius * (1 - i) + |
| 37 mockSvgData[6].outerRadius * i, EPSILON)); |
| 38 } |
| 39 }); |
| 40 |
| 41 group('SvgArc.innerRadiusCallback', () { |
| 42 test('is assigned defaultInnerRadiusCallback by default', () { |
| 43 SvgArc svgArc = new SvgArc(); |
| 44 SelectionCallback<num> callBack = svgArc.innerRadiusCallback; |
| 45 mockSvgData.forEach((e) => |
| 46 expect(callBack(e, 0, null), equals(e.innerRadius))); |
| 47 expect(callBack(null, 0, null), equals(0)); |
| 48 expect(callBack(new SvgArcData(0, 0, 0, 0, null, 0), 0, null), equals(0)); |
| 49 }); |
| 50 test('is assigned to (value) => value when set by value', () { |
| 51 SvgArc svgArc = new SvgArc(); |
| 52 svgArc.innerRadius = 30; |
| 53 SelectionCallback<num> callBack = svgArc.innerRadiusCallback; |
| 54 mockSvgData.forEach((e) => |
| 55 expect(callBack(e, 0, null), equals(30))); |
| 56 }); |
| 57 }); |
| 58 |
| 59 group('SvgArc.outerRadiusCallback', () { |
| 60 test('is assigned defaultOuterRadiusCallback by default', () { |
| 61 SvgArc svgArc = new SvgArc(); |
| 62 SelectionCallback<num> callBack = svgArc.outerRadiusCallback; |
| 63 mockSvgData.forEach((e) => |
| 64 expect(callBack(e, 0, null), equals(e.outerRadius))); |
| 65 expect(callBack(null, 0, null), equals(0)); |
| 66 expect(callBack(new SvgArcData(0, 0, 0, 0, 0, null), 0, null), equals(0)); |
| 67 }); |
| 68 test('is assigned to (value) => value when set by value', () { |
| 69 SvgArc svgArc = new SvgArc(); |
| 70 svgArc.outerRadius = 30; |
| 71 SelectionCallback<num> callBack = svgArc.outerRadiusCallback; |
| 72 mockSvgData.forEach((e) => |
| 73 expect(callBack(e, 0, null), equals(30))); |
| 74 }); |
| 75 }); |
| 76 |
| 77 group('SvgArc.startAngleCallback', () { |
| 78 test('is assigned defaultStartAngleCallback by default', () { |
| 79 SvgArc svgArc = new SvgArc(); |
| 80 SelectionCallback<num> callBack = svgArc.startAngleCallback; |
| 81 mockSvgData.forEach((e) => |
| 82 expect(callBack(e, 0, null), equals(e.startAngle))); |
| 83 expect(callBack(null, 0, null), equals(0)); |
| 84 expect(callBack(new SvgArcData(0, 0, null, 0, 0, 0), 0, null), equals(0)); |
| 85 }); |
| 86 test('is assigned to (value) => value when set by value', () { |
| 87 SvgArc svgArc = new SvgArc(); |
| 88 svgArc.startAngle = 30; |
| 89 SelectionCallback<num> callBack = svgArc.startAngleCallback; |
| 90 mockSvgData.forEach((e) => |
| 91 expect(callBack(e, 0, null), equals(30))); |
| 92 }); |
| 93 }); |
| 94 |
| 95 group('SvgArc.endAngleCallback', () { |
| 96 test('is assigned defaultEndAngleCallback by default', () { |
| 97 SvgArc svgArc = new SvgArc(); |
| 98 SelectionCallback<num> callBack = svgArc.endAngleCallback; |
| 99 mockSvgData.forEach((e) => |
| 100 expect(callBack(e, 0, null), equals(e.endAngle))); |
| 101 expect(callBack(null, 0, null), equals(0)); |
| 102 expect(callBack(new SvgArcData(0, 0, 0, null, 0, 0), 0, null), equals(0)); |
| 103 }); |
| 104 test('is assigned to (value) => value when set by value', () { |
| 105 SvgArc svgArc = new SvgArc(); |
| 106 svgArc.endAngle = 30; |
| 107 SelectionCallback<num> callBack = svgArc.endAngleCallback; |
| 108 mockSvgData.forEach((e) => |
| 109 expect(callBack(e, 0, null), equals(30))); |
| 110 }); |
| 111 }); |
| 112 |
| 113 test('SvgArc.centroid calculates the centroid of arc slice', () { |
| 114 SvgArc svgArc = new SvgArc(); |
| 115 List centroid = svgArc.centroid(mockSvgData[0], 0, null); |
| 116 expect(centroid[0], closeTo(0, EPSILON)); |
| 117 expect(centroid[1], closeTo(-50, EPSILON)); |
| 118 centroid = svgArc.centroid(mockSvgData[2], 0, null); |
| 119 expect(centroid[0], closeTo(0, EPSILON)); |
| 120 expect(centroid[1], closeTo(50, EPSILON)); |
| 121 centroid = svgArc.centroid(mockSvgData[7], 0, null); |
| 122 expect(centroid[0], closeTo(64.9519052838329, EPSILON)); |
| 123 expect(centroid[1], closeTo(37.5, EPSILON)); |
| 124 }); |
| 125 |
| 126 group('SvgArc.path', () { |
| 127 test('generates concentric pie sector', () { |
| 128 SvgArc svgArc = new SvgArc(); |
| 129 expect(svgArc.path(mockSvgData[2], 0, null), |
| 130 equals('M0,100A100,100 0 1,1 0,-100A100,100 0 1,1 0,100Z')); |
| 131 }); |
| 132 test('generates concentric donut circle', () { |
| 133 SvgArc svgArc = new SvgArc(); |
| 134 expect(svgArc.path(mockSvgData[3], 0, null), |
| 135 equals('M0,100A100,100 0 1,1 0,-100A100,100 0 1,1 0,100M0,' |
| 136 '50A50,50 0 1,0 0,-50A50,50 0 1,0 0,50Z')); |
| 137 }); |
| 138 test('correctly generates pie sector', () { |
| 139 SvgArc svgArc = new SvgArc(); |
| 140 expect(svgArc.path(mockSvgData[5], 0, null), |
| 141 equals('M6.123233995736766e-15,-100.0A100,100 0 0,1 ' |
| 142 '86.60254037844386,-50.0L43.30127018922193,' |
| 143 '-25.0A50,50 0 0,0 3.061616997868383e-15,-50.0Z')); |
| 144 expect(svgArc.path(mockSvgData[7], 0, null), |
| 145 equals('M86.60254037844386,-50.0A100,100 0 0,1 ' |
| 146 '6.123233995736766e-15,100.0L3.061616997868383e-15,' |
| 147 '50.0A50,50 0 0,0 43.30127018922193,-25.0Z')); |
| 148 }); |
| 149 test('correctly generates donut slice', () { |
| 150 SvgArc svgArc = new SvgArc(); |
| 151 expect(svgArc.path(mockSvgData[4], 0, null), |
| 152 equals('M6.123233995736766e-15,-100.0A100,100 ' |
| 153 '0 0,1 86.60254037844386,-50.0L0,0Z')); |
| 154 expect(svgArc.path(mockSvgData[6], 0, null), |
| 155 equals('M86.60254037844386,-50.0A100,100 0 0,1 ' |
| 156 '6.123233995736766e-15,100.0L0,0Z')); |
| 157 }); |
| 158 }); |
| 159 |
| 160 } |
OLD | NEW |