Skip to content

Commit c71af1a

Browse files
committed
Enable noForceUnwrapInTests rule by default
1 parent e88bddf commit c71af1a

19 files changed

+184
-186
lines changed

.swiftformat

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,5 @@
3838
# rules
3939

4040
--enable isEmpty
41-
# --enable noForceUnwrapInTests
4241
# --enable noGuardInTests
4342
--enable preferFinalClasses

Rules.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
* [modifierOrder](#modifierOrder)
4141
* [modifiersOnSameLine](#modifiersOnSameLine)
4242
* [noForceTryInTests](#noForceTryInTests)
43+
* [noForceUnwrapInTests](#noForceUnwrapInTests)
4344
* [numberFormatting](#numberFormatting)
4445
* [opaqueGenericParameters](#opaqueGenericParameters)
4546
* [preferCountWhere](#preferCountWhere)
@@ -117,7 +118,6 @@
117118
* [isEmpty](#isEmpty)
118119
* [markTypes](#markTypes)
119120
* [noExplicitOwnership](#noExplicitOwnership)
120-
* [noForceUnwrapInTests](#noForceUnwrapInTests)
121121
* [noGuardInTests](#noGuardInTests)
122122
* [organizeDeclarations](#organizeDeclarations)
123123
* [preferFinalClasses](#preferFinalClasses)

Snapshots/Consumer/Tests/ConsumerTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,11 @@ final class ConsumerTests: XCTestCase {
391391
XCTAssertEqual(Consumer<String>.string("Thanks 👍").description, "'Thanks 👍'")
392392
}
393393

394-
func testCharacterDescription() {
394+
func testCharacterDescription() throws {
395395
XCTAssertEqual(Consumer<String>.character("!").description, "'!'")
396396
XCTAssertEqual(Consumer<String>.character(in: "A" ... "F").description, "'A' – 'F'")
397-
XCTAssertEqual(Consumer<String>
398-
.character(in: UnicodeScalar(11)! ... UnicodeScalar(17)!).description, "U+000B – U+0011")
397+
XCTAssertEqual(try Consumer<String>
398+
.character(in: XCTUnwrap(UnicodeScalar(11)) ... UnicodeScalar(17)!).description, "U+000B – U+0011")
399399
XCTAssertEqual(Consumer<String>.character(in: "👍" ... "👍").description, "'👍'")
400400
XCTAssertEqual(Consumer<String>.character(in: "12").description, "'1' or '2'")
401401
XCTAssertEqual(Consumer<String>.character(in: "1356").description, "'1', '3', '5' or '6'")
@@ -808,6 +808,6 @@ final class ConsumerTests: XCTestCase {
808808

809809
func testLabelledListTransform() {
810810
let parser: Consumer<String> = .oneOrMore("foo")
811-
XCTAssertEqual(try parser.match("foofoo").transform { $1 } as! [String], ["foo", "foo"])
811+
XCTAssertEqual(try parser.match("foofoo").transform { $1 } as? [String], ["foo", "foo"])
812812
}
813813
}

Snapshots/Consumer/Tests/PerformanceTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ final class PerformanceTests: XCTestCase {
9595
}
9696
}
9797

98-
func testJSONSerialization() {
99-
let data = json.data(using: .utf8)!
98+
func testJSONSerialization() throws {
99+
let data = try XCTUnwrap(json.data(using: .utf8))
100100
measure {
101101
_ = try! JSONSerialization.jsonObject(with: data, options: [])
102102
}

Snapshots/Euclid/Tests/TransformTests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,11 @@ final class TransformTests: XCTestCase {
145145
XCTAssert(plane.translated(by: offset).isEqual(to: expected))
146146
}
147147

148-
func testRotatePlane() {
148+
func testRotatePlane() throws {
149149
let normal = Vector(0.5, 1, 0.5).normalized()
150150
let position = Vector(10, 5, -3)
151151
let plane = Plane(unchecked: normal, pointOnPlane: position)
152-
let rotation = Rotation(axis: Vector(12, 3, 4).normalized(), radians: 0.2)!
152+
let rotation = try XCTUnwrap(Rotation(axis: Vector(12, 3, 4).normalized(), radians: 0.2))
153153
let rotatedNormal = normal.rotated(by: rotation)
154154
let rotatedPosition = position.rotated(by: rotation)
155155
let expected = Plane(unchecked: rotatedNormal, pointOnPlane: rotatedPosition)
@@ -175,19 +175,19 @@ final class TransformTests: XCTestCase {
175175
XCTAssert(plane.scaled(by: scale).isEqual(to: expected))
176176
}
177177

178-
func testTransformPlane() {
178+
func testTransformPlane() throws {
179179
let path = Path(unchecked: [
180180
.point(1, 2, 3),
181181
.point(7, -2, 12),
182182
.point(-2, 7, 14),
183183
])
184-
let plane = path.plane!
185-
let transform = Transform(
184+
let plane = try XCTUnwrap(path.plane)
185+
let transform = try Transform(
186186
offset: Vector(-7, 3, 4.5),
187-
rotation: Rotation(axis: Vector(11, 3, -1).normalized(), radians: 1.3)!,
187+
rotation: XCTUnwrap(Rotation(axis: Vector(11, 3, -1).normalized(), radians: 1.3)),
188188
scale: Vector(7, 2.0, 0.3)
189189
)
190-
let expected = path.transformed(by: transform).plane!
190+
let expected = try XCTUnwrap(path.transformed(by: transform).plane)
191191
XCTAssert(plane.transformed(by: transform).isEqual(to: expected))
192192
}
193193
}

Snapshots/Expression/Tests/AnyExpressionTests.swift

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -854,9 +854,9 @@ final class AnyExpressionTests: XCTestCase {
854854
}
855855
}
856856

857-
func testSubscriptStringWithHalfOpenIndexRange() {
858-
let expression = AnyExpression("'foo'[range]", constants: [
859-
"range": "foo".range(of: "fo")!,
857+
func testSubscriptStringWithHalfOpenIndexRange() throws {
858+
let expression = try AnyExpression("'foo'[range]", constants: [
859+
"range": XCTUnwrap("foo".range(of: "fo")),
860860
])
861861
XCTAssertEqual(try expression.evaluate(), "fo")
862862
}
@@ -868,84 +868,84 @@ final class AnyExpressionTests: XCTestCase {
868868
XCTAssertEqual(try expression.evaluate(), "fo")
869869
}
870870

871-
func testSubscriptSubstringWithHalfOpenIndexRange() {
872-
let expression = AnyExpression("foo[range]", constants: [
871+
func testSubscriptSubstringWithHalfOpenIndexRange() throws {
872+
let expression = try AnyExpression("foo[range]", constants: [
873873
"foo": Substring("foo"),
874-
"range": "foo".range(of: "fo")!,
874+
"range": XCTUnwrap("foo".range(of: "fo")),
875875
])
876876
XCTAssertEqual(try expression.evaluate(), "fo")
877877
}
878878

879-
func testSubscriptNSStringWithHalfOpenIndexRange() {
880-
let expression = AnyExpression("foo[range]", constants: [
879+
func testSubscriptNSStringWithHalfOpenIndexRange() throws {
880+
let expression = try AnyExpression("foo[range]", constants: [
881881
"foo": "foo" as NSString,
882-
"range": "foo".range(of: "fo")!,
882+
"range": XCTUnwrap("foo".range(of: "fo")),
883883
])
884884
XCTAssertEqual(try expression.evaluate(), "fo")
885885
}
886886

887-
func testSubscriptStringWithInvalidHalfOpenIndexRange() {
888-
let expression = AnyExpression("'foo'[range]", constants: [
889-
"range": "foobar".range(of: "bar")!,
887+
func testSubscriptStringWithInvalidHalfOpenIndexRange() throws {
888+
let expression = try AnyExpression("'foo'[range]", constants: [
889+
"range": XCTUnwrap("foobar".range(of: "bar")),
890890
])
891891
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
892892
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 3))
893893
}
894894
}
895895

896-
func testSubscriptStringWithInvalidClosedIndexRange() {
897-
let expression = AnyExpression("'foo'[range]", constants: [
898-
"range": "foobar".range(of: "bar")!.lowerBound ... "foobar".endIndex,
896+
func testSubscriptStringWithInvalidClosedIndexRange() throws {
897+
let expression = try AnyExpression("'foo'[range]", constants: [
898+
"range": XCTUnwrap("foobar".range(of: "bar")?.lowerBound) ... "foobar".endIndex,
899899
])
900900
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
901901
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 3))
902902
}
903903
}
904904

905-
func testSubscriptSubstringWithInvalidHalfOpenIndexRange() {
906-
let expression = AnyExpression("foo[range]", constants: [
905+
func testSubscriptSubstringWithInvalidHalfOpenIndexRange() throws {
906+
let expression = try AnyExpression("foo[range]", constants: [
907907
"foo": "barfoo".suffix(3),
908-
"range": "barfoo".range(of: "bar")!,
908+
"range": XCTUnwrap("barfoo".range(of: "bar")),
909909
])
910910
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
911911
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", -3))
912912
}
913913
}
914914

915-
func testSubscriptNSStringWithInvalidHalfOpenIndexRangeLowerBound() {
916-
let expression = AnyExpression("foo[range]", constants: [
915+
func testSubscriptNSStringWithInvalidHalfOpenIndexRangeLowerBound() throws {
916+
let expression = try AnyExpression("foo[range]", constants: [
917917
"foo": "foo" as NSString,
918-
"range": "foobarbaz".range(of: "baz")!,
918+
"range": XCTUnwrap("foobarbaz".range(of: "baz")),
919919
])
920920
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
921921
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 6))
922922
}
923923
}
924924

925-
func testSubscriptNSStringWithInvalidHalfOpenIndexRangeUpperBound() {
926-
let expression = AnyExpression("foo[range]", constants: [
925+
func testSubscriptNSStringWithInvalidHalfOpenIndexRangeUpperBound() throws {
926+
let expression = try AnyExpression("foo[range]", constants: [
927927
"foo": "foo" as NSString,
928-
"range": "foobar".range(of: "obar")!,
928+
"range": XCTUnwrap("foobar".range(of: "obar")),
929929
])
930930
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
931931
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 6))
932932
}
933933
}
934934

935-
func testSubscriptNSStringWithInvalidClosedIndexRangeLowerBound() {
936-
let expression = AnyExpression("foo[range]", constants: [
935+
func testSubscriptNSStringWithInvalidClosedIndexRangeLowerBound() throws {
936+
let expression = try AnyExpression("foo[range]", constants: [
937937
"foo": "foo" as NSString,
938-
"range": "foobarbaz".range(of: "baz")!.lowerBound ... "foobarbaz".endIndex,
938+
"range": XCTUnwrap("foobarbaz".range(of: "baz")?.lowerBound) ... "foobarbaz".endIndex,
939939
])
940940
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
941941
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 6))
942942
}
943943
}
944944

945-
func testSubscriptNSStringWithInvalidClosedIndexRangeUpperBound() {
946-
let expression = AnyExpression("foo[range]", constants: [
945+
func testSubscriptNSStringWithInvalidClosedIndexRangeUpperBound() throws {
946+
let expression = try AnyExpression("foo[range]", constants: [
947947
"foo": "foo" as NSString,
948-
"range": "foobar".range(of: "obar")!.lowerBound ... "foobar".endIndex,
948+
"range": XCTUnwrap("foobar".range(of: "obar")?.lowerBound) ... "foobar".endIndex,
949949
])
950950
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
951951
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 6))
@@ -1070,26 +1070,26 @@ final class AnyExpressionTests: XCTestCase {
10701070
}
10711071
}
10721072

1073-
func testSubscriptStringFromIndexRange() {
1074-
let expression = AnyExpression("'foo'[index...]", constants: [
1075-
"index": "foo".index(of: "o")!,
1073+
func testSubscriptStringFromIndexRange() throws {
1074+
let expression = try AnyExpression("'foo'[index...]", constants: [
1075+
"index": XCTUnwrap("foo".index(of: "o")),
10761076
])
10771077
XCTAssertEqual(try expression.evaluate(), "oo")
10781078
}
10791079

1080-
func testSubscriptStringFromInvalidIndexRange() {
1081-
let expression = AnyExpression("'foo'[index...]", constants: [
1082-
"index": "food".index(of: "d")!,
1080+
func testSubscriptStringFromInvalidIndexRange() throws {
1081+
let expression = try AnyExpression("'foo'[index...]", constants: [
1082+
"index": XCTUnwrap("food".index(of: "d")),
10831083
])
10841084
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
10851085
XCTAssertEqual(error as? Expression.Error, .stringBounds("foo", 3))
10861086
}
10871087
}
10881088

1089-
func testSubscriptStringFromInvalidIndexRange2() {
1089+
func testSubscriptStringFromInvalidIndexRange2() throws {
10901090
#if swift(>=4)
1091-
let expression = AnyExpression("foo[index...]", constants: [
1092-
"foo": "afoo"["afoo".range(of: "foo")!],
1091+
let expression = try AnyExpression("foo[index...]", constants: [
1092+
"foo": "afoo"[XCTUnwrap("afoo".range(of: "foo"))],
10931093
"index": "afoo".startIndex,
10941094
])
10951095
XCTAssertThrowsError(try expression.evaluate() as Any) { error in
@@ -1146,10 +1146,10 @@ final class AnyExpressionTests: XCTestCase {
11461146
}
11471147
}
11481148

1149-
func testSubscriptStringThroughInvalidIndexRange2() {
1149+
func testSubscriptStringThroughInvalidIndexRange2() throws {
11501150
#if swift(>=4)
1151-
let expression = AnyExpression("foo[...index]", constants: [
1152-
"foo": "afoo"["afoo".range(of: "foo")!],
1151+
let expression = try AnyExpression("foo[...index]", constants: [
1152+
"foo": "afoo"[XCTUnwrap("afoo".range(of: "foo"))],
11531153
"index": "afoo".startIndex,
11541154
])
11551155
XCTAssertThrowsError(try expression.evaluate() as Any) { error in

Snapshots/Layout/LayoutTests/AttributedStringExpressionTests.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ final class AttributedStringExpressionTests: XCTestCase {
77
func testAttributedStringExpressionTextAndFont() throws {
88
let node = LayoutNode()
99
let expression = LayoutExpression(attributedStringExpression: "foo", for: node)
10-
let result = try expression?.evaluate() as! NSAttributedString
10+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
1111
XCTAssertEqual(result.string, "foo")
1212
XCTAssertEqual(result.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) as? UIFont, .systemFont(ofSize: 17))
1313
}
1414

1515
func testAttributedStringHTMLExpression() throws {
1616
let node = LayoutNode()
1717
let expression = LayoutExpression(attributedStringExpression: "<b>foo</b>", for: node)
18-
let result = try expression?.evaluate() as! NSAttributedString
18+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
1919
XCTAssertEqual(result.string, "foo")
2020
XCTAssertEqual(result.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) as? UIFont, .boldSystemFont(ofSize: 17))
2121
}
@@ -24,7 +24,7 @@ final class AttributedStringExpressionTests: XCTestCase {
2424
let node = LayoutNode()
2525
let text = "🤔😂"
2626
let expression = LayoutExpression(attributedStringExpression: "<i>\(text)</i>", for: node)
27-
let result = try expression?.evaluate() as! NSAttributedString
27+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
2828
XCTAssertEqual(result.string, text)
2929
}
3030

@@ -33,7 +33,7 @@ final class AttributedStringExpressionTests: XCTestCase {
3333
label.font = UIFont(name: "Courier", size: 57)
3434
let node = LayoutNode(view: label)
3535
let expression = LayoutExpression(attributedStringExpression: "foo", for: node)
36-
let result = try expression?.evaluate() as! NSAttributedString
36+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
3737
XCTAssertEqual(result.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) as? UIFont, label.font)
3838
}
3939

@@ -42,7 +42,7 @@ final class AttributedStringExpressionTests: XCTestCase {
4242
label.textColor = .red
4343
let node = LayoutNode(view: label)
4444
let expression = LayoutExpression(attributedStringExpression: "foo", for: node)
45-
let result = try expression?.evaluate() as! NSAttributedString
45+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
4646
XCTAssertEqual(result.attribute(NSAttributedString.Key.foregroundColor, at: 0, effectiveRange: nil) as? UIColor, .red)
4747
}
4848

@@ -51,8 +51,8 @@ final class AttributedStringExpressionTests: XCTestCase {
5151
label.textAlignment = .right
5252
let node = LayoutNode(view: label)
5353
let expression = LayoutExpression(attributedStringExpression: "foo", for: node)
54-
let result = try expression?.evaluate() as! NSAttributedString
55-
let paragraphStyle = result.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as! NSParagraphStyle
54+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
55+
let paragraphStyle = try XCTUnwrap(result.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as? NSParagraphStyle)
5656
XCTAssertEqual(paragraphStyle.alignment, .right)
5757
}
5858

@@ -61,15 +61,15 @@ final class AttributedStringExpressionTests: XCTestCase {
6161
label.lineBreakMode = .byTruncatingHead
6262
let node = LayoutNode(view: label)
6363
let expression = LayoutExpression(attributedStringExpression: "foo", for: node)
64-
let result = try expression?.evaluate() as! NSAttributedString
65-
let paragraphStyle = result.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as! NSParagraphStyle
64+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
65+
let paragraphStyle = try XCTUnwrap(result.attribute(NSAttributedString.Key.paragraphStyle, at: 0, effectiveRange: nil) as? NSParagraphStyle)
6666
XCTAssertEqual(paragraphStyle.lineBreakMode, .byTruncatingHead)
6767
}
6868

6969
func testAttributedStringContainingStringConstant() throws {
7070
let node = LayoutNode(constants: ["bar": "bar"])
7171
let expression = LayoutExpression(attributedStringExpression: "hello world {bar}", for: node)
72-
let result = try expression?.evaluate() as! NSAttributedString
72+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
7373
XCTAssertEqual(result.string, "hello world bar")
7474
}
7575

@@ -78,15 +78,15 @@ final class AttributedStringExpressionTests: XCTestCase {
7878
NSAttributedString.Key.foregroundColor: UIColor.red,
7979
])])
8080
let expression = LayoutExpression(attributedStringExpression: "hello world {bar}", for: node)
81-
let result = try expression?.evaluate() as! NSAttributedString
81+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
8282
XCTAssertEqual(result.string, "hello world bar")
8383
XCTAssertEqual(result.attribute(NSAttributedString.Key.foregroundColor, at: 12, effectiveRange: nil) as? UIColor, .red)
8484
}
8585

8686
func testAttributedStringContainingHTMLConstant() throws {
8787
let node = LayoutNode(constants: ["bar": "<i>bar</i>"])
8888
let expression = LayoutExpression(attributedStringExpression: "<b>foo {bar}</b>", for: node)
89-
let result = try expression?.evaluate() as! NSAttributedString
89+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
9090
XCTAssertEqual(result.string, "foo bar")
9191
XCTAssertEqual(result.attribute(NSAttributedString.Key.font, at: 0, effectiveRange: nil) as? UIFont, .boldSystemFont(ofSize: 17))
9292
let traits = (result.attribute(NSAttributedString.Key.font, at: 4, effectiveRange: nil) as? UIFont)?.fontDescriptor.symbolicTraits
@@ -97,7 +97,7 @@ final class AttributedStringExpressionTests: XCTestCase {
9797
func testAttributedStringContainingAmbiguousTokens() throws {
9898
let node = LayoutNode(constants: ["foo": "$(2)", "bar": "$(3)"])
9999
let expression = LayoutExpression(attributedStringExpression: "<b>$(1)</b>{foo}{bar}", for: node)
100-
let result = try expression?.evaluate() as! NSAttributedString
100+
let result = try XCTUnwrap(try expression?.evaluate() as? NSAttributedString)
101101
XCTAssertEqual(result.string, "$(1)$(2)$(3)")
102102
}
103103
}

0 commit comments

Comments
 (0)