OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library dart2js.serialization_test_helper; | 5 library dart2js.serialization_test_helper; |
6 | 6 |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 import 'memory_compiler.dart'; | 8 import 'memory_compiler.dart'; |
9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
10 import 'package:compiler/src/common/resolution.dart'; | 10 import 'package:compiler/src/common/resolution.dart'; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 List<ConstantExpression> list2) { | 97 List<ConstantExpression> list2) { |
98 return checkConstantLists(object1, object2, property, list1, list2); | 98 return checkConstantLists(object1, object2, property, list1, list2); |
99 } | 99 } |
100 } | 100 } |
101 | 101 |
102 /// Check that the values [property] of [object1] and [object2], [value1] and | 102 /// Check that the values [property] of [object1] and [object2], [value1] and |
103 /// [value2] respectively, are equal and throw otherwise. | 103 /// [value2] respectively, are equal and throw otherwise. |
104 bool check(var object1, var object2, String property, var value1, var value2, | 104 bool check(var object1, var object2, String property, var value1, var value2, |
105 [bool equivalence(a, b) = equality]) { | 105 [bool equivalence(a, b) = equality]) { |
106 if (!equivalence(value1, value2)) { | 106 if (!equivalence(value1, value2)) { |
107 throw "property='$property' " | 107 throw "property='$property'\n " |
108 "object1=$object1 (${object1.runtimeType}), value='${value1}' <> " | 108 "object1=$object1 (${object1.runtimeType})\n value='${value1}' <>\n " |
109 "object2=$object2 (${object2.runtimeType}), value='${value2}'"; | 109 "object2=$object2 (${object2.runtimeType})\n value='${value2}'"; |
110 } | 110 } |
111 return true; | 111 return true; |
112 } | 112 } |
113 | 113 |
114 /// Check equivalence of the two lists, [list1] and [list2], using | 114 /// Check equivalence of the two lists, [list1] and [list2], using |
115 /// [checkEquivalence] to check the pair-wise equivalence. | 115 /// [checkEquivalence] to check the pair-wise equivalence. |
116 /// | 116 /// |
117 /// Uses [object1], [object2] and [property] to provide context for failures. | 117 /// Uses [object1], [object2] and [property] to provide context for failures. |
118 bool checkListEquivalence( | 118 bool checkListEquivalence( |
119 Object object1, Object object2, String property, | 119 Object object1, Object object2, String property, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 } | 205 } |
206 | 206 |
207 /// Checks the equivalence of the identity (but not properties) of [element1] | 207 /// Checks the equivalence of the identity (but not properties) of [element1] |
208 /// and [element2]. | 208 /// and [element2]. |
209 /// | 209 /// |
210 /// Uses [object1], [object2] and [property] to provide context for failures. | 210 /// Uses [object1], [object2] and [property] to provide context for failures. |
211 bool checkElementIdentities( | 211 bool checkElementIdentities( |
212 Object object1, Object object2, String property, | 212 Object object1, Object object2, String property, |
213 Element element1, Element element2) { | 213 Element element1, Element element2) { |
214 if (identical(element1, element2)) return true; | 214 if (identical(element1, element2)) return true; |
215 if (element1 == null || element2 == null) { | 215 return check(object1, object2, |
216 return check(object1, object2, property, element1, element2); | 216 property, element1, element2, areElementsEquivalent); |
217 } else { | |
218 return const ElementIdentityEquivalence(const CheckStrategy()) | |
219 .visit(element1, element2); | |
220 } | |
221 } | 217 } |
222 | 218 |
223 /// Checks the pair-wise equivalence of the identity (but not properties) of the | 219 /// Checks the pair-wise equivalence of the identity (but not properties) of the |
224 /// elements in [list] and [list2]. | 220 /// elements in [list] and [list2]. |
225 /// | 221 /// |
226 /// Uses [object1], [object2] and [property] to provide context for failures. | 222 /// Uses [object1], [object2] and [property] to provide context for failures. |
227 bool checkElementListIdentities( | 223 bool checkElementListIdentities( |
228 Object object1, Object object2, String property, | 224 Object object1, Object object2, String property, |
229 Iterable<Element> list1, Iterable<Element> list2) { | 225 Iterable<Element> list1, Iterable<Element> list2) { |
230 return checkListEquivalence( | 226 return checkListEquivalence( |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 compiler2.serialization.deserializer.getResolutionImpact(member2); | 352 compiler2.serialization.deserializer.getResolutionImpact(member2); |
357 | 353 |
358 if (impact1 == null || impact2 == null) return; | 354 if (impact1 == null || impact2 == null) return; |
359 | 355 |
360 if (verbose) { | 356 if (verbose) { |
361 print('Checking impacts for $member1 vs $member2'); | 357 print('Checking impacts for $member1 vs $member2'); |
362 } | 358 } |
363 | 359 |
364 testResolutionImpactEquivalence(impact1, impact2, const CheckStrategy()); | 360 testResolutionImpactEquivalence(impact1, impact2, const CheckStrategy()); |
365 } | 361 } |
OLD | NEW |