1
1
use std:: fmt;
2
- use crate :: user_action:: Action :: * ;
3
2
3
+ #[ derive( PartialEq , Eq ) ]
4
4
pub enum Action {
5
5
RunScript ( String ) ,
6
6
Evaluate ( String ) ,
7
7
Nothing ,
8
8
}
9
9
10
- impl PartialEq for Action {
11
- fn eq ( & self , other : & Action ) -> bool {
12
- match ( self , other) {
13
- ( RunScript ( script1) , RunScript ( script2) ) => script1 == script2,
14
- ( Evaluate ( expression1) , Evaluate ( expression2) ) => expression1 == expression2,
15
- ( Nothing , Nothing ) => true ,
16
- _ => false ,
17
- }
18
- }
19
- }
20
-
21
10
impl fmt:: Debug for Action {
22
11
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
23
12
match & * self {
@@ -32,38 +21,64 @@ pub fn parse_args(arguments: Vec<String>) -> Action{
32
21
33
22
if arguments. len ( ) >= 2 {
34
23
if arguments[ 1 ] == "-i" || arguments[ 1 ] == "--init" {
35
- return Action :: RunScript ( arguments[ 2 ] . clone ( ) ) ;
24
+ return Action :: RunScript ( String :: from ( & arguments[ 2 ] ) ) ;
36
25
} else if arguments[ 1 ] == "-e" || arguments[ 1 ] == "--eval" {
37
- return Action :: Evaluate ( arguments[ 2 ] . clone ( ) ) ;
38
- } else { Action :: RunScript ( arguments[ 1 ] . clone ( ) ) } // for path as argument
26
+ return Action :: Evaluate ( String :: from ( & arguments[ 2 ] ) ) ;
27
+ } else { Action :: RunScript ( String :: from ( & arguments[ 1 ] ) ) } // for path as argument
39
28
} else {
40
29
return Action :: Nothing ;
41
30
}
42
31
}
43
32
44
33
#[ cfg( test) ]
45
34
mod tests {
46
- use crate :: user_action;
35
+ mod parse_args_test {
36
+ use crate :: user_action;
47
37
48
- #[ test]
49
- fn parse_args_test ( ) {
50
- let path = "target/debug/rust_clojure" . to_string ( ) ;
51
-
52
- assert_eq ! ( user_action:: Action :: RunScript ( "examples/hello_world.clj" . to_string( ) ) ,
53
- user_action:: parse_args( vec![ path. clone( ) , "examples/hello_world.clj" . to_string( ) ] ) ) ;
38
+ #[ test]
39
+ fn parses_args_given_path ( ) {
40
+ let arguments = vec ! [ "target/debug/rust_clojure" . to_string( ) , "examples/hello_world.clj" . to_string( ) ] ;
41
+
42
+ assert_eq ! ( user_action:: Action :: RunScript ( "examples/hello_world.clj" . to_string( ) ) ,
43
+ user_action:: parse_args( arguments) ) ;
44
+ }
54
45
55
- assert_eq ! ( user_action:: Action :: RunScript ( "test.clj" . to_string( ) ) ,
56
- user_action:: parse_args( vec![ path. clone( ) , "-i" . to_string( ) , "test.clj" . to_string( ) ] ) ) ;
46
+ #[ test]
47
+ fn parses_args_given_i ( ) {
48
+ let arguments = vec ! [ "target/debug/rust_clojure" . to_string( ) , "-i" . to_string( ) , "test.clj" . to_string( ) ] ;
49
+
50
+ assert_eq ! ( user_action:: Action :: RunScript ( "test.clj" . to_string( ) ) ,
51
+ user_action:: parse_args( arguments) ) ;
52
+ }
57
53
58
- assert_eq ! ( user_action:: Action :: RunScript ( "testing.clj" . to_string( ) ) ,
59
- user_action:: parse_args( vec![ path. clone( ) , "--init" . to_string( ) , "testing.clj" . to_string( ) ] ) ) ;
54
+ #[ test]
55
+ fn parses_args_given_init ( ) {
56
+ let arguments = vec ! [ "target/debug/rust_clojure" . to_string( ) , "--init" . to_string( ) , "testing.clj" . to_string( ) ] ;
57
+
58
+ assert_eq ! ( user_action:: Action :: RunScript ( "testing.clj" . to_string( ) ) ,
59
+ user_action:: parse_args( arguments) ) ;
60
+ }
60
61
61
- assert_eq ! ( user_action:: Action :: Evaluate ( "(+ 1 2 3)" . to_string( ) ) ,
62
- user_action:: parse_args( vec![ path. clone( ) , "-e" . to_string( ) , "(+ 1 2 3)" . to_string( ) ] ) ) ;
62
+ #[ test]
63
+ fn parses_args_given_e ( ) {
64
+ let arguments = vec ! [ "target/debug/rust_clojure" . to_string( ) , "-e" . to_string( ) , "(+ 1 2 3)" . to_string( ) ] ;
65
+
66
+ assert_eq ! ( user_action:: Action :: Evaluate ( "(+ 1 2 3)" . to_string( ) ) ,
67
+ user_action:: parse_args( arguments) ) ;
68
+ }
63
69
64
- assert_eq ! ( user_action:: Action :: Evaluate ( "(println \" eh\" )" . to_string( ) ) ,
65
- user_action:: parse_args( vec![ path. clone( ) , "--eval" . to_string( ) , "(println \" eh\" )" . to_string( ) ] ) ) ;
70
+ #[ test]
71
+ fn parses_args_given_eval ( ) {
72
+ let arguments = vec ! [ "target/debug/rust_clojure" . to_string( ) , "--eval" . to_string( ) , "(println \" eh\" )" . to_string( ) ] ;
73
+
74
+ assert_eq ! ( user_action:: Action :: Evaluate ( "(println \" eh\" )" . to_string( ) ) ,
75
+ user_action:: parse_args( arguments) ) ;
76
+ }
66
77
67
- assert_eq ! ( user_action:: Action :: Nothing , user_action:: parse_args( vec![ path. clone( ) ] ) ) ;
78
+ #[ test]
79
+ fn parses_args_given_nil ( ) {
80
+ assert_eq ! ( user_action:: Action :: Nothing , user_action:: parse_args( vec![ "target/debug/rust_clojure" . to_string( ) ] ) ) ;
81
+ }
68
82
}
69
83
}
84
+
0 commit comments