Index: mojo/public/dart/third_party/pub_semver/test/utils.dart |
diff --git a/mojo/public/dart/third_party/pub_semver/test/utils.dart b/mojo/public/dart/third_party/pub_semver/test/utils.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6fefdae76c806b17d84c44293a1e45ff0fc0a36d |
--- /dev/null |
+++ b/mojo/public/dart/third_party/pub_semver/test/utils.dart |
@@ -0,0 +1,100 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library pub_semver.test.utils; |
+ |
+import 'package:test/test.dart'; |
+ |
+import 'package:pub_semver/pub_semver.dart'; |
+ |
+/// Some stock example versions to use in tests. |
+final v003 = new Version.parse('0.0.3'); |
+final v010 = new Version.parse('0.1.0'); |
+final v072 = new Version.parse('0.7.2'); |
+final v080 = new Version.parse('0.8.0'); |
+final v114 = new Version.parse('1.1.4'); |
+final v123 = new Version.parse('1.2.3'); |
+final v124 = new Version.parse('1.2.4'); |
+final v130 = new Version.parse('1.3.0'); |
+final v140 = new Version.parse('1.4.0'); |
+final v200 = new Version.parse('2.0.0'); |
+final v201 = new Version.parse('2.0.1'); |
+final v234 = new Version.parse('2.3.4'); |
+final v250 = new Version.parse('2.5.0'); |
+final v300 = new Version.parse('3.0.0'); |
+ |
+/// A [Matcher] that tests if a [VersionConstraint] allows or does not allow a |
+/// given list of [Version]s. |
+class _VersionConstraintMatcher implements Matcher { |
+ final List<Version> _expected; |
+ final bool _allow; |
+ |
+ _VersionConstraintMatcher(this._expected, this._allow); |
+ |
+ bool matches(item, Map matchState) => (item is VersionConstraint) && |
+ _expected.every((version) => item.allows(version) == _allow); |
+ |
+ Description describe(Description description) { |
+ description.addAll(' ${_allow ? "allows" : "does not allow"} versions ', |
+ ', ', '', _expected); |
+ return description; |
+ } |
+ |
+ Description describeMismatch(item, Description mismatchDescription, |
+ Map matchState, bool verbose) { |
+ if (item is! VersionConstraint) { |
+ mismatchDescription.add('was not a VersionConstraint'); |
+ return mismatchDescription; |
+ } |
+ |
+ var first = true; |
+ for (var version in _expected) { |
+ if (item.allows(version) != _allow) { |
+ if (first) { |
+ if (_allow) { |
+ mismatchDescription.addDescriptionOf(item).add(' did not allow '); |
+ } else { |
+ mismatchDescription.addDescriptionOf(item).add(' allowed '); |
+ } |
+ } else { |
+ mismatchDescription.add(' and '); |
+ } |
+ first = false; |
+ |
+ mismatchDescription.add(version.toString()); |
+ } |
+ } |
+ |
+ return mismatchDescription; |
+ } |
+} |
+ |
+/// Gets a [Matcher] that validates that a [VersionConstraint] allows all |
+/// given versions. |
+Matcher allows(Version v1, [Version v2, Version v3, Version v4, |
+ Version v5, Version v6, Version v7, Version v8]) { |
+ var versions = _makeVersionList(v1, v2, v3, v4, v5, v6, v7, v8); |
+ return new _VersionConstraintMatcher(versions, true); |
+} |
+ |
+/// Gets a [Matcher] that validates that a [VersionConstraint] allows none of |
+/// the given versions. |
+Matcher doesNotAllow(Version v1, [Version v2, Version v3, Version v4, |
+ Version v5, Version v6, Version v7, Version v8]) { |
+ var versions = _makeVersionList(v1, v2, v3, v4, v5, v6, v7, v8); |
+ return new _VersionConstraintMatcher(versions, false); |
+} |
+ |
+List<Version> _makeVersionList(Version v1, [Version v2, Version v3, Version v4, |
+ Version v5, Version v6, Version v7, Version v8]) { |
+ var versions = [v1]; |
+ if (v2 != null) versions.add(v2); |
+ if (v3 != null) versions.add(v3); |
+ if (v4 != null) versions.add(v4); |
+ if (v5 != null) versions.add(v5); |
+ if (v6 != null) versions.add(v6); |
+ if (v7 != null) versions.add(v7); |
+ if (v8 != null) versions.add(v8); |
+ return versions; |
+} |