Skip to content

Commit be7e3ab

Browse files
committed
Refactoring framework errors
1 parent 43d9ae7 commit be7e3ab

18 files changed

+203
-242
lines changed

Example/ReCaptcha.xcodeproj/project.pbxproj

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
1515
BD850CB2DF4C9C94FC51226C /* Pods_ReCaptcha_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62BEEA62161F672468CCFD64 /* Pods_ReCaptcha_Example.framework */; };
1616
D091B6E053FD250B4757E34C /* Pods_ReCaptcha_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */; };
17+
F288E9451F9537760018688D /* ReCaptchaError+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */; };
1718
F2E2685E1F7AEE3400CD876D /* ReCaptcha__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2E2685D1F7AEE3400CD876D /* ReCaptcha__Tests.swift */; };
18-
F2ECCF841E9FC4BA0097B199 /* NSError+ReCaptcha__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2ECCF831E9FC4BA0097B199 /* NSError+ReCaptcha__Tests.swift */; };
1919
F2ECCF881E9FCE930097B199 /* .travis.yml in Resources */ = {isa = PBXBuildFile; fileRef = F2ECCF871E9FCE930097B199 /* .travis.yml */; };
2020
F2ECCF8A1E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2ECCF891E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift */; };
2121
F2ECCF8C1E9FE37C0097B199 /* mock.html in Resources */ = {isa = PBXBuildFile; fileRef = F2ECCF8B1E9FE37C0097B199 /* mock.html */; };
@@ -53,10 +53,10 @@
5353
9417A28DC340FF0BC1627B3F /* Pods_ReCaptcha_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReCaptcha_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5454
C2A0BDD35B5E219129E9BC65 /* Pods-ReCaptcha_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReCaptcha_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReCaptcha_Example/Pods-ReCaptcha_Example.release.xcconfig"; sourceTree = "<group>"; };
5555
C8537003ECC47117AF54DCA9 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
56+
F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ReCaptchaError+Equatable.swift"; sourceTree = "<group>"; };
5657
F2E2685D1F7AEE3400CD876D /* ReCaptcha__Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReCaptcha__Tests.swift; sourceTree = "<group>"; };
5758
F2ECCF761E9FC47B0097B199 /* ReCaptcha_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReCaptcha_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5859
F2ECCF7A1E9FC47B0097B199 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
59-
F2ECCF831E9FC4BA0097B199 /* NSError+ReCaptcha__Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSError+ReCaptcha__Tests.swift"; sourceTree = "<group>"; };
6060
F2ECCF871E9FCE930097B199 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = .travis.yml; path = ../.travis.yml; sourceTree = "<group>"; };
6161
F2ECCF891E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReCaptchaDecoder__Tests.swift; sourceTree = "<group>"; };
6262
F2ECCF8B1E9FE37C0097B199 /* mock.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = mock.html; sourceTree = "<group>"; };
@@ -168,7 +168,6 @@
168168
F2ECCF821E9FC4AC0097B199 /* Core */ = {
169169
isa = PBXGroup;
170170
children = (
171-
F2ECCF831E9FC4BA0097B199 /* NSError+ReCaptcha__Tests.swift */,
172171
F2ECCF891E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift */,
173172
F2ECCF8D1E9FE68C0097B199 /* ReCaptchaWebViewManager__Tests.swift */,
174173
F2E2685D1F7AEE3400CD876D /* ReCaptcha__Tests.swift */,
@@ -189,6 +188,7 @@
189188
children = (
190189
F2ECCF951EA00A5B0097B199 /* ReCaptchaWebViewManager+Helpers.swift */,
191190
F2ECCF971EA011370097B199 /* Result+Helpers.swift */,
191+
F288E9441F9537760018688D /* ReCaptchaError+Equatable.swift */,
192192
);
193193
path = Helpers;
194194
sourceTree = "<group>";
@@ -253,7 +253,7 @@
253253
isa = PBXProject;
254254
attributes = {
255255
LastSwiftUpdateCheck = 0830;
256-
LastUpgradeCheck = 0820;
256+
LastUpgradeCheck = 0900;
257257
ORGANIZATIONNAME = ReCaptcha;
258258
TargetAttributes = {
259259
607FACCF1AFB9204008FA782 = {
@@ -440,8 +440,8 @@
440440
F2ECCF981EA011370097B199 /* Result+Helpers.swift in Sources */,
441441
F2E2685E1F7AEE3400CD876D /* ReCaptcha__Tests.swift in Sources */,
442442
F2ECCF931EA009360097B199 /* ReCaptcha+Rx__Tests.swift in Sources */,
443+
F288E9451F9537760018688D /* ReCaptchaError+Equatable.swift in Sources */,
443444
F2ECCF8A1E9FCEFE0097B199 /* ReCaptchaDecoder__Tests.swift in Sources */,
444-
F2ECCF841E9FC4BA0097B199 /* NSError+ReCaptcha__Tests.swift in Sources */,
445445
);
446446
runOnlyForDeploymentPostprocessing = 0;
447447
};
@@ -483,14 +483,20 @@
483483
CLANG_CXX_LIBRARY = "libc++";
484484
CLANG_ENABLE_MODULES = YES;
485485
CLANG_ENABLE_OBJC_ARC = YES;
486+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
486487
CLANG_WARN_BOOL_CONVERSION = YES;
488+
CLANG_WARN_COMMA = YES;
487489
CLANG_WARN_CONSTANT_CONVERSION = YES;
488490
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
489491
CLANG_WARN_EMPTY_BODY = YES;
490492
CLANG_WARN_ENUM_CONVERSION = YES;
491493
CLANG_WARN_INFINITE_RECURSION = YES;
492494
CLANG_WARN_INT_CONVERSION = YES;
495+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
496+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
493497
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
498+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
499+
CLANG_WARN_STRICT_PROTOTYPES = YES;
494500
CLANG_WARN_SUSPICIOUS_MOVE = YES;
495501
CLANG_WARN_UNREACHABLE_CODE = YES;
496502
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -530,14 +536,20 @@
530536
CLANG_CXX_LIBRARY = "libc++";
531537
CLANG_ENABLE_MODULES = YES;
532538
CLANG_ENABLE_OBJC_ARC = YES;
539+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
533540
CLANG_WARN_BOOL_CONVERSION = YES;
541+
CLANG_WARN_COMMA = YES;
534542
CLANG_WARN_CONSTANT_CONVERSION = YES;
535543
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
536544
CLANG_WARN_EMPTY_BODY = YES;
537545
CLANG_WARN_ENUM_CONVERSION = YES;
538546
CLANG_WARN_INFINITE_RECURSION = YES;
539547
CLANG_WARN_INT_CONVERSION = YES;
548+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
549+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
540550
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
551+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
552+
CLANG_WARN_STRICT_PROTOTYPES = YES;
541553
CLANG_WARN_SUSPICIOUS_MOVE = YES;
542554
CLANG_WARN_UNREACHABLE_CODE = YES;
543555
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;

Example/ReCaptcha.xcodeproj/xcshareddata/xcschemes/ReCaptcha-Example.xcscheme

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0820"
3+
LastUpgradeVersion = "0900"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -40,6 +40,7 @@
4040
buildConfiguration = "Debug"
4141
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
4242
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
43+
language = ""
4344
shouldUseLaunchSchemeArgsEnv = "YES"
4445
codeCoverageEnabled = "YES">
4546
<Testables>
@@ -70,6 +71,7 @@
7071
buildConfiguration = "Debug"
7172
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
7273
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
74+
language = ""
7375
launchStyle = "0"
7476
useCustomWorkingDirectory = "NO"
7577
ignoresPersistentStateOnLaunch = "NO"

Example/ReCaptcha/AppDelegate.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// AppDelegate.swift
33
// ReCaptcha
44
//
5-
// Created by fjcaetano on 03/22/2017.
6-
// Copyright (c) 2017 fjcaetano. All rights reserved.
5+
// Created by Flávio Caetano on 03/22/2017.
6+
// Copyright (c) 2017 ReCaptcha. All rights reserved.
77
//
88

99
import UIKit

Example/ReCaptcha/ViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// ViewController.swift
33
// ReCaptcha
44
//
5-
// Created by fjcaetano on 03/22/2017.
6-
// Copyright (c) 2017 fjcaetano. All rights reserved.
5+
// Created by Flávio Caetano on 03/22/2017.
6+
// Copyright (c) 2017 ReCaptcha. All rights reserved.
77
//
88

99
import UIKit

Example/ReCaptcha_Tests/Core/NSError+ReCaptcha__Tests.swift

Lines changed: 0 additions & 72 deletions
This file was deleted.

Example/ReCaptcha_Tests/Core/ReCaptchaDecoder__Tests.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// ReCaptcha
44
//
55
// Created by Flávio Caetano on 13/04/17.
6-
// Copyright © 2017 CocoaPods. All rights reserved.
6+
// Copyright © 2017 ReCaptcha. All rights reserved.
77
//
88

99
@testable import ReCaptcha
@@ -43,15 +43,15 @@ class ReCaptchaDecoder__Tests: XCTestCase {
4343

4444

4545
// Send
46-
let code = NSError.ReCaptchaCode(rawValue: Int(arc4random_uniform(4)))!
47-
decoder.send(error: NSError(code: code))
46+
let err = ReCaptchaError.random()
47+
decoder.send(error: err)
4848

4949
waitForExpectations(timeout: 1)
5050

5151

5252
// Check
5353
XCTAssertNotNil(result)
54-
XCTAssertEqual(result?.error?.rc_code, code)
54+
XCTAssertEqual(result?.error, err)
5555
XCTAssertNil(result?.token)
5656
XCTAssertFalse(result!.showReCaptcha)
5757
}
@@ -75,7 +75,7 @@ class ReCaptchaDecoder__Tests: XCTestCase {
7575

7676

7777
// Check
78-
XCTAssertEqual(result?.error?.rc_code, .wrongMessageFormat)
78+
XCTAssertEqual(result?.error, .wrongMessageFormat)
7979
XCTAssertNil(result?.token)
8080
XCTAssertFalse(result!.showReCaptcha)
8181
}
@@ -99,7 +99,7 @@ class ReCaptchaDecoder__Tests: XCTestCase {
9999

100100

101101
// Check
102-
XCTAssertEqual(result?.error?.rc_code, .undefined)
102+
XCTAssertEqual(result?.error, .wrongMessageFormat)
103103
XCTAssertNil(result?.token)
104104
XCTAssertFalse(result!.showReCaptcha)
105105
}
@@ -188,7 +188,7 @@ extension ReCaptchaDecoder.Result {
188188
return true
189189
}
190190

191-
var error: NSError? {
191+
var error: ReCaptchaError? {
192192
guard case .error(let error) = self else { return nil }
193193
return error
194194
}

Example/ReCaptcha_Tests/Core/ReCaptchaWebViewManager__Tests.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// ReCaptcha
44
//
55
// Created by Flávio Caetano on 13/04/17.
6-
// Copyright © 2017 CocoaPods. All rights reserved.
6+
// Copyright © 2017 ReCaptcha. All rights reserved.
77
//
88

99
@testable import ReCaptcha
@@ -114,7 +114,7 @@ class ReCaptchaWebViewManager__Tests: XCTestCase {
114114

115115
// Verify
116116
XCTAssertNotNil(result)
117-
XCTAssertEqual(result?.error?.rc_code, .wrongMessageFormat)
117+
XCTAssertEqual(result?.error, .wrongMessageFormat)
118118
XCTAssertNil(result?.value)
119119
}
120120

@@ -137,8 +137,15 @@ class ReCaptchaWebViewManager__Tests: XCTestCase {
137137

138138
// Verify
139139
XCTAssertNotNil(result)
140-
XCTAssertEqual(result?.error?.code, WKError.javaScriptExceptionOccurred.rawValue)
140+
XCTAssertNotNil(result?.error)
141141
XCTAssertNil(result?.value)
142+
143+
switch result!.error! {
144+
case .unexpected(let error as NSError):
145+
XCTAssertEqual(error.code, WKError.javaScriptExceptionOccurred.rawValue)
146+
default:
147+
XCTFail("Unexpected error received")
148+
}
142149
}
143150

144151
// MARK: Configure WebView

Example/ReCaptcha_Tests/Core/ReCaptcha__Tests.swift

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// ReCaptcha
44
//
55
// Created by Flávio Caetano on 26/09/17.
6-
// Copyright © 2017 CocoaPods. All rights reserved.
6+
// Copyright © 2017 ReCaptcha. All rights reserved.
77
//
88

99
@testable import ReCaptcha
@@ -31,8 +31,10 @@ class ReCaptcha__Tests: XCTestCase {
3131
do {
3232
_ = try ReCaptcha()
3333
XCTFail("Should have failed")
34-
} catch let e as NSError {
35-
XCTAssertEqual(e.rc_code, .htmlLoadError)
34+
} catch let e as ReCaptchaError {
35+
XCTAssertEqual(e, ReCaptchaError.htmlLoadError)
36+
} catch let e {
37+
XCTFail("Unexpected error: \(e)")
3638
}
3739

3840
// Unswizzle
@@ -47,8 +49,10 @@ class ReCaptcha__Tests: XCTestCase {
4749
do {
4850
_ = try ReCaptcha.Config(apiKey: "", infoPlistKey: nil, baseURL: nil, infoPlistURL: nil)
4951
XCTFail("Should have failed")
50-
} catch let e as NSError {
51-
XCTAssertEqual(e.rc_code, .baseURLNotFound)
52+
} catch let e as ReCaptchaError {
53+
XCTAssertEqual(e, ReCaptchaError.baseURLNotFound)
54+
} catch let e {
55+
XCTFail("Unexpected error: \(e)")
5256
}
5357

5458
// Ensures plist url if nil key
@@ -67,8 +71,10 @@ class ReCaptcha__Tests: XCTestCase {
6771
do {
6872
_ = try ReCaptcha.Config(apiKey: nil, infoPlistKey: nil, baseURL: nil, infoPlistURL: nil)
6973
XCTFail("Should have failed")
70-
} catch let e as NSError {
71-
XCTAssertEqual(e.rc_code, .apiKeyNotFound)
74+
} catch let e as ReCaptchaError {
75+
XCTAssertEqual(e, ReCaptchaError.apiKeyNotFound)
76+
} catch let e {
77+
XCTFail("Unexpected error: \(e)")
7278
}
7379

7480
// Ensures plist key if nil key
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// ReCaptchaError+Equatable.swift
3+
// ReCaptcha
4+
//
5+
// Created by Flávio Caetano on 16/10/17.
6+
// Copyright © 2017 ReCaptcha. All rights reserved.
7+
//
8+
9+
@testable import ReCaptcha
10+
11+
import Foundation
12+
13+
extension ReCaptchaError: Equatable {
14+
public static func ==(lhs: ReCaptchaError, rhs: ReCaptchaError) -> Bool {
15+
switch (lhs, rhs) {
16+
case (.htmlLoadError, .htmlLoadError),
17+
(.apiKeyNotFound, .apiKeyNotFound),
18+
(.baseURLNotFound, .baseURLNotFound),
19+
(.wrongMessageFormat, .wrongMessageFormat):
20+
return true
21+
case (.unexpected(let lhe as NSError), .unexpected(let rhe as NSError)):
22+
return lhe == rhe
23+
default:
24+
return false
25+
}
26+
}
27+
28+
static func random() -> ReCaptchaError {
29+
switch arc4random_uniform(4) {
30+
case 0: return .htmlLoadError
31+
case 1: return .apiKeyNotFound
32+
case 2: return .baseURLNotFound
33+
case 3: return .wrongMessageFormat
34+
default: return .unexpected(NSError())
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)