1
0
mirror of https://github.com/flutter/samples.git synced 2026-04-23 15:31:29 +00:00

Web charts common update (#111)

This commit is contained in:
Brett Morgan
2019-07-10 06:37:53 +10:00
committed by GitHub
parent eac7833d1d
commit 3af5bbf125
145 changed files with 2491 additions and 2687 deletions

View File

@@ -43,13 +43,13 @@ class MockCanvas extends Mock implements ChartCanvas {}
/// A fake [GraphicsFactory] that returns [FakeTextStyle] and [FakeTextElement].
class FakeGraphicsFactory extends GraphicsFactory {
@override
TextStyle createTextPaint() => new FakeTextStyle();
TextStyle createTextPaint() => FakeTextStyle();
@override
TextElement createTextElement(String text) => new FakeTextElement(text);
TextElement createTextElement(String text) => FakeTextElement(text);
@override
LineStyle createLinePaint() => new MockLinePaint();
LineStyle createLinePaint() => MockLinePaint();
}
/// Stores [TextStyle] properties for test to verify.
@@ -72,7 +72,7 @@ class FakeTextElement implements TextElement {
FakeTextElement(this.text);
TextMeasurement get measurement => new TextMeasurement(
TextMeasurement get measurement => TextMeasurement(
horizontalSliceWidth: text.length.toDouble(),
verticalSliceWidth: textStyle.fontSize.toDouble(),
baseline: textStyle.fontSize.toDouble());
@@ -81,7 +81,7 @@ class FakeTextElement implements TextElement {
class MockLinePaint extends Mock implements LineStyle {}
class FakeBarRendererElement implements ImmutableBarRendererElement<String> {
final _series = new MockImmutableSeries<String>();
final _series = MockImmutableSeries<String>();
final AccessorFn<String> labelAccessor;
final String datum;
final Rectangle<int> bounds;
@@ -106,9 +106,9 @@ void main() {
Rectangle<int> drawBounds;
setUpAll(() {
canvas = new MockCanvas();
graphicsFactory = new FakeGraphicsFactory();
drawBounds = new Rectangle(0, 0, 200, 100);
canvas = MockCanvas();
graphicsFactory = FakeGraphicsFactory();
drawBounds = Rectangle(0, 0, 200, 100);
});
group('horizontal bar chart', () {
@@ -118,12 +118,12 @@ void main() {
// 'LabelA' and 'LabelB' both have lengths of 6.
// 'LabelB' would not fit inside the bar in auto setting because it has
// width of 5.
new FakeBarRendererElement(
'A', new Rectangle(0, 20, 50, 20), (_) => 'LabelA', data),
new FakeBarRendererElement(
'B', new Rectangle(0, 70, 5, 20), (_) => 'LabelB', data)
FakeBarRendererElement(
'A', Rectangle(0, 20, 50, 20), (_) => 'LabelA', data),
FakeBarRendererElement(
'B', Rectangle(0, 70, 5, 20), (_) => 'LabelB', data)
];
final decorator = new BarLabelDecorator();
final decorator = BarLabelDecorator();
decorator.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
@@ -155,15 +155,15 @@ void main() {
final barElements = [
// 'LabelABC' would not fit inside the bar in auto setting because it
// has a width of 8.
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 6, 20), (_) => 'LabelABC', ['A']),
FakeBarRendererElement(
'A', Rectangle(0, 0, 6, 20), (_) => 'LabelABC', ['A']),
];
// Draw bounds with width of 10 means that space inside the bar is larger.
final smallDrawBounds = new Rectangle(0, 0, 10, 20);
final smallDrawBounds = Rectangle(0, 0, 10, 20);
new BarLabelDecorator(
BarLabelDecorator(
labelPadding: 0, // Turn off label padding for testing.
insideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
insideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: smallDrawBounds,
animationPercent: 1.0,
@@ -182,14 +182,14 @@ void main() {
final barElements = [
// 'LabelABC' would not fit inside the bar in auto setting because it
// has a width of 8.
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 6, 20), (_) => 'LabelABC', ['A']),
FakeBarRendererElement(
'A', Rectangle(0, 0, 6, 20), (_) => 'LabelABC', ['A']),
];
new BarLabelDecorator(
BarLabelDecorator(
labelPosition: BarLabelPosition.inside,
labelPadding: 0, // Turn off label padding for testing.
insideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
insideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
@@ -206,14 +206,14 @@ void main() {
test('LabelPosition.outside always paints outside the bar', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), (_) => 'Label', ['A']),
FakeBarRendererElement(
'A', Rectangle(0, 0, 10, 20), (_) => 'Label', ['A']),
];
new BarLabelDecorator(
BarLabelDecorator(
labelPosition: BarLabelPosition.outside,
labelPadding: 0, // Turn off label padding for testing.
outsideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
outsideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
@@ -234,18 +234,18 @@ void main() {
// 'LabelA' and 'LabelB' both have lengths of 6.
// 'LabelB' would not fit inside the bar in auto setting because it has
// width of 5.
new FakeBarRendererElement(
'A', new Rectangle(0, 20, 50, 20), (_) => 'LabelA', data),
new FakeBarRendererElement(
'B', new Rectangle(0, 70, 5, 20), (_) => 'LabelB', data)
FakeBarRendererElement(
'A', Rectangle(0, 20, 50, 20), (_) => 'LabelA', data),
FakeBarRendererElement(
'B', Rectangle(0, 70, 5, 20), (_) => 'LabelB', data)
];
final insideColor = new Color(r: 0, g: 0, b: 0);
final outsideColor = new Color(r: 255, g: 255, b: 255);
final decorator = new BarLabelDecorator(
final insideColor = Color(r: 0, g: 0, b: 0);
final outsideColor = Color(r: 255, g: 255, b: 255);
final decorator = BarLabelDecorator(
labelPadding: 0,
insideLabelStyleSpec: new TextStyleSpec(
insideLabelStyleSpec: TextStyleSpec(
fontSize: 10, fontFamily: 'insideFont', color: insideColor),
outsideLabelStyleSpec: new TextStyleSpec(
outsideLabelStyleSpec: TextStyleSpec(
fontSize: 8, fontFamily: 'outsideFont', color: outsideColor));
decorator.decorate(barElements, canvas, graphicsFactory,
@@ -276,15 +276,15 @@ void main() {
test('TextAnchor.end starts on the right most of bar', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
FakeBarRendererElement(
'A', Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
];
new BarLabelDecorator(
BarLabelDecorator(
labelAnchor: BarLabelAnchor.end,
labelPosition: BarLabelPosition.inside,
labelPadding: 0, // Turn off label padding for testing.
insideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
insideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
@@ -301,15 +301,15 @@ void main() {
test('RTL TextAnchor.start starts on the right', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
FakeBarRendererElement(
'A', Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
];
new BarLabelDecorator(
BarLabelDecorator(
labelAnchor: BarLabelAnchor.start,
labelPosition: BarLabelPosition.inside,
labelPadding: 0, // Turn off label padding for testing.
insideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
insideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
@@ -327,15 +327,15 @@ void main() {
test('RTL TextAnchor.end starts on the left', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
FakeBarRendererElement(
'A', Rectangle(0, 0, 10, 20), (_) => 'LabelA', ['A'])
];
new BarLabelDecorator(
BarLabelDecorator(
labelAnchor: BarLabelAnchor.end,
labelPosition: BarLabelPosition.inside,
labelPadding: 0, // Turn off label padding for testing.
insideLabelStyleSpec: new TextStyleSpec(fontSize: 10))
insideLabelStyleSpec: TextStyleSpec(fontSize: 10))
.decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
@@ -355,11 +355,10 @@ void main() {
group('Null and empty label scenarios', () {
test('Skip label if label accessor does not exist', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), null, ['A'])
FakeBarRendererElement('A', Rectangle(0, 0, 10, 20), null, ['A'])
];
new BarLabelDecorator().decorate(barElements, canvas, graphicsFactory,
BarLabelDecorator().decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
renderingVertically: false);
@@ -370,13 +369,11 @@ void main() {
test('Skip label if label is null or empty', () {
final data = ['A', 'B'];
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 10, 20), null, data),
new FakeBarRendererElement(
'B', new Rectangle(0, 50, 10, 20), (_) => '', data),
FakeBarRendererElement('A', Rectangle(0, 0, 10, 20), null, data),
FakeBarRendererElement('B', Rectangle(0, 50, 10, 20), (_) => '', data),
];
new BarLabelDecorator().decorate(barElements, canvas, graphicsFactory,
BarLabelDecorator().decorate(barElements, canvas, graphicsFactory,
drawBounds: drawBounds,
animationPercent: 1.0,
renderingVertically: false);
@@ -386,11 +383,10 @@ void main() {
test('Skip label if no width available', () {
final barElements = [
new FakeBarRendererElement(
'A', new Rectangle(0, 0, 200, 20), (_) => 'a', ['A'])
FakeBarRendererElement('A', Rectangle(0, 0, 200, 20), (_) => 'a', ['A'])
];
new BarLabelDecorator(
BarLabelDecorator(
labelPadding: 0,
labelPosition: BarLabelPosition.outside,
).decorate(barElements, canvas, graphicsFactory,

View File

@@ -50,8 +50,7 @@ class FakeBarRenderer<D> extends BarRenderer<D> {
int paintBarCallCount = 0;
factory FakeBarRenderer({BarRendererConfig config, String rendererId}) {
return new FakeBarRenderer._internal(
config: config, rendererId: rendererId);
return FakeBarRenderer._internal(config: config, rendererId: rendererId);
}
FakeBarRenderer._internal({BarRendererConfig config, String rendererId})
@@ -73,10 +72,10 @@ void main() {
// Convenience methods for creating mocks.
/////////////////////////////////////////
_configureBaseRenderer(BaseBarRenderer renderer, bool vertical) {
final context = new MockContext();
final context = MockContext();
when(context.chartContainerIsRtl).thenReturn(false);
when(context.isRtl).thenReturn(false);
final verticalChart = new MockChart();
final verticalChart = MockChart();
when(verticalChart.vertical).thenReturn(vertical);
when(verticalChart.context).thenReturn(context);
renderer.onAttach(verticalChart);
@@ -85,132 +84,132 @@ void main() {
}
BarRenderer makeRenderer({BarRendererConfig config}) {
final renderer = new BarRenderer(config: config);
final renderer = BarRenderer(config: config);
_configureBaseRenderer(renderer, true);
return renderer;
}
FakeBarRenderer makeFakeRenderer({BarRendererConfig config}) {
final renderer = new FakeBarRenderer(config: config);
final renderer = FakeBarRenderer(config: config);
_configureBaseRenderer(renderer, true);
return renderer;
}
setUp(() {
var myFakeDesktopAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeTabletAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeMobileAData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeDesktopBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeTabletBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeMobileBData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
seriesList = [
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileAData))
];
groupedStackedSeriesList = [
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile A',
seriesCategory: 'A',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileAData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopBData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.red.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletBData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile B',
seriesCategory: 'B',
colorFn: (_, __) => MaterialPalette.green.shadeDefault,
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileBData))
];
});
@@ -218,7 +217,7 @@ void main() {
group('preprocess', () {
test('with grouped bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.grouped));
config: BarRendererConfig(groupingType: BarGroupingType.grouped));
renderer.preprocessSeries(seriesList);
@@ -278,8 +277,8 @@ void main() {
test('with grouped stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
groupingType: BarGroupingType.groupedStacked));
config:
BarRendererConfig(groupingType: BarGroupingType.groupedStacked));
renderer.preprocessSeries(groupedStackedSeriesList);
@@ -390,7 +389,7 @@ void main() {
test('with stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.stacked));
config: BarRendererConfig(groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -450,16 +449,16 @@ void main() {
test('with stacked bars containing zero and null', () {
// Set up some nulls and zeros in the data.
seriesList[2].data[0] = new MyRow('MyCampaign1', null);
seriesList[2].data[2] = new MyRow('MyCampaign3', 0);
seriesList[2].data[0] = MyRow('MyCampaign1', null);
seriesList[2].data[2] = MyRow('MyCampaign3', 0);
seriesList[1].data[1] = new MyRow('MyCampaign2', null);
seriesList[1].data[3] = new MyRow('MyOtherCampaign', 0);
seriesList[1].data[1] = MyRow('MyCampaign2', null);
seriesList[1].data[3] = MyRow('MyOtherCampaign', 0);
seriesList[0].data[2] = new MyRow('MyCampaign3', 0);
seriesList[0].data[2] = MyRow('MyCampaign3', 0);
renderer = makeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.stacked));
config: BarRendererConfig(groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -547,7 +546,7 @@ void main() {
group('preprocess weight pattern', () {
test('with grouped bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.grouped, weightPattern: [3, 2, 1]));
renderer.preprocessSeries(seriesList);
@@ -612,7 +611,7 @@ void main() {
test('with grouped stacked bars', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.groupedStacked,
weightPattern: [2, 1]));
@@ -729,7 +728,7 @@ void main() {
test('with stacked bars - weightPattern not used', () {
renderer = makeRenderer(
config: new BarRendererConfig(
config: BarRendererConfig(
groupingType: BarGroupingType.stacked, weightPattern: [2, 1]));
renderer.preprocessSeries(seriesList);
@@ -796,24 +795,24 @@ void main() {
test('only include null in draw if animating from a non null measure', () {
// Helper to create series list for this test only.
List<MutableSeries<String>> _createSeriesList(List<MyRow> data) {
final domainAxis = new MockAxis<dynamic>();
final domainAxis = MockAxis<dynamic>();
when(domainAxis.rangeBand).thenReturn(100.0);
when(domainAxis.getLocation('MyCampaign1')).thenReturn(20.0);
when(domainAxis.getLocation('MyCampaign2')).thenReturn(40.0);
when(domainAxis.getLocation('MyCampaign3')).thenReturn(60.0);
when(domainAxis.getLocation('MyOtherCampaign')).thenReturn(80.0);
final measureAxis = new MockAxis<num>();
final measureAxis = MockAxis<num>();
when(measureAxis.getLocation(0)).thenReturn(0.0);
when(measureAxis.getLocation(5)).thenReturn(5.0);
when(measureAxis.getLocation(75)).thenReturn(75.0);
when(measureAxis.getLocation(100)).thenReturn(100.0);
final color = new Color.fromHex(code: '#000000');
final color = Color.fromHex(code: '#000000');
final series = new MutableSeries<String>(new Series<MyRow, String>(
final series = MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (_, __) => 0,
colorFn: (_, __) => color,
fillColorFn: (_, __) => color,
@@ -825,26 +824,26 @@ void main() {
return [series];
}
final canvas = new MockCanvas();
final canvas = MockCanvas();
final myDataWithNull = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', null),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', null),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithNull = _createSeriesList(myDataWithNull);
final myDataWithMeasures = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 0),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 0),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithMeasures = _createSeriesList(myDataWithMeasures);
final renderer = makeFakeRenderer(
config: new BarRendererConfig(groupingType: BarGroupingType.grouped));
config: BarRendererConfig(groupingType: BarGroupingType.grouped));
// Verify that only 3 bars are drawn for an initial draw with null data.
renderer.preprocessSeries(seriesListWithNull);

View File

@@ -66,10 +66,10 @@ void main() {
// Convenience methods for creating mocks.
/////////////////////////////////////////
_configureBaseRenderer(BaseBarRenderer renderer, bool vertical) {
final context = new MockContext();
final context = MockContext();
when(context.chartContainerIsRtl).thenReturn(false);
when(context.isRtl).thenReturn(false);
final verticalChart = new MockChart();
final verticalChart = MockChart();
when(verticalChart.vertical).thenReturn(vertical);
when(verticalChart.context).thenReturn(context);
renderer.onAttach(verticalChart);
@@ -78,51 +78,51 @@ void main() {
}
BarTargetLineRenderer makeRenderer({BarTargetLineRendererConfig config}) {
final renderer = new BarTargetLineRenderer(config: config);
final renderer = BarTargetLineRenderer(config: config);
_configureBaseRenderer(renderer, true);
return renderer;
}
setUp(() {
var myFakeDesktopData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeTabletData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
var myFakeMobileData = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 25),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 25),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
seriesList = [
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeDesktopData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Tablet',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeTabletData)),
new MutableSeries<String>(new Series<MyRow, String>(
MutableSeries<String>(Series<MyRow, String>(
id: 'Mobile',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
measureOffsetFn: (MyRow row, _) => 0,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (row, _) => 0,
data: myFakeMobileData))
];
});
@@ -130,7 +130,7 @@ void main() {
group('preprocess', () {
test('with grouped bar target lines', () {
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.grouped));
renderer.preprocessSeries(seriesList);
@@ -194,7 +194,7 @@ void main() {
test('with stacked bar target lines', () {
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -258,16 +258,16 @@ void main() {
test('with stacked bar target lines containing zero and null', () {
// Set up some nulls and zeros in the data.
seriesList[2].data[0] = new MyRow('MyCampaign1', null);
seriesList[2].data[2] = new MyRow('MyCampaign3', 0);
seriesList[2].data[0] = MyRow('MyCampaign1', null);
seriesList[2].data[2] = MyRow('MyCampaign3', 0);
seriesList[1].data[1] = new MyRow('MyCampaign2', null);
seriesList[1].data[3] = new MyRow('MyOtherCampaign', 0);
seriesList[1].data[1] = MyRow('MyCampaign2', null);
seriesList[1].data[3] = MyRow('MyOtherCampaign', 0);
seriesList[0].data[2] = new MyRow('MyCampaign3', 0);
seriesList[0].data[2] = MyRow('MyCampaign3', 0);
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.stacked));
renderer.preprocessSeries(seriesList);
@@ -367,7 +367,7 @@ void main() {
test('with stroke width target lines', () {
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.grouped, strokeWidthPx: 5.0));
renderer.preprocessSeries(seriesList);
@@ -428,7 +428,7 @@ void main() {
group('preprocess with weight pattern', () {
test('with grouped bar target lines', () {
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.grouped, weightPattern: [3, 2, 1]));
renderer.preprocessSeries(seriesList);
@@ -496,7 +496,7 @@ void main() {
test('with stacked bar target lines - weightPattern not used', () {
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.stacked, weightPattern: [2, 1]));
renderer.preprocessSeries(seriesList);
@@ -566,24 +566,24 @@ void main() {
test('only include null in draw if animating from a non null measure', () {
// Helper to create series list for this test only.
List<MutableSeries<String>> _createSeriesList(List<MyRow> data) {
final domainAxis = new MockAxis<dynamic>();
final domainAxis = MockAxis<dynamic>();
when(domainAxis.rangeBand).thenReturn(100.0);
when(domainAxis.getLocation('MyCampaign1')).thenReturn(20.0);
when(domainAxis.getLocation('MyCampaign2')).thenReturn(40.0);
when(domainAxis.getLocation('MyCampaign3')).thenReturn(60.0);
when(domainAxis.getLocation('MyOtherCampaign')).thenReturn(80.0);
final measureAxis = new MockAxis<num>();
final measureAxis = MockAxis<num>();
when(measureAxis.getLocation(0)).thenReturn(0.0);
when(measureAxis.getLocation(5)).thenReturn(5.0);
when(measureAxis.getLocation(75)).thenReturn(75.0);
when(measureAxis.getLocation(100)).thenReturn(100.0);
final color = new Color.fromHex(code: '#000000');
final color = Color.fromHex(code: '#000000');
final series = new MutableSeries<String>(new Series<MyRow, String>(
final series = MutableSeries<String>(Series<MyRow, String>(
id: 'Desktop',
domainFn: (MyRow row, _) => row.campaign,
measureFn: (MyRow row, _) => row.clickCount,
domainFn: (row, _) => row.campaign,
measureFn: (row, _) => row.clickCount,
measureOffsetFn: (_, __) => 0,
colorFn: (_, __) => color,
fillColorFn: (_, __) => color,
@@ -595,26 +595,26 @@ void main() {
return [series];
}
final canvas = new MockCanvas();
final canvas = MockCanvas();
final myDataWithNull = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', null),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', null),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithNull = _createSeriesList(myDataWithNull);
final myDataWithMeasures = [
new MyRow('MyCampaign1', 5),
new MyRow('MyCampaign2', 0),
new MyRow('MyCampaign3', 100),
new MyRow('MyOtherCampaign', 75),
MyRow('MyCampaign1', 5),
MyRow('MyCampaign2', 0),
MyRow('MyCampaign3', 100),
MyRow('MyOtherCampaign', 75),
];
final seriesListWithMeasures = _createSeriesList(myDataWithMeasures);
renderer = makeRenderer(
config: new BarTargetLineRendererConfig(
config: BarTargetLineRendererConfig(
groupingType: BarGroupingType.grouped));
// Verify that only 3 lines are drawn for an initial draw with null data.

View File

@@ -61,40 +61,40 @@ class MockDateTimeAxis extends Mock implements Axis<DateTime> {}
class MockCanvas extends Mock implements ChartCanvas {}
void main() {
final date0 = new DateTime(2018, 2, 1);
final date1 = new DateTime(2018, 2, 7);
final dateOutsideViewport = new DateTime(2018, 1, 1);
final date0 = DateTime(2018, 2, 1);
final date1 = DateTime(2018, 2, 7);
final dateOutsideViewport = DateTime(2018, 1, 1);
/////////////////////////////////////////
// Convenience methods for creating mocks.
/////////////////////////////////////////
_configureBaseRenderer(BaseBarRenderer renderer, bool vertical) {
final context = new MockContext();
final context = MockContext();
when(context.chartContainerIsRtl).thenReturn(false);
when(context.isRtl).thenReturn(false);
final verticalChart = new MockChart();
final verticalChart = MockChart();
when(verticalChart.vertical).thenReturn(vertical);
when(verticalChart.context).thenReturn(context);
renderer.onAttach(verticalChart);
final layoutBounds = vertical
? new Rectangle<int>(70, 20, 230, 100)
: new Rectangle<int>(70, 20, 100, 230);
? Rectangle<int>(70, 20, 230, 100)
: Rectangle<int>(70, 20, 100, 230);
renderer.layout(layoutBounds, layoutBounds);
return renderer;
}
BaseBarRenderer _makeBarRenderer({bool vertical, BarGroupingType groupType}) {
final renderer =
new BarRenderer(config: new BarRendererConfig(groupingType: groupType));
BarRenderer(config: BarRendererConfig(groupingType: groupType));
_configureBaseRenderer(renderer, vertical);
return renderer;
}
BaseBarRenderer _makeBarTargetRenderer(
{bool vertical, BarGroupingType groupType}) {
final renderer = new BarTargetLineRenderer(
config: new BarTargetLineRendererConfig(groupingType: groupType));
final renderer = BarTargetLineRenderer(
config: BarTargetLineRendererConfig(groupingType: groupType));
_configureBaseRenderer(renderer, vertical);
return renderer;
}
@@ -102,11 +102,11 @@ void main() {
MutableSeries _makeSeries(
{String id, String seriesCategory, bool vertical = true}) {
final data = <MyRow>[
new MyRow('camp0', 10),
new MyRow('camp1', 10),
MyRow('camp0', 10),
MyRow('camp1', 10),
];
final series = new MutableSeries<String>(new Series(
final series = MutableSeries<String>(Series(
id: id,
data: data,
domainFn: (dynamic row, _) => row.campaign,
@@ -115,10 +115,10 @@ void main() {
));
series.measureOffsetFn = (_) => 0.0;
series.colorFn = (_) => new Color.fromHex(code: '#000000');
series.colorFn = (_) => Color.fromHex(code: '#000000');
// Mock the Domain axis results.
final domainAxis = new MockOrdinalAxis();
final domainAxis = MockOrdinalAxis();
when(domainAxis.rangeBand).thenReturn(100.0);
final domainOffset = vertical ? 70.0 : 20.0;
when(domainAxis.getLocation('camp0'))
@@ -140,7 +140,7 @@ void main() {
series.setAttr(domainAxisKey, domainAxis);
// Mock the Measure axis results.
final measureAxis = new MockNumericAxis();
final measureAxis = MockNumericAxis();
if (vertical) {
when(measureAxis.getLocation(0.0)).thenReturn(20.0 + 100.0);
when(measureAxis.getLocation(10.0)).thenReturn(20.0 + 100.0 - 10.0);
@@ -158,11 +158,11 @@ void main() {
MutableSeries _makeDateTimeSeries(
{String id, String seriesCategory, bool vertical = true}) {
final data = <MyDateTimeRow>[
new MyDateTimeRow(date0, 10),
new MyDateTimeRow(date1, 10),
MyDateTimeRow(date0, 10),
MyDateTimeRow(date1, 10),
];
final series = new MutableSeries<DateTime>(new Series(
final series = MutableSeries<DateTime>(Series(
id: id,
data: data,
domainFn: (dynamic row, _) => row.time,
@@ -171,10 +171,10 @@ void main() {
));
series.measureOffsetFn = (_) => 0.0;
series.colorFn = (_) => new Color.fromHex(code: '#000000');
series.colorFn = (_) => Color.fromHex(code: '#000000');
// Mock the Domain axis results.
final domainAxis = new MockDateTimeAxis();
final domainAxis = MockDateTimeAxis();
when(domainAxis.rangeBand).thenReturn(100.0);
final domainOffset = vertical ? 70.0 : 20.0;
when(domainAxis.getLocation(date0)).thenReturn(domainOffset + 10.0 + 50.0);
@@ -185,7 +185,7 @@ void main() {
series.setAttr(domainAxisKey, domainAxis);
// Mock the Measure axis results.
final measureAxis = new MockNumericAxis();
final measureAxis = MockNumericAxis();
if (vertical) {
when(measureAxis.getLocation(0.0)).thenReturn(20.0 + 100.0);
when(measureAxis.getLocation(10.0)).thenReturn(20.0 + 100.0 - 10.0);
@@ -221,11 +221,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -251,11 +251,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -274,11 +274,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -304,11 +304,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -329,11 +329,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -358,11 +358,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -395,11 +395,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -435,11 +435,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -484,13 +484,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0),
selectNearestByDomain,
null);
Point<double>(70.0 + 10.0 + 13.0, 20.0), selectNearestByDomain, null);
// Verify
expect(details.length, equals(1));
@@ -513,11 +511,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -544,19 +542,17 @@ void main() {
final renderer =
_makeBarRenderer(vertical: true, groupType: BarGroupingType.grouped);
final seriesList = <MutableSeries>[
_makeSeries(id: 'foo')..data.add(new MyRow('outsideViewport', 20))
_makeSeries(id: 'foo')..data.add(MyRow('outsideViewport', 20))
];
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
// Note: point is in the axis, over a bar outside of the viewport.
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(65.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
Point<double>(65.0, 20.0 + 100.0 - 5.0), selectNearestByDomain, null);
// Verify
expect(details.length, equals(0));
@@ -577,11 +573,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 13.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 13.0),
selectNearestByDomain,
null);
@@ -606,11 +602,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -643,11 +639,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -682,11 +678,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -732,11 +728,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 100.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 100.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -761,11 +757,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 50.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 50.0),
selectNearestByDomain,
null);
@@ -800,13 +796,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0),
selectNearestByDomain,
null);
Point<double>(70.0 + 10.0 + 13.0, 20.0), selectNearestByDomain, null);
// Verify
expect(details.length, equals(1));
@@ -829,11 +823,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -866,11 +860,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -906,11 +900,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -958,11 +952,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -989,19 +983,17 @@ void main() {
final renderer = _makeBarTargetRenderer(
vertical: true, groupType: BarGroupingType.grouped);
final seriesList = <MutableSeries>[
_makeSeries(id: 'foo')..data.add(new MyRow('outsideViewport', 20))
_makeSeries(id: 'foo')..data.add(MyRow('outsideViewport', 20))
];
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
// Note: point is in the axis, over a bar outside of the viewport.
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(65.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
Point<double>(65.0, 20.0 + 100.0 - 5.0), selectNearestByDomain, null);
// Verify
expect(details.length, equals(0));
@@ -1022,11 +1014,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 100.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 100.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -1051,11 +1043,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -1088,11 +1080,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -1127,11 +1119,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 20.0),
selectNearestByDomain,
null);
@@ -1178,11 +1170,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 5.0, 20.0 + 10.0 + 50.0),
Point<double>(70.0 + 5.0, 20.0 + 10.0 + 50.0),
selectNearestByDomain,
null);
@@ -1217,11 +1209,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -1246,11 +1238,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -1283,11 +1275,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 13.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -1323,11 +1315,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 20.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -1375,11 +1367,11 @@ void main() {
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
Point<double>(70.0 + 10.0 + 50.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
@@ -1407,19 +1399,17 @@ void main() {
vertical: true, groupType: BarGroupingType.grouped);
final seriesList = <MutableSeries>[
_makeDateTimeSeries(id: 'foo')
..data.add(new MyDateTimeRow(dateOutsideViewport, 20))
..data.add(MyDateTimeRow(dateOutsideViewport, 20))
];
renderer.configureSeries(seriesList);
renderer.preprocessSeries(seriesList);
renderer.update(seriesList, false);
renderer.paint(new MockCanvas(), 1.0);
renderer.paint(MockCanvas(), 1.0);
// Act
// Note: point is in the axis, over a bar outside of the viewport.
final details = renderer.getNearestDatumDetailPerSeries(
new Point<double>(65.0, 20.0 + 100.0 - 5.0),
selectNearestByDomain,
null);
Point<double>(65.0, 20.0 + 100.0 - 5.0), selectNearestByDomain, null);
// Verify
expect(details.length, equals(0));