@@ -2,88 +2,108 @@ import XCTest
22import Commander
33
44
5+ class ArgumentErrorTests : XCTestCase {
6+ func testMissingValueDescription( ) {
7+ let error = ArgumentError . MissingValue ( nil )
8+ XCTAssertEqual ( error. description, " Missing argument " )
9+ }
10+
11+ func testNoValue( ) {
12+ let error = ArgumentError . InvalidType ( value: " five " , type: " number " )
13+ XCTAssertEqual ( error. description, " five is not a number " )
14+ }
15+ }
16+
517class StringArgumentConvertibleTests : XCTestCase {
618 func testValue( ) {
719 let parser = ArgumentParser ( arguments: [ " argument " ] )
8- let value = String ( parser: parser)
20+ let value = try ? String ( parser: parser)
921
10- XCTAssertEqual ( value, " argument " )
22+ XCTAssertEqual ( value! , " argument " )
1123 }
1224
1325 func testNoValue( ) {
14- let parser = ArgumentParser ( arguments: [ ] )
15- let value = String ( parser: parser)
16-
17- XCTAssertNil ( value)
26+ testMissingValue { try String ( parser: $0) }
1827 }
1928}
2029
2130
2231class IntArgumentConvertibleTests : XCTestCase {
2332 func testValue( ) {
24- let parser = ArgumentParser ( arguments: [ " 5 " ] )
25- let value = Int ( parser: parser)
26-
27- XCTAssertEqual ( value, 5 )
33+ testValidValue ( " 5 " , value: 5 ) { try Int ( parser: $0) }
2834 }
2935
30- func testInvalidValue( ) {
31- let parser = ArgumentParser ( arguments: [ " five " ] )
32- let value = Int ( parser: parser)
33-
34- XCTAssertNil ( value)
36+ func testInvalidInput( ) {
37+ testInvalidValue ( " five " ) { try Int ( parser: $0) }
3538 }
3639
3740 func testNoValue( ) {
38- let parser = ArgumentParser ( arguments: [ ] )
39- let value = Int ( parser: parser)
40-
41- XCTAssertNil ( value)
41+ testMissingValue { try Int ( parser: $0) }
4242 }
4343}
4444
45+
4546class FloatArgumentConvertibleTests : XCTestCase {
4647 func testValue( ) {
47- let parser = ArgumentParser ( arguments: [ " 5 " ] )
48- let value = Float ( parser: parser)
49-
50- XCTAssertEqual ( value, 5 )
48+ testValidValue ( " 5 " , value: 5 ) { try Float ( parser: $0) }
5149 }
5250
53- func testInvalidValue( ) {
54- let parser = ArgumentParser ( arguments: [ " five " ] )
55- let value = Float ( parser: parser)
56-
57- XCTAssertNil ( value)
51+ func testInvalidInput( ) {
52+ testInvalidValue ( " five " ) { try Float ( parser: $0) }
5853 }
5954
6055 func testNoValue( ) {
61- let parser = ArgumentParser ( arguments: [ ] )
62- let value = Float ( parser: parser)
63-
64- XCTAssertNil ( value)
56+ testMissingValue { try Float ( parser: $0) }
6557 }
6658}
6759
60+
6861class DoubleArgumentConvertibleTests : XCTestCase {
6962 func testValue( ) {
70- let parser = ArgumentParser ( arguments : [ " 5 " ] )
71- let value = Double ( parser : parser )
63+ testValidValue ( " 5 " , value : 5 ) { try Double ( parser : $0 ) }
64+ }
7265
73- XCTAssertEqual ( value, 5 )
66+ func testInvalidInput( ) {
67+ testInvalidValue ( " five " ) { try Double ( parser: $0) }
68+ }
69+
70+ func testNoValue( ) {
71+ testMissingValue { try Double ( parser: $0) }
72+ }
73+ }
74+
75+
76+ func testMissingValue< T> ( closure: ( ( ArgumentParser ) throws -> ( T ) ) ) {
77+ let parser = ArgumentParser ( arguments: [ ] )
78+
79+ do {
80+ try closure ( parser)
81+ XCTFail ( " Unexpected success " )
82+ } catch ArgumentError . MissingValue {
83+ } catch {
84+ XCTFail ( " Unexpected error: \( error) " )
7485 }
86+ }
7587
76- func testInvalidValue( ) {
77- let parser = ArgumentParser ( arguments: [ " five " ] )
78- let value = Double ( parser: parser)
88+ func testInvalidValue< T> ( value: String , closure: ( ( ArgumentParser ) throws -> ( T ) ) ) {
89+ let parser = ArgumentParser ( arguments: [ value] )
7990
80- XCTAssertNil ( value)
91+ do {
92+ try closure ( parser)
93+ XCTFail ( " Unexpected success " )
94+ } catch ArgumentError . InvalidType {
95+ } catch {
96+ XCTFail ( " Unexpected error: \( error) " )
8197 }
98+ }
8299
83- func testNoValue( ) {
84- let parser = ArgumentParser ( arguments: [ ] )
85- let value = Double ( parser: parser)
100+ func testValidValue< T> ( argument: String , value: T , closure: ( ( ArgumentParser ) throws -> ( T ) ) ) {
101+ let parser = ArgumentParser ( arguments: [ " 5 " ] )
86102
87- XCTAssertNil ( value)
103+ do {
104+ let value = try Int ( parser: parser)
105+ XCTAssertEqual ( value, 5 )
106+ } catch {
107+ XCTFail ( " Unexpected error: \( error) " )
88108 }
89- }
109+ }
0 commit comments