@@ -69,6 +69,86 @@ void main() {
69
69
failParse ('WhiteSpace 2' , '1 .1' );
70
70
failParse ('WhiteSpace 3' , '1. 1' );
71
71
failParse ('WhiteSpace 4' , '1.1 ' );
72
+
73
+ test ('compareTo valid' , () {
74
+ var version = LanguageVersion (3 , 5 );
75
+
76
+ for (var (otherVersion, matcher) in [
77
+ (version, isZero), // Identical.
78
+ (LanguageVersion (3 , 5 ), isZero), // Same major, same minor.
79
+ (LanguageVersion (3 , 4 ), isPositive), // Same major, lower minor.
80
+ (LanguageVersion (3 , 6 ), isNegative), // Same major, greater minor.
81
+ (LanguageVersion (2 , 5 ), isPositive), // Lower major, same minor.
82
+ (LanguageVersion (2 , 4 ), isPositive), // Lower major, lower minor.
83
+ (LanguageVersion (2 , 6 ), isPositive), // Lower major, greater minor.
84
+ (LanguageVersion (4 , 5 ), isNegative), // Greater major, same minor.
85
+ (LanguageVersion (4 , 4 ), isNegative), // Greater major, lower minor.
86
+ (LanguageVersion (4 , 6 ), isNegative), // Greater major, greater minor.
87
+ ]) {
88
+ expect (version.compareTo (otherVersion), matcher);
89
+ }
90
+ });
91
+
92
+ test ('compareTo invalid' , () {
93
+ var validVersion = LanguageVersion (3 , 5 );
94
+ var invalidVersion = LanguageVersion .parse ('' , onError: (_) {});
95
+
96
+ expect (validVersion.compareTo (invalidVersion), isPositive);
97
+ expect (invalidVersion.compareTo (validVersion), isNegative);
98
+ });
99
+
100
+ test ('relational valid' , () {
101
+ /// Test that the relational comparisons between two valid versions
102
+ /// match the results of `compareTo` .
103
+ void testComparisons (
104
+ LanguageVersion version, LanguageVersion otherVersion) {
105
+ expect (version == otherVersion, version.compareTo (otherVersion) == 0 );
106
+
107
+ expect (version < otherVersion, version.compareTo (otherVersion) < 0 );
108
+ expect (version <= otherVersion, version.compareTo (otherVersion) <= 0 );
109
+
110
+ expect (version > otherVersion, version.compareTo (otherVersion) > 0 );
111
+ expect (version >= otherVersion, version.compareTo (otherVersion) >= 0 );
112
+ }
113
+
114
+ var version = LanguageVersion (3 , 5 );
115
+
116
+ // Check relational comparisons of a version to itself.
117
+ testComparisons (version, version);
118
+
119
+ // Check relational comparisons of a version to versions with all
120
+ // possible combinations of minor and major versions that are
121
+ // the same, lower, and greater.
122
+ for (final major in [2 , 3 , 4 ]) {
123
+ for (final minor in [4 , 5 , 6 ]) {
124
+ testComparisons (version, LanguageVersion (major, minor));
125
+ }
126
+ }
127
+ });
128
+
129
+ test ('relational invalid' , () {
130
+ void testComparisonsWithInvalid (
131
+ LanguageVersion version,
132
+ LanguageVersion otherVersion,
133
+ ) {
134
+ expect (version == otherVersion, identical (version, otherVersion));
135
+
136
+ expect (() => version < otherVersion, throwsA (isA <StateError >()));
137
+ expect (() => version <= otherVersion, throwsA (isA <StateError >()));
138
+
139
+ expect (() => version > otherVersion, throwsA (isA <StateError >()));
140
+ expect (() => version >= otherVersion, throwsA (isA <StateError >()));
141
+ }
142
+
143
+ var validVersion = LanguageVersion (3 , 5 );
144
+ var invalidVersion = LanguageVersion .parse ('' , onError: (_) {});
145
+ var differentInvalidVersion = LanguageVersion .parse ('-' , onError: (_) {});
146
+
147
+ testComparisonsWithInvalid (validVersion, invalidVersion);
148
+ testComparisonsWithInvalid (invalidVersion, validVersion);
149
+ testComparisonsWithInvalid (invalidVersion, invalidVersion);
150
+ testComparisonsWithInvalid (invalidVersion, differentInvalidVersion);
151
+ });
72
152
});
73
153
74
154
group ('Package' , () {
0 commit comments