| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 define(function() { | 5 define(function() { |
| 6 // Equality function based on isEqual in | 6 // Equality function based on isEqual in |
| 7 // Underscore.js 1.5.2 | 7 // Underscore.js 1.5.2 |
| 8 // http://underscorejs.org | 8 // http://underscorejs.org |
| 9 // (c) 2009-2013 Jeremy Ashkenas, | 9 // (c) 2009-2013 Jeremy Ashkenas, |
| 10 // DocumentCloud, | 10 // DocumentCloud, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 var aCtor = a.constructor, bCtor = b.constructor; | 75 var aCtor = a.constructor, bCtor = b.constructor; |
| 76 if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && | 76 if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && |
| 77 isFunction(bCtor) && (bCtor instanceof bCtor)) | 77 isFunction(bCtor) && (bCtor instanceof bCtor)) |
| 78 && ('constructor' in a && 'constructor' in b)) { | 78 && ('constructor' in a && 'constructor' in b)) { |
| 79 return false; | 79 return false; |
| 80 } | 80 } |
| 81 // Add the first object to the stack of traversed objects. | 81 // Add the first object to the stack of traversed objects. |
| 82 aStack.push(a); | 82 aStack.push(a); |
| 83 bStack.push(b); | 83 bStack.push(b); |
| 84 var size = 0, result = true; | 84 var size = 0, result = true; |
| 85 // Recursively compare objects and arrays. | 85 // Recursively compare Maps, objects and arrays. |
| 86 if (className == '[object Array]' || isArrayBufferClass(className)) { | 86 if (className == '[object Array]' || isArrayBufferClass(className)) { |
| 87 // Compare array lengths to determine if a deep comparison is necessary. | 87 // Compare array lengths to determine if a deep comparison is necessary. |
| 88 size = a.length; | 88 size = a.length; |
| 89 result = size == b.length; | 89 result = size == b.length; |
| 90 if (result) { | 90 if (result) { |
| 91 // Deep compare the contents, ignoring non-numeric properties. | 91 // Deep compare the contents, ignoring non-numeric properties. |
| 92 while (size--) { | 92 while (size--) { |
| 93 if (!(result = eq(a[size], b[size], aStack, bStack))) | 93 if (!(result = eq(a[size], b[size], aStack, bStack))) |
| 94 break; | 94 break; |
| 95 } | 95 } |
| 96 } | 96 } |
| 97 } else if (className == '[object Map]') { |
| 98 result = a.size == b.size; |
| 99 if (result) { |
| 100 var entries = a.entries(); |
| 101 for (var e = entries.next(); result && !e.done; e = entries.next()) { |
| 102 var key = e.value[0]; |
| 103 var value = e.value[1]; |
| 104 result = b.has(key) && eq(value, b.get(key), aStack, bStack); |
| 105 } |
| 106 } |
| 97 } else { | 107 } else { |
| 98 // Deep compare objects. | 108 // Deep compare objects. |
| 99 for (var key in a) { | 109 for (var key in a) { |
| 100 if (has(a, key)) { | 110 if (has(a, key)) { |
| 101 // Count the expected number of properties. | 111 // Count the expected number of properties. |
| 102 size++; | 112 size++; |
| 103 // Deep compare each member. | 113 // Deep compare each member. |
| 104 if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack))) | 114 if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack))) |
| 105 break; | 115 break; |
| 106 } | 116 } |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 var bound = predicates[name].bind(null, actual); | 290 var bound = predicates[name].bind(null, actual); |
| 281 this[name] = check(bound); | 291 this[name] = check(bound); |
| 282 this.not[name] = check(negate(bound)); | 292 this.not[name] = check(negate(bound)); |
| 283 }, this); | 293 }, this); |
| 284 } | 294 } |
| 285 | 295 |
| 286 return function(actual) { | 296 return function(actual) { |
| 287 return new Condition(actual); | 297 return new Condition(actual); |
| 288 }; | 298 }; |
| 289 }); | 299 }); |
| OLD | NEW |