@@ -920,7 +920,7 @@ class SwiftTaskTests: _TestCase
920
920
if !self . isAsync { return }
921
921
922
922
var expect = self . expectationWithDescription ( __FUNCTION__)
923
- var tryCount = 3
923
+ var maxTryCount = 3
924
924
var actualTryCount = 0
925
925
926
926
Task < Float , String , ErrorString > { progress, fulfill, reject, configure in
@@ -929,17 +929,17 @@ class SwiftTaskTests: _TestCase
929
929
930
930
actualTryCount++
931
931
932
- if actualTryCount < tryCount {
932
+ if actualTryCount < maxTryCount {
933
933
reject ( " ERROR \( actualTryCount) " )
934
934
}
935
935
else {
936
936
fulfill ( " OK " )
937
937
}
938
938
}
939
939
940
- } . try ( tryCount ) . failure { errorInfo -> String in
940
+ } . try ( maxTryCount ) . failure { errorInfo -> String in
941
941
942
- XCTFail ( " Should never reach here because `task.try( \( tryCount ) )` will be fulfilled on try[ \( tryCount ) ] even though try[1... \( tryCount - 1 ) ] will be rejected. " )
942
+ XCTFail ( " Should never reach here because `task.try( \( maxTryCount ) )` will be fulfilled on try[ \( maxTryCount ) ] even though try[1... \( maxTryCount - 1 ) ] will be rejected. " )
943
943
944
944
return " DUMMY "
945
945
@@ -959,7 +959,7 @@ class SwiftTaskTests: _TestCase
959
959
if !self . isAsync { return }
960
960
961
961
var expect = self . expectationWithDescription ( __FUNCTION__)
962
- var tryCount = 3
962
+ var maxTryCount = 3
963
963
var actualTryCount = 0
964
964
965
965
let t = Task < Float , String , ErrorString > { progress, fulfill, reject, configure in
@@ -969,7 +969,7 @@ class SwiftTaskTests: _TestCase
969
969
reject ( " ERROR \( actualTryCount) " )
970
970
}
971
971
972
- } . try ( tryCount ) . failure { error, isCancelled -> String in
972
+ } . try ( maxTryCount ) . failure { error, isCancelled -> String in
973
973
974
974
XCTAssertEqual ( error!, " ERROR \( actualTryCount) " )
975
975
XCTAssertFalse ( isCancelled)
@@ -989,7 +989,7 @@ class SwiftTaskTests: _TestCase
989
989
if !self . isAsync { return }
990
990
991
991
var expect = self . expectationWithDescription ( __FUNCTION__)
992
- var tryCount = 3
992
+ var maxTryCount = 3
993
993
var actualTryCount = 0
994
994
var progressCount = 0
995
995
@@ -1001,21 +1001,21 @@ class SwiftTaskTests: _TestCase
1001
1001
1002
1002
actualTryCount++
1003
1003
1004
- if actualTryCount < tryCount {
1004
+ if actualTryCount < maxTryCount {
1005
1005
reject ( " ERROR \( actualTryCount) " )
1006
1006
}
1007
1007
else {
1008
1008
fulfill ( " OK " )
1009
1009
}
1010
1010
}
1011
1011
1012
- } . try ( tryCount ) . progress { _ in
1012
+ } . try ( maxTryCount ) . progress { _ in
1013
1013
1014
1014
progressCount++
1015
1015
1016
- // 1 <= progressCount <= tryCount
1016
+ // 1 <= progressCount <= maxTryCount
1017
1017
XCTAssertGreaterThanOrEqual ( progressCount, 1 )
1018
- XCTAssertLessThanOrEqual ( progressCount, tryCount )
1018
+ XCTAssertLessThanOrEqual ( progressCount, maxTryCount )
1019
1019
1020
1020
} . success { value -> Void in
1021
1021
@@ -1026,7 +1026,7 @@ class SwiftTaskTests: _TestCase
1026
1026
1027
1027
self . wait ( )
1028
1028
1029
- XCTAssertEqual ( progressCount, tryCount )
1029
+ XCTAssertEqual ( progressCount, maxTryCount )
1030
1030
}
1031
1031
1032
1032
func testTry_pauseResume( )
@@ -1035,7 +1035,7 @@ class SwiftTaskTests: _TestCase
1035
1035
if !self . isAsync { return }
1036
1036
1037
1037
var expect = self . expectationWithDescription ( __FUNCTION__)
1038
- var tryCount = 5
1038
+ var maxTryCount = 5
1039
1039
var actualTryCount = 0
1040
1040
1041
1041
let retryableTask = Task < Float , String , ErrorString > { progress, fulfill, reject, configure in
@@ -1051,7 +1051,7 @@ class SwiftTaskTests: _TestCase
1051
1051
NSThread . sleepForTimeInterval ( 0.1 )
1052
1052
}
1053
1053
Async . main ( after: 0.2 ) {
1054
- if actualTryCount < tryCount {
1054
+ if actualTryCount < maxTryCount {
1055
1055
reject ( " ERROR \( actualTryCount) " )
1056
1056
}
1057
1057
else {
@@ -1069,7 +1069,7 @@ class SwiftTaskTests: _TestCase
1069
1069
return
1070
1070
}
1071
1071
1072
- } . try ( tryCount )
1072
+ } . try ( maxTryCount )
1073
1073
1074
1074
retryableTask. success { value -> Void in
1075
1075
@@ -1078,7 +1078,7 @@ class SwiftTaskTests: _TestCase
1078
1078
1079
1079
}
1080
1080
1081
- // pause `retryableTask` at some point
1081
+ // pause `retryableTask` at some point before all tries completes
1082
1082
Async . main ( after: 0.5 ) {
1083
1083
retryableTask. pause ( )
1084
1084
return
@@ -1091,7 +1091,56 @@ class SwiftTaskTests: _TestCase
1091
1091
1092
1092
self . wait ( 5 ) // wait a little longer
1093
1093
1094
- XCTAssertEqual ( actualTryCount, tryCount)
1094
+ XCTAssertEqual ( actualTryCount, maxTryCount)
1095
+ }
1096
+
1097
+ func testTry_cancel( )
1098
+ {
1099
+ // NOTE: this is async test
1100
+ if !self . isAsync { return }
1101
+
1102
+ var expect = self . expectationWithDescription ( __FUNCTION__)
1103
+ var maxTryCount = 3
1104
+ var actualTryCount = 0
1105
+
1106
+ let retryableTask = Task < Float , String , ErrorString > { progress, fulfill, reject, configure in
1107
+
1108
+ Async . main ( after: 0.1 ) {
1109
+
1110
+ actualTryCount++
1111
+
1112
+ if actualTryCount < maxTryCount {
1113
+ reject ( " ERROR \( actualTryCount) " )
1114
+ }
1115
+ else {
1116
+ fulfill ( " OK " )
1117
+ }
1118
+ }
1119
+
1120
+ return
1121
+
1122
+ } . try ( maxTryCount)
1123
+
1124
+ retryableTask. success { value -> Void in
1125
+
1126
+ XCTFail ( " Should never reach here because `retryableTask` is cancelled. " )
1127
+
1128
+ } . failure { errorInfo -> Void in
1129
+
1130
+ XCTAssertTrue ( errorInfo. isCancelled)
1131
+ expect. fulfill ( )
1132
+
1133
+ }
1134
+
1135
+ // cancel `retryableTask` at some point before all tries completes
1136
+ Async . main ( after: 0.2 ) {
1137
+ retryableTask. cancel ( )
1138
+ return
1139
+ }
1140
+
1141
+ self . wait ( )
1142
+
1143
+ XCTAssertTrue ( actualTryCount < maxTryCount, " `actualTryCount` should not reach `maxTryCount` because of cancellation. " )
1095
1144
}
1096
1145
1097
1146
//--------------------------------------------------
0 commit comments