1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:test/test.dart';
void main() {
group(AnnotatedRegion, () {
test('finds the first value in a OffsetLayer when sized', () {
final ContainerLayer containerLayer = new ContainerLayer();
final List<OffsetLayer> layers = <OffsetLayer>[
new OffsetLayer(offset: Offset.zero),
new OffsetLayer(offset: const Offset(0.0, 100.0)),
new OffsetLayer(offset: const Offset(0.0, 200.0)),
];
int i = 0;
for (OffsetLayer layer in layers) {
layer.append(new AnnotatedRegionLayer<int>(i, size: const Size(200.0, 100.0)));
containerLayer.append(layer);
i += 1;
}
expect(containerLayer.find<int>(const Offset(0.0, 1.0)), 0);
expect(containerLayer.find<int>(const Offset(0.0, 101.0)), 1);
expect(containerLayer.find<int>(const Offset(0.0, 201.0)), 2);
});
test('finds a value within the clip in a ClipRectLayer', () {
final ContainerLayer containerLayer = new ContainerLayer();
final List<ClipRectLayer> layers = <ClipRectLayer>[
new ClipRectLayer(clipRect: new Rect.fromLTRB(0.0, 0.0, 100.0, 100.0)),
new ClipRectLayer(clipRect: new Rect.fromLTRB(0.0, 100.0, 100.0, 200.0)),
new ClipRectLayer(clipRect: new Rect.fromLTRB(0.0, 200.0, 100.0, 300.0)),
];
int i = 0;
for (ClipRectLayer layer in layers) {
layer.append(new AnnotatedRegionLayer<int>(i));
containerLayer.append(layer);
i += 1;
}
expect(containerLayer.find<int>(const Offset(0.0, 1.0)), 0);
expect(containerLayer.find<int>(const Offset(0.0, 101.0)), 1);
expect(containerLayer.find<int>(const Offset(0.0, 201.0)), 2);
});
test('finds a value within the clip in a ClipRRectLayer', () {
final ContainerLayer containerLayer = new ContainerLayer();
final List<ClipRRectLayer> layers = <ClipRRectLayer>[
new ClipRRectLayer(clipRRect: new RRect.fromLTRBR(0.0, 0.0, 100.0, 100.0, const Radius.circular(4.0))),
new ClipRRectLayer(clipRRect: new RRect.fromLTRBR(0.0, 100.0, 100.0, 200.0, const Radius.circular(4.0))),
new ClipRRectLayer(clipRRect: new RRect.fromLTRBR(0.0, 200.0, 100.0, 300.0, const Radius.circular(4.0))),
];
int i = 0;
for (ClipRRectLayer layer in layers) {
layer.append(new AnnotatedRegionLayer<int>(i));
containerLayer.append(layer);
i += 1;
}
expect(containerLayer.find<int>(const Offset(5.0, 5.0)), 0);
expect(containerLayer.find<int>(const Offset(5.0, 105.0)), 1);
expect(containerLayer.find<int>(const Offset(5.0, 205.0)), 2);
});
test('finds a value under a TransformLayer', () {
final Matrix4 transform = new Matrix4(
2.625, 0.0, 0.0, 0.0,
0.0, 2.625, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0,
);
final TransformLayer transformLayer = new TransformLayer(transform: transform);
final List<OffsetLayer> layers = <OffsetLayer>[
new OffsetLayer(),
new OffsetLayer(offset: const Offset(0.0, 100.0)),
new OffsetLayer(offset: const Offset(0.0, 200.0)),
];
int i = 0;
for (OffsetLayer layer in layers) {
final AnnotatedRegionLayer<int> annotatedRegionLayer = new AnnotatedRegionLayer<int>(i, size: const Size(100.0, 100.0));
layer.append(annotatedRegionLayer);
transformLayer.append(layer);
i += 1;
}
expect(transformLayer.find<int>(const Offset(0.0, 100.0)), 0);
expect(transformLayer.find<int>(const Offset(0.0, 200.0)), 0);
expect(transformLayer.find<int>(const Offset(0.0, 270.0)), 1);
expect(transformLayer.find<int>(const Offset(0.0, 400.0)), 1);
expect(transformLayer.find<int>(const Offset(0.0, 530.0)), 2);
});
test('looks for child AnnotatedRegions before parents', () {
final AnnotatedRegionLayer<int> parent = new AnnotatedRegionLayer<int>(1);
final AnnotatedRegionLayer<int> child = new AnnotatedRegionLayer<int>(2);
final ContainerLayer layer = new ContainerLayer();
parent.append(child);
layer.append(parent);
expect(parent.find<int>(Offset.zero), 2);
});
test('looks for correct type', () {
final AnnotatedRegionLayer<int> child1 = new AnnotatedRegionLayer<int>(1);
final AnnotatedRegionLayer<String> child2 = new AnnotatedRegionLayer<String>('hello');
final ContainerLayer layer = new ContainerLayer();
layer.append(child2);
layer.append(child1);
expect(layer.find<String>(Offset.zero), 'hello');
});
test('does not clip Layer.find on an AnnotatedRegion with an unrelated type', () {
final AnnotatedRegionLayer<int> child = new AnnotatedRegionLayer<int>(1);
final AnnotatedRegionLayer<String> parent = new AnnotatedRegionLayer<String>('hello', size: const Size(10.0, 10.0));
final ContainerLayer layer = new ContainerLayer();
parent.append(child);
layer.append(parent);
expect(layer.find<int>(const Offset(100.0, 100.0)), 1);
});
test('handles non-invertable transforms', () {
final AnnotatedRegionLayer<int> child = new AnnotatedRegionLayer<int>(1);
final TransformLayer parent = new TransformLayer(transform: new Matrix4.diagonal3Values(0.0, 1.0, 1.0));
parent.append(child);
expect(parent.find<int>(const Offset(0.0, 0.0)), null);
parent.transform = new Matrix4.diagonal3Values(1.0, 1.0, 1.0);
expect(parent.find<int>(const Offset(0.0, 0.0)), 1);
});
});
}