@@ -84,3 +84,63 @@ pub fn is_compatible(client_version: Option<&str>, server_version: Option<&str>)
8484 }
8585 }
8686}
87+
88+ #[ cfg( test) ]
89+ mod tests {
90+ use super :: * ;
91+
92+ #[ test]
93+ fn test_is_compatible ( ) {
94+ let test_cases = vec ! [
95+ ( Some ( "1.9.3.dev0" ) , Some ( "2.8.1.dev12-something" ) , false ) ,
96+ ( Some ( "1.9" ) , Some ( "2.8" ) , false ) ,
97+ ( Some ( "1" ) , Some ( "2" ) , false ) ,
98+ ( Some ( "1.9.0" ) , Some ( "2.9.0" ) , false ) ,
99+ ( Some ( "1.1.0" ) , Some ( "1.2.9" ) , true ) ,
100+ ( Some ( "1.2.7" ) , Some ( "1.1.8.dev0" ) , true ) ,
101+ ( Some ( "1.2.1" ) , Some ( "1.2.29" ) , true ) ,
102+ ( Some ( "1.2.0" ) , Some ( "1.2.0" ) , true ) ,
103+ ( Some ( "1.2.0" ) , Some ( "1.4.0" ) , false ) ,
104+ ( Some ( "1.4.0" ) , Some ( "1.2.0" ) , false ) ,
105+ ( Some ( "1.9.0" ) , Some ( "3.7.0" ) , false ) ,
106+ ( Some ( "3.0.0" ) , Some ( "1.0.0" ) , false ) ,
107+ ( None , Some ( "1.0.0" ) , false ) ,
108+ ( Some ( "1.0.0" ) , None , false ) ,
109+ ( None , None , false ) ,
110+ ] ;
111+
112+ for ( client_version, server_version, expected_result) in test_cases {
113+ let result = is_compatible ( client_version, server_version) ;
114+ assert_eq ! (
115+ result, expected_result,
116+ "Failed for client: {:?}, server: {:?}" ,
117+ client_version, server_version
118+ ) ;
119+ }
120+ }
121+
122+ #[ test]
123+ fn test_version_parse_errors ( ) {
124+ let test_cases = vec ! [
125+ ( "1" , VersionParseError :: InvalidFormat ( "1" . to_string( ) ) ) ,
126+ ( "1." , VersionParseError :: InvalidFormat ( "1." . to_string( ) ) ) ,
127+ ( ".1" , VersionParseError :: InvalidFormat ( ".1" . to_string( ) ) ) ,
128+ ( ".1." , VersionParseError :: InvalidFormat ( ".1." . to_string( ) ) ) ,
129+ (
130+ "1.a.1" ,
131+ VersionParseError :: InvalidFormat ( "1.a.1" . to_string( ) ) ,
132+ ) ,
133+ (
134+ "a.1.1" ,
135+ VersionParseError :: InvalidFormat ( "a.1.1" . to_string( ) ) ,
136+ ) ,
137+ ( "" , VersionParseError :: EmptyVersion ) ,
138+ ] ;
139+
140+ for ( input, expected_error) in test_cases {
141+ let result = Version :: parse ( input) ;
142+ assert ! ( result. is_err( ) ) ;
143+ assert_eq ! ( result. unwrap_err( ) . to_string( ) , expected_error. to_string( ) ) ;
144+ }
145+ }
146+ }
0 commit comments