1+ using System . Collections ;
2+ using PostCodeSerialMonitor . Models ;
3+
4+ namespace PostCodeSerialMonitor . Tests ;
5+ public class SemanticVersionTestDataGenerator : IEnumerable < object [ ] >
6+ {
7+ private readonly List < object [ ] > _data = new List < object [ ] >
8+ {
9+ new object [ ] { "0.2.0.0" , "0.2.1.0" , true } ,
10+ new object [ ] { "0.2.0.0" , "0.2.10.0" , true } ,
11+ new object [ ] { "0.2.0.0" , "0.2.0.1" , true } ,
12+ new object [ ] { "0.2.0.0" , "0.3.0" , true } ,
13+ new object [ ] { "0.2.0.0" , "0.1.99" , false } ,
14+ new object [ ] { "0.2.0.0" , "0.1.33.0" , false } ,
15+ new object [ ] { "0.3.0" , "0.3.1" , true } ,
16+ new object [ ] { "0.3.1.0" , "0.3.11.0" , true } ,
17+ new object [ ] { "0.3.2.0" , "0.3.20.0" , true } ,
18+ new object [ ] { "0.3.11.0" , "0.3.1.0" , false } ,
19+
20+ new object [ ] { "1.0.0" , "1.0.1" , true } ,
21+ new object [ ] { "1.0.0" , "1.1.0" , true } ,
22+ new object [ ] { "1.0.0" , "2.0.0" , true } ,
23+ new object [ ] { "2.0.0" , "1.9.9" , false } ,
24+ new object [ ] { "1.2.3" , "1.2.4" , true } ,
25+ new object [ ] { "1.2.3" , "1.3.0" , true } ,
26+ new object [ ] { "1.2.3" , "2.0.0" , true } ,
27+ new object [ ] { "1.2.3" , "1.2.3" , false } ,
28+ new object [ ] { "10.0.0" , "9.99.99" , false } ,
29+ new object [ ] { "0.0.1" , "0.0.2" , true } ,
30+ new object [ ] { "0.0.1" , "0.1.0" , true } ,
31+ new object [ ] { "0.0.1" , "1.0.0" , true } ,
32+
33+ new object [ ] { "v0.2.0.0" , "v0.2.1.0" , true } ,
34+ new object [ ] { "v0.2.0.0" , "0.2.1.0" , true } ,
35+ new object [ ] { "0.2.0.0" , "v0.2.1.0" , true } ,
36+ new object [ ] { "v1.0.0" , "v1.0.1" , true } ,
37+ new object [ ] { "v1.0.0" , "1.0.1" , true } ,
38+ new object [ ] { "1.0.0" , "v1.0.1" , true } ,
39+ new object [ ] { "v2.3.4" , "v2.3.5" , true } ,
40+ new object [ ] { "v2.3.4" , "2.3.5" , true } ,
41+ new object [ ] { "2.3.4" , "v2.3.5" , true } ,
42+ new object [ ] { "v10.20.30" , "v10.20.31" , true } ,
43+ new object [ ] { "v10.20.30" , "10.20.31" , true } ,
44+ new object [ ] { "10.20.30" , "v10.20.31" , true } ,
45+
46+ new object [ ] { "v0.0.1" , "v0.0.2" , true } ,
47+ new object [ ] { "v0.0.1" , "0.0.2" , true } ,
48+ new object [ ] { "0.0.1" , "v0.0.2" , true } ,
49+ new object [ ] { "v1.2.3" , "v1.2.3" , false } ,
50+ new object [ ] { "v1.2.3" , "1.2.3" , false } ,
51+ new object [ ] { "1.2.3" , "v1.2.3" , false } ,
52+
53+ new object [ ] { "0.1.0" , "v0.2.0" , true } ,
54+ new object [ ] { "v0.1.0" , "0.2.0" , true } ,
55+ new object [ ] { "0.1.0.0" , "v0.2.0" , true } ,
56+ new object [ ] { "v0.1.0.0" , "0.2.0" , true } ,
57+ new object [ ] { "1.0.0.0" , "v1.1.0" , true } ,
58+ new object [ ] { "v1.0.0.0" , "1.1.0" , true } ,
59+
60+ new object [ ] { "0.9.9.9" , "v1.0.0.0" , true } ,
61+ new object [ ] { "v0.9.9.9" , "1.0.0.0" , true } ,
62+ new object [ ] { "1.99.99.99" , "v2.0.0.0" , true } ,
63+ new object [ ] { "v1.99.99.99" , "2.0.0.0" , true } ,
64+ new object [ ] { "0.0.0.1" , "v0.0.0.2" , true } ,
65+ new object [ ] { "v0.0.0.1" , "0.0.0" , false } ,
66+ } ;
67+
68+ public IEnumerator < object [ ] > GetEnumerator ( ) => _data . GetEnumerator ( ) ;
69+
70+ IEnumerator IEnumerable . GetEnumerator ( ) => GetEnumerator ( ) ;
71+ }
72+
73+ public class SemanticVersionTests
74+ {
75+ [ Fact ]
76+ public void TestParsing ( )
77+ {
78+ Assert . Equal ( [ 0 , 1 , 2 , 3 ] , new SemanticVersion ( "v0.1.2.3" ) . VersionParts ) ;
79+ Assert . Equal ( [ 0 , 1 , 2 , 3 ] , new SemanticVersion ( "0.1.2.3" ) . VersionParts ) ;
80+ Assert . Equal ( [ 0 , 1 , 2 , 0 ] , new SemanticVersion ( "v0.1.2" ) . VersionParts ) ;
81+ Assert . Equal ( [ 0 , 1 , 2 , 0 ] , new SemanticVersion ( "0.1.2" ) . VersionParts ) ;
82+ }
83+
84+ [ Theory ]
85+ [ ClassData ( typeof ( SemanticVersionTestDataGenerator ) ) ]
86+ public void TestComparison ( string localVersion , string remoteVersion , bool isNewer )
87+ {
88+ var local = new SemanticVersion ( localVersion ) ;
89+ var remote = new SemanticVersion ( remoteVersion ) ;
90+
91+ Assert . Equal ( isNewer , remote > local ) ;
92+ }
93+ }
0 commit comments