summaryrefslogtreecommitdiff
path: root/platform/darwin/test/MGLSDKTestHelpers.swift
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/test/MGLSDKTestHelpers.swift')
-rw-r--r--platform/darwin/test/MGLSDKTestHelpers.swift47
1 files changed, 47 insertions, 0 deletions
diff --git a/platform/darwin/test/MGLSDKTestHelpers.swift b/platform/darwin/test/MGLSDKTestHelpers.swift
new file mode 100644
index 0000000000..82b5caa273
--- /dev/null
+++ b/platform/darwin/test/MGLSDKTestHelpers.swift
@@ -0,0 +1,47 @@
+import Foundation
+
+class MGLSDKTestHelpers {
+
+ class func checkTestsContainAllMethods(testClass: Swift.AnyClass, in p: Protocol) {
+ let testMethods = self.classMethodDescriptions(testClass)
+ let subjectMethods = self.protocolMethodDescriptions(p)
+
+ for method in subjectMethods {
+ if !testMethods.contains(method) {
+ XCTFail("\(String(describing: testClass)) does not contain \(method) from \(String(describing: p))")
+ }
+ }
+
+ XCTAssert(true)
+ }
+
+}
+
+extension MGLSDKTestHelpers {
+
+ class func protocolMethodDescriptions(_ p: Protocol) -> Set<String> {
+ var methods = Set<String>()
+ var methodCount = UInt32()
+ let methodDescriptionList: UnsafeMutablePointer<objc_method_description>! = protocol_copyMethodDescriptionList(p, false, true, &methodCount)
+ for i in 0..<Int(methodCount) {
+ let description: objc_method_description = methodDescriptionList[i]
+ methods.insert(description.name.description)
+ }
+ free(methodDescriptionList)
+ return methods
+ }
+
+ class func classMethodDescriptions(_ cls: Swift.AnyClass) -> Set<String> {
+ var methods = Set<String>()
+ var methodCount = UInt32()
+ let methodList: UnsafeMutablePointer<Method?>! = class_copyMethodList(cls, &methodCount)
+ for i in 0..<Int(methodCount) {
+ let method = methodList[i]
+ let selector : Selector = method_getName(method)
+ methods.insert(selector.description)
+ }
+ free(methodList)
+ return methods
+ }
+
+}