1+ using Microsoft . VisualStudio . TestTools . UnitTesting ;
2+ using Daqifi . Desktop . Helpers ;
3+
4+ namespace Daqifi . Desktop . Test . Helpers ;
5+
6+ [ TestClass ]
7+ public class VersionHelperTests
8+ {
9+ #region TryParseVersionInfo Tests
10+
11+ [ TestMethod ]
12+ public void TryParseVersionInfo_ValidFullVersion_ReturnsTrue ( )
13+ {
14+ // Arrange & Act
15+ var result = VersionHelper . TryParseVersionInfo ( "1.2.3" , out var version ) ;
16+
17+ // Assert
18+ Assert . IsTrue ( result ) ;
19+ Assert . AreEqual ( 1 , version . Major ) ;
20+ Assert . AreEqual ( 2 , version . Minor ) ;
21+ Assert . AreEqual ( 3 , version . Patch ) ;
22+ Assert . IsFalse ( version . IsPreRelease ) ;
23+ }
24+
25+ [ TestMethod ]
26+ public void TryParseVersionInfo_VersionWithVPrefix_ReturnsTrue ( )
27+ {
28+ // Arrange & Act
29+ var result = VersionHelper . TryParseVersionInfo ( "v2.1.0" , out var version ) ;
30+
31+ // Assert
32+ Assert . IsTrue ( result ) ;
33+ Assert . AreEqual ( 2 , version . Major ) ;
34+ Assert . AreEqual ( 1 , version . Minor ) ;
35+ Assert . AreEqual ( 0 , version . Patch ) ;
36+ }
37+
38+ [ TestMethod ]
39+ public void TryParseVersionInfo_VersionWithBetaSuffix_ReturnsTrue ( )
40+ {
41+ // Arrange & Act
42+ var result = VersionHelper . TryParseVersionInfo ( "1.2.3beta2" , out var version ) ;
43+
44+ // Assert
45+ Assert . IsTrue ( result ) ;
46+ Assert . AreEqual ( 1 , version . Major ) ;
47+ Assert . AreEqual ( 2 , version . Minor ) ;
48+ Assert . AreEqual ( 3 , version . Patch ) ;
49+ Assert . IsTrue ( version . IsPreRelease ) ;
50+ Assert . AreEqual ( "beta" , version . PreLabel ) ;
51+ Assert . AreEqual ( 2 , version . PreNumber ) ;
52+ }
53+
54+ [ TestMethod ]
55+ public void TryParseVersionInfo_VersionWithRcSuffix_ReturnsTrue ( )
56+ {
57+ // Arrange & Act
58+ var result = VersionHelper . TryParseVersionInfo ( "2.0.0rc1" , out var version ) ;
59+
60+ // Assert
61+ Assert . IsTrue ( result ) ;
62+ Assert . AreEqual ( 2 , version . Major ) ;
63+ Assert . AreEqual ( 0 , version . Minor ) ;
64+ Assert . AreEqual ( 0 , version . Patch ) ;
65+ Assert . IsTrue ( version . IsPreRelease ) ;
66+ Assert . AreEqual ( "rc" , version . PreLabel ) ;
67+ Assert . AreEqual ( 1 , version . PreNumber ) ;
68+ }
69+
70+ [ TestMethod ]
71+ public void TryParseVersionInfo_EmptyOrNullString_ReturnsFalse ( )
72+ {
73+ // Act & Assert
74+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( "" , out _ ) ) ;
75+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( null , out _ ) ) ;
76+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( " " , out _ ) ) ;
77+ }
78+
79+ [ TestMethod ]
80+ public void TryParseVersionInfo_InvalidFormat_ReturnsFalse ( )
81+ {
82+ // Act & Assert
83+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( "abc" , out _ ) ) ;
84+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( "1.x.3" , out _ ) ) ;
85+ Assert . IsFalse ( VersionHelper . TryParseVersionInfo ( "1.2.3.4.5" , out _ ) ) ;
86+ }
87+
88+ #endregion
89+
90+ #region Compare Tests
91+
92+ [ TestMethod ]
93+ public void Compare_SameVersions_ReturnsZero ( )
94+ {
95+ // Act
96+ var result = VersionHelper . Compare ( "1.2.3" , "1.2.3" ) ;
97+
98+ // Assert
99+ Assert . AreEqual ( 0 , result ) ;
100+ }
101+
102+ [ TestMethod ]
103+ public void Compare_LeftVersionHigher_ReturnsPositive ( )
104+ {
105+ // Act
106+ var result = VersionHelper . Compare ( "2.0.0" , "1.9.9" ) ;
107+
108+ // Assert
109+ Assert . IsTrue ( result > 0 ) ;
110+ }
111+
112+ [ TestMethod ]
113+ public void Compare_RightVersionHigher_ReturnsNegative ( )
114+ {
115+ // Act
116+ var result = VersionHelper . Compare ( "1.2.3" , "1.2.4" ) ;
117+
118+ // Assert
119+ Assert . IsTrue ( result < 0 ) ;
120+ }
121+
122+ [ TestMethod ]
123+ public void Compare_ReleaseVsBeta_ReleaseHigher ( )
124+ {
125+ // Act
126+ var result = VersionHelper . Compare ( "1.2.3" , "1.2.3beta1" ) ;
127+
128+ // Assert
129+ Assert . IsTrue ( result > 0 ) ;
130+ }
131+
132+ [ TestMethod ]
133+ public void Compare_RcVsBeta_RcHigher ( )
134+ {
135+ // Act
136+ var result = VersionHelper . Compare ( "1.2.3rc1" , "1.2.3beta1" ) ;
137+
138+ // Assert
139+ Assert . IsTrue ( result > 0 ) ;
140+ }
141+
142+ [ TestMethod ]
143+ public void Compare_BothInvalid_ReturnsZero ( )
144+ {
145+ // Act
146+ var result = VersionHelper . Compare ( "invalid" , "also-invalid" ) ;
147+
148+ // Assert
149+ Assert . AreEqual ( 0 , result ) ;
150+ }
151+
152+ [ TestMethod ]
153+ public void Compare_OneInvalid_ValidVersionWins ( )
154+ {
155+ // Act & Assert
156+ Assert . IsTrue ( VersionHelper . Compare ( "1.0.0" , "invalid" ) > 0 ) ;
157+ Assert . IsTrue ( VersionHelper . Compare ( "invalid" , "1.0.0" ) < 0 ) ;
158+ }
159+
160+ #endregion
161+
162+ #region NormalizeVersionString Tests
163+
164+ [ TestMethod ]
165+ public void NormalizeVersionString_ValidVersion_ReturnsNormalized ( )
166+ {
167+ // Act
168+ var result = VersionHelper . NormalizeVersionString ( "v1.2.3" ) ;
169+
170+ // Assert
171+ Assert . AreEqual ( "1.2.3" , result ) ;
172+ }
173+
174+ [ TestMethod ]
175+ public void NormalizeVersionString_PreReleaseVersion_ReturnsNormalizedWithSuffix ( )
176+ {
177+ // Act
178+ var result = VersionHelper . NormalizeVersionString ( "1.2.3beta2" ) ;
179+
180+ // Assert
181+ Assert . AreEqual ( "1.2.3beta2" , result ) ;
182+ }
183+
184+ [ TestMethod ]
185+ public void NormalizeVersionString_InvalidVersion_ReturnsNull ( )
186+ {
187+ // Act
188+ var result = VersionHelper . NormalizeVersionString ( "invalid" ) ;
189+
190+ // Assert
191+ Assert . IsNull ( result ) ;
192+ }
193+
194+ #endregion
195+
196+ #region VersionInfo Comparison Tests
197+
198+ [ TestMethod ]
199+ public void VersionInfo_CompareTo_MajorVersionDifference ( )
200+ {
201+ // Arrange
202+ VersionHelper . TryParseVersionInfo ( "2.0.0" , out var v1 ) ;
203+ VersionHelper . TryParseVersionInfo ( "1.9.9" , out var v2 ) ;
204+
205+ // Act & Assert
206+ Assert . IsTrue ( v1 . CompareTo ( v2 ) > 0 ) ;
207+ Assert . IsTrue ( v2 . CompareTo ( v1 ) < 0 ) ;
208+ }
209+
210+ [ TestMethod ]
211+ public void VersionInfo_CompareTo_MinorVersionDifference ( )
212+ {
213+ // Arrange
214+ VersionHelper . TryParseVersionInfo ( "1.2.0" , out var v1 ) ;
215+ VersionHelper . TryParseVersionInfo ( "1.1.9" , out var v2 ) ;
216+
217+ // Act & Assert
218+ Assert . IsTrue ( v1 . CompareTo ( v2 ) > 0 ) ;
219+ }
220+
221+ [ TestMethod ]
222+ public void VersionInfo_CompareTo_PatchVersionDifference ( )
223+ {
224+ // Arrange
225+ VersionHelper . TryParseVersionInfo ( "1.2.3" , out var v1 ) ;
226+ VersionHelper . TryParseVersionInfo ( "1.2.2" , out var v2 ) ;
227+
228+ // Act & Assert
229+ Assert . IsTrue ( v1 . CompareTo ( v2 ) > 0 ) ;
230+ }
231+
232+ [ TestMethod ]
233+ public void VersionInfo_CompareTo_PreReleasePrecedence ( )
234+ {
235+ // Arrange
236+ VersionHelper . TryParseVersionInfo ( "1.0.0alpha1" , out var alpha ) ;
237+ VersionHelper . TryParseVersionInfo ( "1.0.0beta1" , out var beta ) ;
238+ VersionHelper . TryParseVersionInfo ( "1.0.0rc1" , out var rc ) ;
239+ VersionHelper . TryParseVersionInfo ( "1.0.0" , out var release ) ;
240+
241+ // Act & Assert - Release should be highest
242+ Assert . IsTrue ( release . CompareTo ( rc ) > 0 ) ;
243+ Assert . IsTrue ( rc . CompareTo ( beta ) > 0 ) ;
244+ Assert . IsTrue ( beta . CompareTo ( alpha ) > 0 ) ;
245+ }
246+
247+ [ TestMethod ]
248+ public void VersionInfo_ToString_FormatsCorrectly ( )
249+ {
250+ // Arrange
251+ VersionHelper . TryParseVersionInfo ( "1.2.3" , out var release ) ;
252+ VersionHelper . TryParseVersionInfo ( "1.2.3beta2" , out var preRelease ) ;
253+
254+ // Act & Assert
255+ Assert . AreEqual ( "1.2.3" , release . ToString ( ) ) ;
256+ Assert . AreEqual ( "1.2.3beta2" , preRelease . ToString ( ) ) ;
257+ }
258+
259+ #endregion
260+ }
0 commit comments