@@ -13,13 +13,76 @@ class GroupTests : XCTestCase {
1313
1414 XCTAssertFalse ( didRunHelpCommand)
1515
16- try ! group. run ( [ " unknown " ] )
16+ assertRaises ( try group. run ( [ " unknown " ] ) )
1717 XCTAssertFalse ( didRunHelpCommand)
1818
1919 try ! group. run ( [ " help " ] )
2020 XCTAssertTrue ( didRunHelpCommand)
2121 }
2222
23+ func testRunningCommandReRaisesCommandName( ) {
24+ let group = Group {
25+ $0. group ( " subgroup " ) {
26+ $0. command ( " command " ) { }
27+ }
28+ }
29+
30+ do {
31+ try group. run ( [ " subgroup " , " yo " ] )
32+ XCTFail ( " Didn't raise error " )
33+ } catch GroupError . UnknownCommand( let command) {
34+ XCTAssertEqual ( command, " subgroup yo " )
35+ } catch {
36+ XCTFail ( " Unexpected error " )
37+ }
38+ }
39+
40+ func testRunningCommandMissingCommandNameRaises( ) {
41+ let group = Group ( )
42+
43+ do {
44+ try group. run ( [ ] )
45+ XCTFail ( " Didn't raise error " )
46+ } catch GroupError . NoCommand( let path, let raisedGroup) {
47+ XCTAssertNil ( path)
48+ XCTAssertTrue ( raisedGroup === group)
49+ } catch {
50+ XCTFail ( " Unexpected error " )
51+ }
52+ }
53+
54+
55+ func testRunningCommandWithSubGroupMissingCommandNameReraises( ) {
56+ let subgroup = Group ( )
57+ let group = Group { $0. addCommand ( " group " , subgroup) }
58+
59+ do {
60+ try group. run ( [ " group " ] )
61+ XCTFail ( " Didn't raise error " )
62+ } catch GroupError . NoCommand( let path, let raisedGroup) {
63+ XCTAssertEqual ( path, " group " )
64+ XCTAssertTrue ( raisedGroup === subgroup)
65+ } catch {
66+ XCTFail ( " Unexpected error " )
67+ }
68+ }
69+
70+ func testRunningCommandWithSubSubGroupMissingCommandNameReraises( ) {
71+ let subsubgroup = Group ( )
72+ let subgroup = Group { $0. addCommand ( " g2 " , subsubgroup) }
73+ let group = Group { $0. addCommand ( " g1 " , subgroup) }
74+
75+ do {
76+ try group. run ( [ " g1 " , " g2 " ] )
77+ XCTFail ( " Didn't raise error " )
78+ } catch GroupError . NoCommand( let path, let raisedGroup) {
79+ XCTAssertEqual ( path, " g1 g2 " )
80+ XCTAssertTrue ( raisedGroup === subsubgroup)
81+ } catch {
82+ XCTFail ( " Unexpected error " )
83+ }
84+ }
85+
2386 // MARK: Extension
2487
2588 func testClosureConvinienceInitialiser( ) {
@@ -31,7 +94,7 @@ class GroupTests : XCTestCase {
3194 } )
3295 }
3396
34- try ! group. run ( [ " unknown " ] )
97+ assertRaises ( try group. run ( [ " unknown " ] ) )
3598 XCTAssertFalse ( didRunHelpCommand)
3699
37100 try ! group. run ( [ " help " ] )
@@ -76,3 +139,25 @@ class GroupTests : XCTestCase {
76139 XCTAssertEqual ( givenName, " kyle " )
77140 }
78141}
142+
143+ class GroupErrorTests : XCTestCase {
144+ let group = Group {
145+ $0. command ( " create " ) { }
146+ $0. command ( " lint " ) { }
147+ }
148+
149+ func testUnknownCommandDescription( ) {
150+ let error = GroupError . UnknownCommand ( " pod spec create " )
151+ XCTAssertEqual ( error. description, " Unknown command: `pod spec create` " )
152+ }
153+
154+ func testNoCommandDescription( ) {
155+ let error = GroupError . NoCommand ( " pod lib " , group)
156+ XCTAssertEqual ( error. description, " Usage: pod lib COMMAND \n \n Commands: lint, create " )
157+ }
158+
159+ func testNoCommandWithoutPathDescription( ) {
160+ let error = GroupError . NoCommand ( nil , group)
161+ XCTAssertEqual ( error. description, " Commands: lint, create " )
162+ }
163+ }
0 commit comments