@@ -5,6 +5,7 @@ use seahorse::{App, Command, Context, Flag, FlagType};
55use std:: env;
66use version:: { Bump , Version } ;
77
8+ #[ cfg( not( tarpaulin_include) ) ]
89fn main ( ) {
910 let args: Vec < String > = env:: args ( ) . collect ( ) ;
1011
@@ -24,7 +25,7 @@ fn main() {
2425 Command :: new ( "set" )
2526 . description ( "Set the version in Cargo.toml" )
2627 . usage ( "cargo-semver set [VERSION]" )
27- . action ( set_version_action )
28+ . action ( set_action )
2829 . flag ( config_file_flag. clone ( ) ) ,
2930 )
3031 . command (
@@ -70,52 +71,149 @@ fn default_action(c: &Context) {
7071 println ! ( "{}" , version. version) ;
7172}
7273
73- /// Set the version in `Config.toml` to the `VALUE` input
74- /// in `cargo-semver set [VERSION]`.
75- fn set_version_action ( c : & Context ) {
74+ fn set_version ( c : & Context , version_arg : & str ) -> String {
7675 let mut version = Version :: new ( c) ;
7776
78- // the new version argument
79- let version_arg = c. args . join ( " " ) ;
80-
81- let new_version = match version_arg. as_str ( ) {
77+ let new_version = match version_arg {
8278 v => match semver:: Version :: parse ( & v) {
8379 Ok ( v) => v,
8480 Err ( err) => panic ! ( "{}" , err) ,
8581 } ,
8682 } ;
8783
88- version. set ( new_version) ;
84+ let new_version = version. set ( new_version) ;
85+ println ! ( "{}" , new_version) ;
86+ new_version
8987}
9088
91- fn bump_version ( c : & Context , bump : Bump ) {
89+ fn bump_version ( c : & Context , bump : Bump ) -> String {
9290 let mut version = Version :: new ( c) ;
9391
9492 let pre_flag = match c. string_flag ( "pre" ) {
9593 Ok ( flag) => Some ( flag) ,
9694 _ => None ,
9795 } ;
9896
99- version. bump ( bump, pre_flag)
97+ let new_version = version. bump ( bump, pre_flag) ;
98+ println ! ( "{}" , new_version) ;
99+ new_version
100+ }
101+
102+ /// Set the version in `Config.toml` to the `VALUE` input
103+ /// in `cargo-semver set [VERSION]`.
104+ fn set_action ( c : & Context ) {
105+ // the new version argument
106+ let version_arg = c. args . join ( " " ) ;
107+
108+ set_version ( c, & version_arg) ;
100109}
101110
102111/// Increments the patch version number.
103112fn patch_action ( c : & Context ) {
104- bump_version ( c, Bump :: Patch )
113+ bump_version ( c, Bump :: Patch ) ;
105114}
106115
107116/// Increments the minor version number.
108117fn minor_action ( c : & Context ) {
109- bump_version ( c, Bump :: Minor )
118+ bump_version ( c, Bump :: Minor ) ;
110119}
111120
112121/// Increments the major version number.
113122fn major_action ( c : & Context ) {
114- bump_version ( c, Bump :: Major )
123+ bump_version ( c, Bump :: Major ) ;
115124}
116125
117126/// Increments the pre-release version number.
118127fn pre_action ( c : & Context ) {
119128 let value = c. args . join ( " " ) ;
120129 bump_version ( c, Bump :: Pre ( value) ) ;
121130}
131+
132+ #[ cfg( test) ]
133+ mod tests {
134+ use super :: * ;
135+ use predicates:: prelude:: * ;
136+ use seahorse:: { Context , Flag , FlagType } ;
137+ use std:: { fs, io:: Write } ;
138+ use tempfile:: NamedTempFile ;
139+
140+ fn setup_test_context (
141+ file : & mut NamedTempFile ,
142+ version : & str ,
143+ extra_args : & mut Vec < String > ,
144+ ) -> Context {
145+ let file_has_content = file. as_file ( ) . metadata ( ) . unwrap ( ) . len ( ) > 0 ;
146+ if !file_has_content {
147+ writeln ! (
148+ file,
149+ "[package]\n version = \" {}\" \n \n [dependencies]\n version = \" {}\" " ,
150+ version, version,
151+ )
152+ . unwrap ( ) ;
153+ }
154+
155+ let config_path = file. path ( ) . to_str ( ) . unwrap ( ) . to_string ( ) ;
156+ let config_flag = Flag :: new ( "config" , FlagType :: String ) ;
157+ let pre_flag = Flag :: new ( "pre" , FlagType :: String ) ;
158+
159+ let mut args = vec ! [ "--config" . to_string( ) , config_path] ;
160+ args. append ( extra_args) ;
161+
162+ Context :: new ( args, Some ( vec ! [ config_flag, pre_flag] ) , "" . to_string ( ) )
163+ }
164+
165+ fn get_file_path ( file : & mut NamedTempFile ) -> String {
166+ file. path ( ) . to_str ( ) . unwrap ( ) . to_string ( )
167+ }
168+
169+ #[ test]
170+ fn test_bump_version ( ) {
171+ let mut file = NamedTempFile :: new ( ) . unwrap ( ) ;
172+ let context = setup_test_context ( & mut file, "1.0.0" , & mut vec ! [ ] ) ;
173+ let path = get_file_path ( & mut file) ;
174+
175+ major_action ( & context) ;
176+ let contains = predicate:: str:: contains ( "2.0.0" ) ;
177+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
178+
179+ minor_action ( & context) ;
180+ let contains = predicate:: str:: contains ( "2.1.0" ) ;
181+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
182+
183+ patch_action ( & context) ;
184+ let contains = predicate:: str:: contains ( "2.1.1" ) ;
185+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
186+
187+ let new_context = setup_test_context ( & mut file, "0" , & mut vec ! [ "alpha" . to_string( ) ] ) ;
188+ pre_action ( & new_context) ;
189+ let contains = predicate:: str:: contains ( "2.1.1-alpha.1" ) ;
190+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
191+
192+ pre_action ( & new_context) ;
193+ let contains = predicate:: str:: contains ( "2.1.1-alpha.2" ) ;
194+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
195+
196+ let new_context = setup_test_context ( & mut file, "0" , & mut vec ! [ "beta" . to_string( ) ] ) ;
197+ pre_action ( & new_context) ;
198+ let contains = predicate:: str:: contains ( "2.1.1-beta.1" ) ;
199+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
200+
201+ let new_context = setup_test_context (
202+ & mut file,
203+ "0" ,
204+ & mut vec ! [ "--pre" . to_string( ) , "beta" . to_string( ) ] ,
205+ ) ;
206+ major_action ( & new_context) ;
207+ let contains = predicate:: str:: contains ( "3.0.0-beta.1" ) ;
208+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
209+
210+ major_action ( & context) ;
211+ let contains = predicate:: str:: contains ( "4.0.0" ) ;
212+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
213+
214+ let new_context = setup_test_context ( & mut file, "0" , & mut vec ! [ "1.5.0" . to_string( ) ] ) ;
215+ set_action ( & new_context) ;
216+ let contains = predicate:: str:: contains ( "1.5.0" ) ;
217+ assert_eq ! ( true , contains. eval( & fs:: read_to_string( & path) . unwrap( ) ) ) ;
218+ }
219+ }
0 commit comments