@@ -12,8 +12,11 @@ import 'package:test/test.dart';
1212
1313void main () {
1414 // Resolved top-level types from dart:core and dart:collection.
15+ InterfaceType staticUri;
1516 DartType staticMap;
1617 DartType staticHashMap;
18+ DartType staticUnmodifiableListView;
19+ TypeChecker staticIterableChecker;
1720 TypeChecker staticMapChecker;
1821 TypeChecker staticHashMapChecker;
1922
@@ -29,12 +32,17 @@ void main() {
2932 ''' );
3033
3134 final core = resolver.getLibraryByName ('dart.core' );
35+ var staticIterable = core.getType ('Iterable' ).type;
36+ staticIterableChecker = new TypeChecker .fromStatic (staticIterable);
37+ staticUri = core.getType ('Uri' ).type;
3238 staticMap = core.getType ('Map' ).type;
3339 staticMapChecker = new TypeChecker .fromStatic (staticMap);
3440
3541 final collection = resolver.getLibraryByName ('dart.collection' );
3642 staticHashMap = collection.getType ('HashMap' ).type;
3743 staticHashMapChecker = new TypeChecker .fromStatic (staticHashMap);
44+ staticUnmodifiableListView =
45+ collection.getType ('UnmodifiableListView' ).type;
3846
3947 final sourceGen =
4048 new LibraryReader (resolver.getLibraryByName ('source_gen' ));
@@ -48,11 +56,20 @@ void main() {
4856
4957 // Run a common set of type comparison checks with various implementations.
5058 void commonTests ({
59+ @required TypeChecker checkIterable (),
5160 @required TypeChecker checkMap (),
5261 @required TypeChecker checkHashMap (),
5362 @required TypeChecker checkGenerator (),
5463 @required TypeChecker checkGeneratorForAnnotation (),
5564 }) {
65+ group ('(Iterable)' , () {
66+ test ('should be assignable from dart:collection#UnmodifiableListView' ,
67+ () {
68+ expect (checkIterable ().isAssignableFromType (staticUnmodifiableListView),
69+ true );
70+ });
71+ });
72+
5673 group ('(Map)' , () {
5774 test ('should equal dart:core#Map' , () {
5875 expect (checkMap ().isExactlyType (staticMap), isTrue,
@@ -69,12 +86,22 @@ void main() {
6986 });
7087
7188 test ('should be a super type of dart:collection#HashMap' , () {
72- expect (checkMap ().isSuperTypeOf (staticHashMap), isTrue );
89+ expect (checkMap ().isSuperTypeOf (staticHashMap), isFalse );
7390 });
7491
7592 test ('should be assignable from dart:collection#HashMap' , () {
7693 expect (checkMap ().isAssignableFromType (staticHashMap), isTrue);
7794 });
95+
96+ // Ensure we're consistent WRT generic types
97+ test ('should be assignable from Map<String, String>' , () {
98+ // Using Uri.queryParamaters to get a Map<String, String>
99+ var stringStringMapType =
100+ staticUri.getGetter ('queryParameters' ).returnType;
101+
102+ expect (checkMap ().isAssignableFromType (stringStringMapType), isTrue);
103+ expect (checkMap ().isExactlyType (stringStringMapType), isTrue);
104+ });
78105 });
79106
80107 group ('(HashMap)' , () {
@@ -122,6 +149,7 @@ void main() {
122149
123150 group ('TypeChecker.forRuntime' , () {
124151 commonTests (
152+ checkIterable: () => const TypeChecker .fromRuntime (Iterable ),
125153 checkMap: () => const TypeChecker .fromRuntime (Map ),
126154 checkHashMap: () => const TypeChecker .fromRuntime (HashMap ),
127155 checkGenerator: () => const TypeChecker .fromRuntime (Generator ),
@@ -131,6 +159,7 @@ void main() {
131159
132160 group ('TypeChecker.forStatic' , () {
133161 commonTests (
162+ checkIterable: () => staticIterableChecker,
134163 checkMap: () => staticMapChecker,
135164 checkHashMap: () => staticHashMapChecker,
136165 checkGenerator: () => staticGeneratorChecker,
@@ -139,6 +168,7 @@ void main() {
139168
140169 group ('TypeChecker.fromUrl' , () {
141170 commonTests (
171+ checkIterable: () => const TypeChecker .fromUrl ('dart:core#Iterable' ),
142172 checkMap: () => const TypeChecker .fromUrl ('dart:core#Map' ),
143173 checkHashMap: () =>
144174 const TypeChecker .fromUrl ('dart:collection#HashMap' ),
0 commit comments