From d4a053934f5cf86696d53eb18a19fcfe9006c111 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:28:14 +0800 Subject: [PATCH 001/123] refactor: move source file --- {NBus/Classes/Core => Sources/NBusCore}/Bus+Debug.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Endpoint.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Error.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Handler.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Helper.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Message.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Platform.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus+Wrapper.swift | 0 {NBus/Classes/Core => Sources/NBusCore}/Bus.swift | 0 {NBus/Classes/Handler => Sources/NBusQQHandler}/QQHandler.swift | 0 .../Handler => Sources/NBusQQSDKHandler}/QQSDKHandler.swift | 0 .../Handler => Sources/NBusSystemHandler}/SystemHandler.swift | 0 .../Handler => Sources/NBusWechatHandler}/WechatHandler.swift | 0 .../NBusWechatSDKHandler}/WechatSDKHandler.swift | 0 .../Handler => Sources/NBusWeiboHandler}/WeiboHandler.swift | 0 .../Handler => Sources/NBusWeiboSDKHandler}/WeiboSDKHandler.swift | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Debug.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Endpoint.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Error.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Handler.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Helper.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Message.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Platform.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus+Wrapper.swift (100%) rename {NBus/Classes/Core => Sources/NBusCore}/Bus.swift (100%) rename {NBus/Classes/Handler => Sources/NBusQQHandler}/QQHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusQQSDKHandler}/QQSDKHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusSystemHandler}/SystemHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusWechatHandler}/WechatHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusWechatSDKHandler}/WechatSDKHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusWeiboHandler}/WeiboHandler.swift (100%) rename {NBus/Classes/Handler => Sources/NBusWeiboSDKHandler}/WeiboSDKHandler.swift (100%) diff --git a/NBus/Classes/Core/Bus+Debug.swift b/Sources/NBusCore/Bus+Debug.swift similarity index 100% rename from NBus/Classes/Core/Bus+Debug.swift rename to Sources/NBusCore/Bus+Debug.swift diff --git a/NBus/Classes/Core/Bus+Endpoint.swift b/Sources/NBusCore/Bus+Endpoint.swift similarity index 100% rename from NBus/Classes/Core/Bus+Endpoint.swift rename to Sources/NBusCore/Bus+Endpoint.swift diff --git a/NBus/Classes/Core/Bus+Error.swift b/Sources/NBusCore/Bus+Error.swift similarity index 100% rename from NBus/Classes/Core/Bus+Error.swift rename to Sources/NBusCore/Bus+Error.swift diff --git a/NBus/Classes/Core/Bus+Handler.swift b/Sources/NBusCore/Bus+Handler.swift similarity index 100% rename from NBus/Classes/Core/Bus+Handler.swift rename to Sources/NBusCore/Bus+Handler.swift diff --git a/NBus/Classes/Core/Bus+Helper.swift b/Sources/NBusCore/Bus+Helper.swift similarity index 100% rename from NBus/Classes/Core/Bus+Helper.swift rename to Sources/NBusCore/Bus+Helper.swift diff --git a/NBus/Classes/Core/Bus+Message.swift b/Sources/NBusCore/Bus+Message.swift similarity index 100% rename from NBus/Classes/Core/Bus+Message.swift rename to Sources/NBusCore/Bus+Message.swift diff --git a/NBus/Classes/Core/Bus+Platform.swift b/Sources/NBusCore/Bus+Platform.swift similarity index 100% rename from NBus/Classes/Core/Bus+Platform.swift rename to Sources/NBusCore/Bus+Platform.swift diff --git a/NBus/Classes/Core/Bus+Wrapper.swift b/Sources/NBusCore/Bus+Wrapper.swift similarity index 100% rename from NBus/Classes/Core/Bus+Wrapper.swift rename to Sources/NBusCore/Bus+Wrapper.swift diff --git a/NBus/Classes/Core/Bus.swift b/Sources/NBusCore/Bus.swift similarity index 100% rename from NBus/Classes/Core/Bus.swift rename to Sources/NBusCore/Bus.swift diff --git a/NBus/Classes/Handler/QQHandler.swift b/Sources/NBusQQHandler/QQHandler.swift similarity index 100% rename from NBus/Classes/Handler/QQHandler.swift rename to Sources/NBusQQHandler/QQHandler.swift diff --git a/NBus/Classes/Handler/QQSDKHandler.swift b/Sources/NBusQQSDKHandler/QQSDKHandler.swift similarity index 100% rename from NBus/Classes/Handler/QQSDKHandler.swift rename to Sources/NBusQQSDKHandler/QQSDKHandler.swift diff --git a/NBus/Classes/Handler/SystemHandler.swift b/Sources/NBusSystemHandler/SystemHandler.swift similarity index 100% rename from NBus/Classes/Handler/SystemHandler.swift rename to Sources/NBusSystemHandler/SystemHandler.swift diff --git a/NBus/Classes/Handler/WechatHandler.swift b/Sources/NBusWechatHandler/WechatHandler.swift similarity index 100% rename from NBus/Classes/Handler/WechatHandler.swift rename to Sources/NBusWechatHandler/WechatHandler.swift diff --git a/NBus/Classes/Handler/WechatSDKHandler.swift b/Sources/NBusWechatSDKHandler/WechatSDKHandler.swift similarity index 100% rename from NBus/Classes/Handler/WechatSDKHandler.swift rename to Sources/NBusWechatSDKHandler/WechatSDKHandler.swift diff --git a/NBus/Classes/Handler/WeiboHandler.swift b/Sources/NBusWeiboHandler/WeiboHandler.swift similarity index 100% rename from NBus/Classes/Handler/WeiboHandler.swift rename to Sources/NBusWeiboHandler/WeiboHandler.swift diff --git a/NBus/Classes/Handler/WeiboSDKHandler.swift b/Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift similarity index 100% rename from NBus/Classes/Handler/WeiboSDKHandler.swift rename to Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift From 48701c939cf9adef9793df2437c2d3ff797125d7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:29:20 +0800 Subject: [PATCH 002/123] refactor: use SWIFT_PACKAGE --- Sources/NBusQQHandler/QQHandler.swift | 2 +- Sources/NBusSystemHandler/SystemHandler.swift | 2 +- Sources/NBusWechatHandler/WechatHandler.swift | 2 +- Sources/NBusWeiboHandler/WeiboHandler.swift | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/NBusQQHandler/QQHandler.swift b/Sources/NBusQQHandler/QQHandler.swift index a108694..0243164 100644 --- a/Sources/NBusQQHandler/QQHandler.swift +++ b/Sources/NBusQQHandler/QQHandler.swift @@ -9,7 +9,7 @@ import Foundation import UIKit -#if canImport(NBusCore) +#if SWIFT_PACKAGE import NBusCore #endif diff --git a/Sources/NBusSystemHandler/SystemHandler.swift b/Sources/NBusSystemHandler/SystemHandler.swift index 23e1de9..c1fa9dd 100644 --- a/Sources/NBusSystemHandler/SystemHandler.swift +++ b/Sources/NBusSystemHandler/SystemHandler.swift @@ -10,7 +10,7 @@ import AuthenticationServices import Foundation import UIKit -#if canImport(NBusCore) +#if SWIFT_PACKAGE import NBusCore #endif diff --git a/Sources/NBusWechatHandler/WechatHandler.swift b/Sources/NBusWechatHandler/WechatHandler.swift index 543c2ec..e8781f9 100644 --- a/Sources/NBusWechatHandler/WechatHandler.swift +++ b/Sources/NBusWechatHandler/WechatHandler.swift @@ -9,7 +9,7 @@ import Foundation import UIKit -#if canImport(NBusCore) +#if SWIFT_PACKAGE import NBusCore #endif diff --git a/Sources/NBusWeiboHandler/WeiboHandler.swift b/Sources/NBusWeiboHandler/WeiboHandler.swift index 17a4911..5fd811d 100644 --- a/Sources/NBusWeiboHandler/WeiboHandler.swift +++ b/Sources/NBusWeiboHandler/WeiboHandler.swift @@ -9,7 +9,7 @@ import Foundation import UIKit -#if canImport(NBusCore) +#if SWIFT_PACKAGE import NBusCore #endif From d6d4895ca8a70420e09acc55bc64194cf8841777 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:29:50 +0800 Subject: [PATCH 003/123] refactor: remove path and sources --- Package.swift | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/Package.swift b/Package.swift index acd97a4..229a862 100644 --- a/Package.swift +++ b/Package.swift @@ -18,32 +18,23 @@ let package = Package( ], targets: [ .target( - name: "NBusCore", - path: "NBus/Classes/Core" + name: "NBusCore" ), .target( name: "NBusQQHandler", - dependencies: ["NBusCore"], - path: "NBus/Classes/Handler", - sources: ["QQHandler.swift"] + dependencies: ["NBusCore"] ), .target( name: "NBusWechatHandler", - dependencies: ["NBusCore"], - path: "NBus/Classes/Handler", - sources: ["WechatHandler.swift"] + dependencies: ["NBusCore"] ), .target( name: "NBusWeiboHandler", - dependencies: ["NBusCore"], - path: "NBus/Classes/Handler", - sources: ["WeiboHandler.swift"] + dependencies: ["NBusCore"] ), .target( name: "NBusSystemHandler", - dependencies: ["NBusCore"], - path: "NBus/Classes/Handler", - sources: ["SystemHandler.swift"] + dependencies: ["NBusCore"] ), .testTarget( name: "NBusTests", From 7320cbd6f35a1a8a1cc8a041395cf00461933ed9 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:30:26 +0800 Subject: [PATCH 004/123] refactor: remove Assets --- NBus/Assets/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 NBus/Assets/.gitkeep diff --git a/NBus/Assets/.gitkeep b/NBus/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 From 087b0f8fc14f134473980e87f3a306b832cd2bb8 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:36:16 +0800 Subject: [PATCH 005/123] refactor: ss.source_files --- NBus.podspec | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/NBus.podspec b/NBus.podspec index 4fd0bff..4c0fb02 100644 --- a/NBus.podspec +++ b/NBus.podspec @@ -29,51 +29,51 @@ Pod::Spec.new do |s| end s.subspec "Core" do |ss| - ss.source_files = ["NBus/Classes/Core/**/*.swift"] + ss.source_files = ["Sources/NBusCore/*.swift"] end s.subspec "QQSDKHandler" do |ss| ss.dependency "NBus/Core" ss.dependency "NBusQQSDK" - ss.source_files = ["NBus/Classes/Handler/QQSDKHandler.swift"] + ss.source_files = ["Sources/NBusQQSDKHandler/*.swift"] end s.subspec "QQHandler" do |ss| ss.dependency "NBus/Core" - ss.source_files = ["NBus/Classes/Handler/QQHandler.swift"] + ss.source_files = ["Sources/NBusQQHandler/*.swift"] end s.subspec "WechatSDKHandler" do |ss| ss.dependency "NBus/Core" ss.dependency "NBusWechatSDK" - ss.source_files = ["NBus/Classes/Handler/WechatSDKHandler.swift"] + ss.source_files = ["Sources/NBusWechatSDKHandler/*.swift"] end s.subspec "WechatHandler" do |ss| ss.dependency "NBus/Core" - ss.source_files = ["NBus/Classes/Handler/WechatHandler.swift"] + ss.source_files = ["Sources/NBusWechatHandler/*.swift"] end s.subspec "WeiboSDKHandler" do |ss| ss.dependency "NBus/Core" ss.dependency "NBusWeiboSDK" - ss.source_files = ["NBus/Classes/Handler/WeiboSDKHandler.swift"] + ss.source_files = ["Sources/NBusWeiboSDKHandler/*.swift"] end s.subspec "WeiboHandler" do |ss| ss.dependency "NBus/Core" - ss.source_files = ["NBus/Classes/Handler/WeiboHandler.swift"] + ss.source_files = ["Sources/NBusWeiboHandler/*.swift"] end s.subspec "SystemHandler" do |ss| ss.dependency "NBus/Core" - ss.source_files = ["NBus/Classes/Handler/SystemHandler.swift"] + ss.source_files = ["Sources/NBusSystemHandler/*.swift"] end end From e30306a55fef6151daf9fde39ec319b5f305fe2d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:38:32 +0800 Subject: [PATCH 006/123] refactor: Vendor path --- fastlane/Fastfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 34c4c3d..620e6e6 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -240,7 +240,7 @@ end # download def _download_sdk(vendor, vendor_version, vendor_url, vendor_sha256, vendor_search) - root = (Pathname.pwd / "../NBus/Vendor").expand_path + root = (Pathname.pwd / "../Vendor").expand_path vendor_file = root / "Vendor_#{vendor}_#{vendor_version}.zip" vendor_zip_directory = root / "#{vendor}ZIP" @@ -392,7 +392,7 @@ end # upload def _upload_sdk(vendor, vendor_version, vendor_package) - root = (Pathname.pwd / "../NBus/Vendor").expand_path + root = (Pathname.pwd / "../Vendor").expand_path vendor_sdk_directory = root / "#{vendor}SDK" vendor_img_directory = root / "#{vendor}IMG" From f24fdfe2da45cef1d66a088fd4a7d0dbb09d7328 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 20:43:21 +0800 Subject: [PATCH 007/123] refactor: swiftlint --- .swiftlint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index 2344cb6..6a6a844 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -12,7 +12,7 @@ identifier_name: included: - Example - - NBus + - Sources - Tests - Package.swift From fbcd4a3cbfd810efbbdaa96660208041a8df5808 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 28 Mar 2022 21:08:27 +0800 Subject: [PATCH 008/123] chore: update Podfile --- Example/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 51da49a..5e71d34 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -68,7 +68,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - NBus: 886bd839fdc1241f2de86f0b7636540a888d12ce + NBus: 20022fd04c4f9f36302ba7e3a0c4ea5c8aedde91 NBusQQSDK: 196ee749b74b67feda8c385d7a8da04c641bb21e NBusWechatSDK: efebd57656091bb33a3b54a67156bd293b37d423 NBusWeiboSDK: 9ece35d36da59080de85d7d5e34446111648da02 From e48725f847ae5dbe99c6ea7b98bbbcfc8a4d4f8a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 30 Mar 2022 22:05:29 +0800 Subject: [PATCH 009/123] style: format --- Example/NBus/Model/MediaSource.swift | 36 ++++++++++++---------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/Example/NBus/Model/MediaSource.swift b/Example/NBus/Model/MediaSource.swift index e0042bd..209d2a6 100644 --- a/Example/NBus/Model/MediaSource.swift +++ b/Example/NBus/Model/MediaSource.swift @@ -11,11 +11,9 @@ import UIKit enum MediaSource { - static let text: MessageType = { - Messages.text( - text: defaultText - ) - }() + static let text: MessageType = Messages.text( + text: defaultText + ) static let image: MessageType = { let data = defaultJPEG.jpegData(compressionQuality: 1)! @@ -29,14 +27,12 @@ enum MediaSource { ) }() - static let gif: MessageType = { - Messages.image( - data: defaultGIF, - title: defaultTitle, - description: defaultDescription, - thumbnail: defaultThumbnail - ) - }() + static let gif: MessageType = Messages.image( + data: defaultGIF, + title: defaultTitle, + description: defaultDescription, + thumbnail: defaultThumbnail + ) static let audio: MessageType = { let url = URL(string: "https://music.163.com/#/song?id=25706284")! @@ -68,14 +64,12 @@ enum MediaSource { ) }() - static let webPage: MessageType = { - Messages.webPage( - link: defaultLink, - title: defaultTitle, - description: defaultDescription, - thumbnail: defaultThumbnail - ) - }() + static let webPage: MessageType = Messages.webPage( + link: defaultLink, + title: defaultTitle, + description: defaultDescription, + thumbnail: defaultThumbnail + ) static let file: MessageType = { let fileExtension = "gif" From 7be7072ebf43a43bee21af67bedd03c87478d667 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 30 Mar 2022 22:10:47 +0800 Subject: [PATCH 010/123] feat: add qqImage --- Example/NBus/Model/MediaSource.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Example/NBus/Model/MediaSource.swift b/Example/NBus/Model/MediaSource.swift index 209d2a6..b7ce253 100644 --- a/Example/NBus/Model/MediaSource.swift +++ b/Example/NBus/Model/MediaSource.swift @@ -27,6 +27,18 @@ enum MediaSource { ) }() + static let qqImage: MessageType = { + let data = defaultJPEG.jpegData(compressionQuality: 0.5)! + let thumbnail = defaultJPEG.jpegData(compressionQuality: 0.2)! + + return Messages.image( + data: data, + title: defaultTitle, + description: defaultDescription, + thumbnail: thumbnail + ) + }() + static let gif: MessageType = Messages.image( data: defaultGIF, title: defaultTitle, From 4a4a61927b3dcdda8af282ea5093ad892a001343 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:20:38 +0800 Subject: [PATCH 011/123] refactor: setup AppState --- Example/NBus/Model/AppState+Setup.swift | 121 ++++++++++++++++++++++++ Example/NBus/Model/AppState.swift | 102 -------------------- 2 files changed, 121 insertions(+), 102 deletions(-) create mode 100644 Example/NBus/Model/AppState+Setup.swift diff --git a/Example/NBus/Model/AppState+Setup.swift b/Example/NBus/Model/AppState+Setup.swift new file mode 100644 index 0000000..78b5506 --- /dev/null +++ b/Example/NBus/Model/AppState+Setup.swift @@ -0,0 +1,121 @@ +// +// AppState+Setup.swift +// NBus +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import NBus + +extension AppState { + + func setup() { + setupBusMock() + } + + private func setupWechatItem() -> PlatformItem { + let wechatSDKHandler = WechatSDKHandler( + appID: AppState.getAppID(for: Platforms.wechat)!, + universalLink: AppState.getUniversalLink(for: Platforms.wechat)! + ) + + let wechatHandler = WechatHandler( + appID: AppState.getAppID(for: Platforms.wechat)!, + universalLink: AppState.getUniversalLink(for: Platforms.wechat)! + ) + + let wechatItem = AppState.PlatformItem( + platform: Platforms.wechat, + category: .sdk, + handlers: [ + .bus: wechatHandler, + .sdk: wechatSDKHandler, + ], + viewController: { PlatformViewController() } + ) + + return wechatItem + } + + private func setupQQItem() -> PlatformItem { + let qqSDKHandler = QQSDKHandler( + appID: AppState.getAppID(for: Platforms.qq)!, + universalLink: AppState.getUniversalLink(for: Platforms.qq)! + ) + + let qqHandler = QQHandler( + appID: AppState.getAppID(for: Platforms.qq)!, + universalLink: AppState.getUniversalLink(for: Platforms.qq)! + ) + + let qqItem = AppState.PlatformItem( + platform: Platforms.qq, + category: .sdk, + handlers: [ + .bus: qqHandler, + .sdk: qqSDKHandler, + ], + viewController: { PlatformViewController() } + ) + + return qqItem + } + + private func setupWeiboItem() -> PlatformItem { + let weiboSDKHandler = WeiboSDKHandler( + appID: AppState.getAppID(for: Platforms.weibo)!, + universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, + redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! + ) + + let weiboHandler = WeiboHandler( + appID: AppState.getAppID(for: Platforms.weibo)!, + universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, + redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! + ) + + let weiboItem = AppState.PlatformItem( + platform: Platforms.weibo, + category: .sdk, + handlers: [ + .bus: weiboHandler, + .sdk: weiboSDKHandler, + ], + viewController: { PlatformViewController() } + ) + + return weiboItem + } + + private func setupSystemItem() -> PlatformItem { + let systemHandler = SystemHandler() + + let systemItem = AppState.PlatformItem( + platform: Platforms.system, + category: .bus, + handlers: [ + .bus: systemHandler, + ], + viewController: { PlatformViewController() } + ) + + return systemItem + } + + private func setupBusMock() { + + let wechatItem = setupWechatItem() + let qqItem = setupQQItem() + let weiboItem = setupWeiboItem() + let systemItem = setupSystemItem() + + platformItems.accept([ + wechatItem, + qqItem, + weiboItem, + systemItem, + ]) + } +} diff --git a/Example/NBus/Model/AppState.swift b/Example/NBus/Model/AppState.swift index a2bda44..15ddd2e 100644 --- a/Example/NBus/Model/AppState.swift +++ b/Example/NBus/Model/AppState.swift @@ -66,105 +66,3 @@ extension AppState.PlatformItem.Category { return copy } } - -extension AppState { - - func setup() { - setupBusMock() - } - - // swiftlint:disable function_body_length - - private func setupBusMock() { - - // MARK: Wechat - - let wechatSDKHandler = WechatSDKHandler( - appID: AppState.getAppID(for: Platforms.wechat)!, - universalLink: AppState.getUniversalLink(for: Platforms.wechat)! - ) - - let wechatHandler = WechatHandler( - appID: AppState.getAppID(for: Platforms.wechat)!, - universalLink: AppState.getUniversalLink(for: Platforms.wechat)! - ) - - let wechatItem = AppState.PlatformItem( - platform: Platforms.wechat, - category: .sdk, - handlers: [ - .bus: wechatHandler, - .sdk: wechatSDKHandler, - ], - viewController: { PlatformViewController() } - ) - - // MARK: QQ - - let qqSDKHandler = QQSDKHandler( - appID: AppState.getAppID(for: Platforms.qq)!, - universalLink: AppState.getUniversalLink(for: Platforms.qq)! - ) - - let qqHandler = QQHandler( - appID: AppState.getAppID(for: Platforms.qq)!, - universalLink: AppState.getUniversalLink(for: Platforms.qq)! - ) - - let qqItem = AppState.PlatformItem( - platform: Platforms.qq, - category: .sdk, - handlers: [ - .bus: qqHandler, - .sdk: qqSDKHandler, - ], - viewController: { PlatformViewController() } - ) - - // MARK: Weibo - - let weiboSDKHandler = WeiboSDKHandler( - appID: AppState.getAppID(for: Platforms.weibo)!, - universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, - redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! - ) - - let weiboHandler = WeiboHandler( - appID: AppState.getAppID(for: Platforms.weibo)!, - universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, - redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! - ) - - let weiboItem = AppState.PlatformItem( - platform: Platforms.weibo, - category: .sdk, - handlers: [ - .bus: weiboHandler, - .sdk: weiboSDKHandler, - ], - viewController: { PlatformViewController() } - ) - - // MARK: System - - let systemHandler = SystemHandler() - - let systemItem = AppState.PlatformItem( - platform: Platforms.system, - category: .bus, - handlers: [ - .bus: systemHandler, - ], - viewController: { PlatformViewController() } - ) - - platformItems.accept([ - wechatItem, - qqItem, - weiboItem, - systemItem, - ]) - } - - // swiftlint:enable function_body_length -} From e63954997b8581469c5c090716102e358fac9cda Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:27:23 +0800 Subject: [PATCH 012/123] refactor: observeSystem --- Example/NBus/AppDelegate.swift | 40 ++++++------------------------ Example/NBus/Model/Helper.swift | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 Example/NBus/Model/Helper.swift diff --git a/Example/NBus/AppDelegate.swift b/Example/NBus/AppDelegate.swift index a05b790..c2f3704 100644 --- a/Example/NBus/AppDelegate.swift +++ b/Example/NBus/AppDelegate.swift @@ -70,12 +70,10 @@ extension AppDelegate { // swiftlint:disable function_body_length private func pasteboardItems() -> Observable<[[String]]> { - NotificationCenter.default.rx - .notification(UIPasteboard.changedNotification) - .map { _ -> [[String]] in - let items = UIPasteboard.general.items - - return items.enumerated().map { index, item -> [String] in + UIPasteboard.general.rx + .items() + .map { items -> [[String]] in + items.enumerated().map { index, item -> [String] in item.map { key, value -> String in let identity: String let index = "(\(index + 1)/\(items.count))" @@ -126,30 +124,6 @@ extension AppDelegate { } // swiftlint:enable function_body_length - - private func canOpenURL() -> Observable { - UIApplication.shared.rx - .methodInvoked(#selector(UIApplication.canOpenURL(_:))) - .compactMap { args in - args[0] as? URL - } - } - - private func openURL() -> Observable { - let oldURL = UIApplication.shared.rx - .methodInvoked(#selector(UIApplication.openURL(_:))) - .compactMap { args in - args[0] as? URL - } - - let newURL = UIApplication.shared.rx - .methodInvoked(#selector(UIApplication.open(_:options:completionHandler:))) - .compactMap { args in - args[0] as? URL - } - - return Observable.merge([oldURL, newURL]) - } } extension AppDelegate { @@ -161,13 +135,15 @@ extension AppDelegate { }) .disposed(by: disposeBag) - canOpenURL() + UIApplication.shared.rx + .canOpenURL() .bind(onNext: { url in logger.debug("\(url)") }) .disposed(by: disposeBag) - openURL() + UIApplication.shared.rx + .openURL() .bind(onNext: { url in logger.debug("\(url)") }) diff --git a/Example/NBus/Model/Helper.swift b/Example/NBus/Model/Helper.swift new file mode 100644 index 0000000..71237a8 --- /dev/null +++ b/Example/NBus/Model/Helper.swift @@ -0,0 +1,44 @@ +// +// Helper.swift +// NBus +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import RxCocoa +import RxSwift + +extension Reactive where Base: UIApplication { + + func canOpenURL() -> Observable { + methodInvoked(#selector(UIApplication.canOpenURL(_:))) + .compactMap { args in + args[0] as? URL + } + } + + func openURL() -> Observable { + let oldURL = methodInvoked(#selector(UIApplication.openURL(_:))) + .compactMap { args in + args[0] as? URL + } + + let newURL = methodInvoked(#selector(UIApplication.open(_:options:completionHandler:))) + .compactMap { args in + args[0] as? URL + } + + return Observable.merge([oldURL, newURL]) + } +} + +extension Reactive where Base: UIPasteboard { + + func items() -> Observable<[[String: Any]]> { + NotificationCenter.default.rx + .notification(UIPasteboard.changedNotification) + .map { _ in base.items } + } +} From 7abed681a7bb2255d265db221128c6e8d07035c9 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:33:14 +0800 Subject: [PATCH 013/123] style: rename Reactive --- Example/NBus/Model/{Helper.swift => Reactive.swift} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Example/NBus/Model/{Helper.swift => Reactive.swift} (98%) diff --git a/Example/NBus/Model/Helper.swift b/Example/NBus/Model/Reactive.swift similarity index 98% rename from Example/NBus/Model/Helper.swift rename to Example/NBus/Model/Reactive.swift index 71237a8..1b277b9 100644 --- a/Example/NBus/Model/Helper.swift +++ b/Example/NBus/Model/Reactive.swift @@ -1,5 +1,5 @@ // -// Helper.swift +// Reactive.swift // NBus // // Created by nuomi1 on 2022/4/1. From 7d1847c9c15a4b620ae76d7f1c467f604c9a9f39 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:34:14 +0800 Subject: [PATCH 014/123] refactor: remove NBusTests --- Tests/NBusTests/NBusTests.swift | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 Tests/NBusTests/NBusTests.swift diff --git a/Tests/NBusTests/NBusTests.swift b/Tests/NBusTests/NBusTests.swift deleted file mode 100644 index 7598992..0000000 --- a/Tests/NBusTests/NBusTests.swift +++ /dev/null @@ -1,14 +0,0 @@ -@testable import NBusCore -import XCTest - -final class NBusTests: XCTestCase { - - func testExample() { - XCTAssertEqual(Bus.shared.isDebugEnabled, true) - XCTAssertEqual(Bus.shared.handlers.isEmpty, true) - } - - static var allTests = [ - ("testExample", testExample), - ] -} From 6e16fb90bfcf15bb2065219158a408976b94718d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:35:03 +0800 Subject: [PATCH 015/123] feat: HandlerBaseTests --- Tests/NBusTests/HandlerBaseTests.swift | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Tests/NBusTests/HandlerBaseTests.swift diff --git a/Tests/NBusTests/HandlerBaseTests.swift b/Tests/NBusTests/HandlerBaseTests.swift new file mode 100644 index 0000000..0a6ba50 --- /dev/null +++ b/Tests/NBusTests/HandlerBaseTests.swift @@ -0,0 +1,52 @@ +// +// HandlerBaseTests.swift +// BusTests +// +// Created by nuomi1 on 2022/3/30. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +class HandlerBaseTests: XCTestCase { + + class var handler: HandlerType { + fatalError() + } + + class var category: AppState.PlatformItem.Category { + fatalError() + } + + static var disposeBag = DisposeBag() + var disposeBag = DisposeBag() + + override class func setUp() { + super.setUp() + + UIApplication.shared.rx + .canOpenURL() + .bind(onNext: { url in + logger.debug("\(url)") + }) + .disposed(by: disposeBag) + + UIApplication.shared.rx + .openURL() + .bind(onNext: { url in + logger.debug("\(url)") + }) + .disposed(by: disposeBag) + + Bus.shared.handlers = [handler] + } + + override func tearDown() { + super.tearDown() + + disposeBag = DisposeBag() + } +} From e9d6f0584baf5fc24ad0cfcdcd4eb925e259fa03 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:45:42 +0800 Subject: [PATCH 016/123] feat: QQHandlerBaseTests with share test --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 668 ++++++++++++++++++++ 1 file changed, 668 insertions(+) create mode 100644 Tests/NBusTests/QQ/QQHandlerBaseTests.swift diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift new file mode 100644 index 0000000..96c8649 --- /dev/null +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -0,0 +1,668 @@ +// +// QQHandlerBaseTests.swift +// BusTests +// +// Created by nuomi1 on 2022/3/30. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +class QQHandlerBaseTests: HandlerBaseTests { + + override class func setUp() { + super.setUp() + + UIPasteboard.general.items = [] + } +} + +// MARK: - Helper + +extension QQHandlerBaseTests { + + var appNumber: String { + switch Self.handler { + case let handler as QQSDKHandler: + return handler.appID.trimmingCharacters(in: .letters) + case let handler as QQHandler: + return handler.appID.trimmingCharacters(in: .letters) + default: + fatalError() + } + } + + var bundleID: String { + Bundle.main.bus.identifier! + } + + var displayName: String { + Bundle.main.bus.displayName! + } + + var sdkShortVersion: String { + "3.5.11" + } + + var sdkVersion: String { + "3.5.1_lite" + } + + var txID: String { + "QQ\(String(format: "%08llX", (appNumber as NSString).longLongValue))" + } +} + +// MARK: - Share + +extension QQHandlerBaseTests { + + func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + + self.test_share(urlComponents, message, endpoint) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_share(items, message, endpoint) + }) + .disposed(by: disposeBag) + + Bus.shared.share( + message: message, + to: endpoint, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case let .failure(error): + logger.error("\(error)") + + if message.identifier == Messages.file, endpoint == Endpoints.QQ.timeline { + XCTAssertTrue(true) + } else { + XCTAssertTrue(false) + } + } + } + ) + } + + func test_share_text_friend() { + test_share(MediaSource.text, Endpoints.QQ.friend) + } + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_image_friend() { + test_share(MediaSource.qqImage, Endpoints.QQ.friend) + } + + func test_share_image_timeline() { + test_share(MediaSource.qqImage, Endpoints.QQ.timeline) + } + + func test_share_audio_friend() { + test_share(MediaSource.audio, Endpoints.QQ.friend) + } + + func test_share_audio_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_video_friend() { + test_share(MediaSource.video, Endpoints.QQ.friend) + } + + func test_share_video_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_webPage_friend() { + test_share(MediaSource.webPage, Endpoints.QQ.friend) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.QQ.timeline) + } + + func test_share_file_friend() { + test_share(MediaSource.file, Endpoints.QQ.friend) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.QQ.timeline) + } + + func test_share_miniProgram_friend() { + test_share(MediaSource.qqMiniProgram, Endpoints.QQ.friend) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.webPage, Endpoints.QQ.timeline) + } +} + +// MARK: Share - UniversalLink + +extension QQHandlerBaseTests { + + func test_share(_ urlComponents: URLComponents, _ message: MessageType, _ endpoint: Endpoint) { + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "qm.qq.com") + + let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! + test_appsign_txid(appsign_txid) + + let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! + test_bundleid(bundleid) + + let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! + test_sdkv(sdkv) + + // ShareUniversalLink + + XCTAssertEqual(urlComponents.path, "/opensdkul/mqqapi/share/to_fri") + + let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! + test_callback_name(callback_name) + + let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! + test_callback_type(callback_type) + + let src_type = queryItems.removeFirst { $0.name == "src_type" }! + test_src_type(src_type) + + let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! + test_thirdAppDisplayName(thirdAppDisplayName) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) + + // share + + let cflag = queryItems.removeFirst { $0.name == "cflag" }! + test_cflag(cflag, message, endpoint) + + let description = queryItems.removeFirst { $0.name == "description" } + test_description(description, message) + + let fileName = queryItems.removeFirst { $0.name == "fileName" } + test_fileName(fileName, message) + + let file_data = queryItems.removeFirst { $0.name == "file_data" } + test_file_data(file_data, message) + + let file_type = queryItems.removeFirst { $0.name == "file_type" }! + test_file_type(file_type, message) + + let flashurl = queryItems.removeFirst { $0.name == "flashurl" } + test_flashurl(flashurl, message) + + let generalpastboard = queryItems.removeFirst { $0.name == "generalpastboard" } + test_generalpastboard(generalpastboard) + + let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" } + test_mini_appid(mini_appid, message) + + let mini_code64 = queryItems.removeFirst { $0.name == "mini_code64" } + test_mini_code64(mini_code64, message) + + let mini_path = queryItems.removeFirst { $0.name == "mini_path" } + test_mini_path(mini_path, message) + + let mini_type = queryItems.removeFirst { $0.name == "mini_type" } + test_mini_type(mini_type, message) + + let mini_weburl = queryItems.removeFirst { $0.name == "mini_weburl" } + test_mini_weburl(mini_weburl, message) + + let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" } + test_objectlocation(objectlocation, message) + + let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" } + test_pasteboard(pasteboard, message) + + let shareType = queryItems.removeFirst { $0.name == "shareType" }! + test_shareType(shareType, message, endpoint) + + let title = queryItems.removeFirst { $0.name == "title" } + test_title(title, message) + + let url = queryItems.removeFirst { $0.name == "url" } + test_url(url, message) + + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems)") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension QQHandlerBaseTests { + + func test_appsign_txid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_bundleid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) + } + + func test_callback_name(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_callback_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "scheme") + } + + func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.QQ.friend: + switch message.identifier { + case Messages.text, + Messages.image, + Messages.audio, + Messages.video, + Messages.webPage: + XCTAssertEqual(queryItem.value!, "2") + case Messages.file: + XCTAssertEqual(queryItem.value!, "18") + case Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "64") + default: + XCTAssertTrue(false) + } + case Endpoints.QQ.timeline: + XCTAssertEqual(queryItem.value!, "0") + default: + XCTAssertTrue(false) + } + } + + func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_fileName(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.fullName) + default: + XCTAssertTrue(false) + } + } + + func test_file_data(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(queryItem!.value!, message.text.bus.base64EncodedString) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + default: + XCTAssertTrue(false) + } + } + + func test_file_type(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(queryItem.value!, "text") + case Messages.image: + XCTAssertEqual(queryItem.value!, "img") + case Messages.audio: + XCTAssertEqual(queryItem.value!, "audio") + case Messages.video: + XCTAssertEqual(queryItem.value!, "video") + case Messages.webPage: + XCTAssertEqual(queryItem.value!, "news") + case Messages.file: + XCTAssertEqual(queryItem.value!, "localFile") + case Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "news") + default: + XCTAssertTrue(false) + } + } + + func test_flashurl(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_generalpastboard(_ queryItem: URLQueryItem?) { + XCTAssertEqual(queryItem!.value!, "1") + } + + func test_mini_appid(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.miniProgramID) + default: + XCTAssertTrue(false) + } + } + + func test_mini_code64(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case is MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, "1") + default: + XCTAssertTrue(false) + } + } + + func test_mini_path(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_mini_type(_ queryItem: URLQueryItem?, _ message: MessageType) { + let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in + switch miniProgramType { + case .release: + return "3" + case .test: + return "1" + case .preview: + return "4" + } + } + + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) + default: + XCTAssertTrue(false) + } + } + + func test_mini_weburl(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_objectlocation(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is FileMessage: + XCTAssertEqual(queryItem!.value!, "pasteboard") + case is WebPageMessage, + is MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, "url") + default: + XCTAssertTrue(false) + } + } + + func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { + let thumbnail: (String) -> Data = { value in + let data = Data(base64Encoded: value)! + let object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + return object["previewimagedata"] as! Data + } + + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as WebPageMessage: + XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + default: + XCTAssertTrue(false) + } + } + + func test_sdkv(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkShortVersion) + } + + func test_shareType(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.QQ.friend: + switch message.identifier { + case Messages.text, + Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "0") + default: + XCTAssertTrue(false) + } + case Endpoints.QQ.timeline: + switch message.identifier { + case Messages.text, + Messages.image: + XCTAssertEqual(queryItem.value!, "0") + case Messages.audio, + Messages.video, + Messages.webPage: + XCTAssertEqual(queryItem.value!, "1") + default: + XCTAssertTrue(false) + } + default: + XCTAssertTrue(false) + } + } + + func test_src_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "app") + } + + func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) + } + + func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_url(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false) + } + } + + func test_version(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "1") + } +} + +// MARK: Share - Pasteboard + +extension QQHandlerBaseTests { + + func test_share(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["com.tencent.mqq.api.apiLargeData"] as! Data + var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let file_data = dictionary.removeValue(forKey: "file_data") as? Data + test_file_data(file_data, message) + + let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data + test_previewimagedata(previewimagedata, message) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys)") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension QQHandlerBaseTests { + + func test_file_data(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.data) + case let message as FileMessage: + XCTAssertEqual(value!, message.data) + default: + XCTAssertTrue(false) + } + } + + func test_previewimagedata(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as FileMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false) + } + } +} From 84e0c1062f23871eccacce1b738070f310902bd7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:46:03 +0800 Subject: [PATCH 017/123] feat: QQSDKHandlerTests --- Tests/NBusTests/QQ/QQSDKHandlerTests.swift | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Tests/NBusTests/QQ/QQSDKHandlerTests.swift diff --git a/Tests/NBusTests/QQ/QQSDKHandlerTests.swift b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift new file mode 100644 index 0000000..662e8f2 --- /dev/null +++ b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift @@ -0,0 +1,22 @@ +// +// QQSDKHandlerTests.swift +// BusTests +// +// Created by nuomi1 on 2022/3/30. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus + +class QQSDKHandlerTests: QQHandlerBaseTests { + + static let qqSDKHandler = QQSDKHandler( + appID: AppState.getAppID(for: Platforms.qq)!, + universalLink: AppState.getUniversalLink(for: Platforms.qq)! + ) + + override class var handler: HandlerType { qqSDKHandler } + + override class var category: AppState.PlatformItem.Category { .sdk } +} From fe54287a6990a052c0272e676c3d4a655db51706 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:46:20 +0800 Subject: [PATCH 018/123] feat: removeFirst --- Tests/NBusTests/Helper.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Tests/NBusTests/Helper.swift diff --git a/Tests/NBusTests/Helper.swift b/Tests/NBusTests/Helper.swift new file mode 100644 index 0000000..8c56aac --- /dev/null +++ b/Tests/NBusTests/Helper.swift @@ -0,0 +1,17 @@ +// +// Helper.swift +// BusTests +// +// Created by nuomi1 on 2022/3/30. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation + +extension Array { + + mutating func removeFirst(where shouldBeRemoved: (Element) throws -> Bool) rethrows -> Element? { + guard let index = try firstIndex(where: shouldBeRemoved) else { return nil } + return remove(at: index) + } +} From b5dae20e5fc60510264814cd202fc5c46872f50d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 00:46:42 +0800 Subject: [PATCH 019/123] fix: Info.plist --- Tests/NBusTests/Info.plist | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Tests/NBusTests/Info.plist diff --git a/Tests/NBusTests/Info.plist b/Tests/NBusTests/Info.plist new file mode 100644 index 0000000..ba72822 --- /dev/null +++ b/Tests/NBusTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + From 83cdff2485bd269b155c3085cda7eaca1895b7c7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 20:39:18 +0800 Subject: [PATCH 020/123] style: rename function --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 96c8649..9861485 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -66,14 +66,14 @@ extension QQHandlerBaseTests { .bind(onNext: { [unowned self] url in let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - self.test_share(urlComponents, message, endpoint) + self.test_share(urlComponents: urlComponents, message, endpoint) }) .disposed(by: disposeBag) UIPasteboard.general.rx .items() .bind(onNext: { [unowned self] items in - self.test_share(items, message, endpoint) + self.test_share(items: items, message, endpoint) }) .disposed(by: disposeBag) @@ -158,7 +158,7 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests { - func test_share(_ urlComponents: URLComponents, _ message: MessageType, _ endpoint: Endpoint) { + func test_share(urlComponents: URLComponents, _ message: MessageType, _ endpoint: Endpoint) { var queryItems = urlComponents.queryItems ?? [] // GeneralUniversalLink @@ -612,7 +612,7 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests { - func test_share(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { if items.isEmpty { XCTAssertTrue(true) return From 9f1b506dcbd36b04d92c8b6fbf49b9d9d8fdfce8 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 20:41:00 +0800 Subject: [PATCH 021/123] feat: QQHandlerBaseTests with oauth test --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 176 +++++++++++++++++++- 1 file changed, 172 insertions(+), 4 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 9861485..7b31231 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -24,17 +24,21 @@ class QQHandlerBaseTests: HandlerBaseTests { extension QQHandlerBaseTests { - var appNumber: String { + var appID: String { switch Self.handler { case let handler as QQSDKHandler: - return handler.appID.trimmingCharacters(in: .letters) + return handler.appID case let handler as QQHandler: - return handler.appID.trimmingCharacters(in: .letters) + return handler.appID default: fatalError() } } + var appNumber: String { + appID.trimmingCharacters(in: .letters) + } + var bundleID: String { Bundle.main.bus.identifier! } @@ -48,12 +52,35 @@ extension QQHandlerBaseTests { } var sdkVersion: String { - "3.5.1_lite" + "3.5.11_lite" + } + + var statusMachine: String { + UIDevice.current.bus.machine + } + + var statusOS: String { + UIDevice.current.systemVersion + } + + var statusVersion: String { + "\(ProcessInfo.processInfo.operatingSystemVersion.majorVersion)" } var txID: String { "QQ\(String(format: "%08llX", (appNumber as NSString).longLongValue))" } + + var universalLink: URL { + switch Self.handler { + case let handler as QQSDKHandler: + return handler.universalLink + case let handler as QQHandler: + return handler.universalLink + default: + fatalError() + } + } } // MARK: - Share @@ -666,3 +693,144 @@ extension QQHandlerBaseTests { } } } + +// MARK: - Oauth + +extension QQHandlerBaseTests { + + func test_oauth() { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + + self.test_oauth(urlComponents: urlComponents) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_oauth(items: items) + }) + .disposed(by: disposeBag) + + Bus.shared.oauth( + with: Platforms.qq, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } + ) + } +} + +// MARK: Oauth - UniversalLink + +extension QQHandlerBaseTests { + + func test_oauth(urlComponents: URLComponents) { + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "qm.qq.com") + + let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! + test_appsign_txid(appsign_txid) + + let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! + test_bundleid(bundleid) + + let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! + test_sdkv(sdkv) + + // OauthUniversalLink + + XCTAssertEqual(urlComponents.path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") + + let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" }! + test_objectlocation(objectlocation) + + let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" }! + test_pasteboard(pasteboard) + + logger.debug("\(URLComponents.self), \(queryItems)") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension QQHandlerBaseTests { + + func test_objectlocation(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value, "url") + } + + func test_pasteboard(_ queryItem: URLQueryItem) { + let data = Data(base64Encoded: queryItem.value!)! + var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let appsign_token = object.removeValue(forKey: "appsign_token") as! String + XCTAssertEqual(appsign_token, "") + + let app_id = object.removeValue(forKey: "app_id") as! String + XCTAssertEqual(app_id, appNumber) + + let app_name = object.removeValue(forKey: "app_name") as! String + XCTAssertEqual(app_name, displayName) + + let bundleid = object.removeValue(forKey: "bundleid") as! String + XCTAssertEqual(bundleid, bundleID) + + let client_id = object.removeValue(forKey: "client_id") as! String + XCTAssertEqual(client_id, appNumber) + + let refUniversallink = object.removeValue(forKey: "refUniversallink") as! String + XCTAssertEqual(refUniversallink, universalLink.absoluteString) + + let response_type = object.removeValue(forKey: "response_type") as! String + XCTAssertEqual(response_type, "token") + + let scope = object.removeValue(forKey: "scope") as! String + XCTAssertEqual(scope, "get_user_info") + + let sdkp = object.removeValue(forKey: "sdkp") as! String + XCTAssertEqual(sdkp, "i") + + let sdkv = object.removeValue(forKey: "sdkv") as! String + XCTAssertEqual(sdkv, sdkVersion) + + let status_machine = object.removeValue(forKey: "status_machine") as! String + XCTAssertEqual(status_machine, statusMachine) + + let status_os = object.removeValue(forKey: "status_os") as! String + XCTAssertEqual(status_os, statusOS) + + let status_version = object.removeValue(forKey: "status_version") as! String + XCTAssertEqual(status_version, statusVersion) + + XCTAssertTrue(object.isEmpty) + } +} + +// MARK: Oauth - Pasteboard + +extension QQHandlerBaseTests { + + func test_oauth(items: [[String: Any]]) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["com.tencent.mqq.api.apiLargeData"] + + logger.debug("\(UIPasteboard.self), \(items.map { $0.keys })") + XCTAssertNil(data) + } +} From 024e9ebd3922049e1a8273aa2542f12f0491dd3e Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 20:43:34 +0800 Subject: [PATCH 022/123] refactor: use url --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 7b31231..1a3b375 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -91,9 +91,7 @@ extension QQHandlerBaseTests { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - - self.test_share(urlComponents: urlComponents, message, endpoint) + self.test_share(url: url, message, endpoint) }) .disposed(by: disposeBag) @@ -185,7 +183,8 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests { - func test_share(urlComponents: URLComponents, _ message: MessageType, _ endpoint: Endpoint) { + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] // GeneralUniversalLink @@ -702,9 +701,7 @@ extension QQHandlerBaseTests { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - - self.test_oauth(urlComponents: urlComponents) + self.test_oauth(url: url) }) .disposed(by: disposeBag) @@ -733,7 +730,8 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests { - func test_oauth(urlComponents: URLComponents) { + func test_oauth(url: URL) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] // GeneralUniversalLink From afbb1153a21c95620896c02ff5e95e8e1f967449 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 21:06:07 +0800 Subject: [PATCH 023/123] feat: QQHandlerBaseTests with launch test --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 120 ++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 1a3b375..a407e5f 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -832,3 +832,123 @@ extension QQHandlerBaseTests { XCTAssertNil(data) } } + +// MARK: - Launch + +extension QQHandlerBaseTests { + + func test_launch() { + let message = MediaSource.qqMiniProgram as! MiniProgramMessage + + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_launch(url: url, message) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_launch(items: items) + }) + .disposed(by: disposeBag) + + Bus.shared.launch( + program: message, + with: Platforms.qq, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } + ) + } +} + +// MARK: Launch - UniversalLink + +extension QQHandlerBaseTests { + + func test_launch(url: URL, _ message: MessageType) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "qm.qq.com") + + let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! + test_appsign_txid(appsign_txid) + + let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! + test_bundleid(bundleid) + + let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! + test_sdkv(sdkv) + + // LaunchUniversalLink + + XCTAssertEqual(urlComponents.path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") + + let appid = queryItems.removeFirst { $0.name == "appid" }! + test_appid(appid) + + let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! + test_callback_name(callback_name) + + let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! + test_callback_type(callback_type) + + let src_type = queryItems.removeFirst { $0.name == "src_type" }! + test_src_type(src_type) + + let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! + test_thirdAppDisplayName(thirdAppDisplayName) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) + + // launch + + let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" }! + test_mini_appid(mini_appid, message) + + let mini_path = queryItems.removeFirst { $0.name == "mini_path" }! + test_mini_path(mini_path, message) + + let mini_type = queryItems.removeFirst { $0.name == "mini_type" }! + test_mini_type(mini_type, message) + + logger.debug("\(URLComponents.self), \(queryItems)") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension QQHandlerBaseTests { + + func test_appid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, appNumber) + } +} + +// MARK: Launch - Pasteboard + +extension QQHandlerBaseTests { + + func test_launch(items: [[String: Any]]) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["com.tencent.mqq.api.apiLargeData"] + + logger.debug("\(UIPasteboard.self), \(items.map { $0.keys })") + XCTAssertNil(data) + } +} From 1a91f933b57fcc2e4e14af9bbe3aaefaa303c1d2 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 21:13:59 +0800 Subject: [PATCH 024/123] refactor: ClearStorage --- .../NBus/Model/AppState+ClearStorage.swift | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Example/NBus/Model/AppState+ClearStorage.swift diff --git a/Example/NBus/Model/AppState+ClearStorage.swift b/Example/NBus/Model/AppState+ClearStorage.swift new file mode 100644 index 0000000..280fb2c --- /dev/null +++ b/Example/NBus/Model/AppState+ClearStorage.swift @@ -0,0 +1,49 @@ +// +// AppState+ClearStorage.swift +// BusMock +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import UIKit + +extension AppState { + + func clearKeychains() { + let items = [ + kSecClassGenericPassword, + kSecClassInternetPassword, + kSecClassCertificate, + kSecClassKey, + kSecClassIdentity, + ] + + let status = items + .map { [kSecClass: $0] as CFDictionary } + .map { SecItemDelete($0) } + + assert(status.allSatisfy { + $0 == errSecSuccess || $0 == errSecItemNotFound + }) + } + + func clearPasteboard(shouldSetString: Bool = false) { + let pasteboard = UIPasteboard.general + + pasteboard.items = [] + + if shouldSetString { + pasteboard.string = "NBus" + } + } + + func clearUserDefaults() { + let defaults = UserDefaults.standard + + for (key, _) in defaults.dictionaryRepresentation() { + defaults.removeObject(forKey: key) + } + } +} From 082b0fd4e3ef7bfcfb13eb683607e925386da024 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 21:14:39 +0800 Subject: [PATCH 025/123] refactor: clearStorage --- Example/NBus/AppDelegate.swift | 43 ++------------------- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 2 +- 2 files changed, 4 insertions(+), 41 deletions(-) diff --git a/Example/NBus/AppDelegate.swift b/Example/NBus/AppDelegate.swift index c2f3704..b96e51c 100644 --- a/Example/NBus/AppDelegate.swift +++ b/Example/NBus/AppDelegate.swift @@ -151,49 +151,12 @@ extension AppDelegate { } } -extension AppDelegate { - - private func clearKeychains() { - let items = [ - kSecClassGenericPassword, - kSecClassInternetPassword, - kSecClassCertificate, - kSecClassKey, - kSecClassIdentity, - ] - - let status = items - .map { [kSecClass: $0] as CFDictionary } - .map { SecItemDelete($0) } - - assert(status.allSatisfy { - $0 == errSecSuccess || $0 == errSecItemNotFound - }) - } - - private func clearPasteboard() { - let pasteboard = UIPasteboard.general - - pasteboard.items = [] - - pasteboard.string = "NBus" - } - - private func clearUserDefaults() { - let defaults = UserDefaults.standard - - for (key, _) in defaults.dictionaryRepresentation() { - defaults.removeObject(forKey: key) - } - } -} - extension AppDelegate { private func clearStorage() { - clearKeychains() - clearPasteboard() - clearUserDefaults() +// AppState.shared.clearKeychains() + AppState.shared.clearPasteboard(shouldSetString: true) +// AppState.shared.clearUserDefaults() } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index a407e5f..6b1df8c 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -16,7 +16,7 @@ class QQHandlerBaseTests: HandlerBaseTests { override class func setUp() { super.setUp() - UIPasteboard.general.items = [] + AppState.shared.clearPasteboard() } } From 1e09a14a562b1a68dc31317cf03829785a03f1df Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 21:21:34 +0800 Subject: [PATCH 026/123] refactor: AppState Handler --- Example/NBus/Model/AppState+Handler.swift | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Example/NBus/Model/AppState+Handler.swift diff --git a/Example/NBus/Model/AppState+Handler.swift b/Example/NBus/Model/AppState+Handler.swift new file mode 100644 index 0000000..e7ef765 --- /dev/null +++ b/Example/NBus/Model/AppState+Handler.swift @@ -0,0 +1,56 @@ +// +// AppState+Handler.swift +// NBus +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import NBus + +extension AppState { + + static let wechatSDKHandler = WechatSDKHandler( + appID: AppState.getAppID(for: Platforms.wechat)!, + universalLink: AppState.getUniversalLink(for: Platforms.wechat)! + ) + + static let wechatHandler = WechatHandler( + appID: AppState.getAppID(for: Platforms.wechat)!, + universalLink: AppState.getUniversalLink(for: Platforms.wechat)! + ) +} + +extension AppState { + + static let qqSDKHandler = QQSDKHandler( + appID: AppState.getAppID(for: Platforms.qq)!, + universalLink: AppState.getUniversalLink(for: Platforms.qq)! + ) + + static let qqHandler = QQHandler( + appID: AppState.getAppID(for: Platforms.qq)!, + universalLink: AppState.getUniversalLink(for: Platforms.qq)! + ) +} + +extension AppState { + + static let weiboSDKHandler = WeiboSDKHandler( + appID: AppState.getAppID(for: Platforms.weibo)!, + universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, + redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! + ) + + static let weiboHandler = WeiboHandler( + appID: AppState.getAppID(for: Platforms.weibo)!, + universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, + redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! + ) +} + +extension AppState { + + static let systemHandler = SystemHandler() +} From bc9479e5766a1c09ccaec1c7b21e7d0a98ac6ece Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 1 Apr 2022 21:22:09 +0800 Subject: [PATCH 027/123] refactor: setup handler --- Example/NBus/Model/AppState+Setup.swift | 48 ++++------------------ Tests/NBusTests/QQ/QQSDKHandlerTests.swift | 7 +--- 2 files changed, 8 insertions(+), 47 deletions(-) diff --git a/Example/NBus/Model/AppState+Setup.swift b/Example/NBus/Model/AppState+Setup.swift index 78b5506..54a2782 100644 --- a/Example/NBus/Model/AppState+Setup.swift +++ b/Example/NBus/Model/AppState+Setup.swift @@ -16,22 +16,12 @@ extension AppState { } private func setupWechatItem() -> PlatformItem { - let wechatSDKHandler = WechatSDKHandler( - appID: AppState.getAppID(for: Platforms.wechat)!, - universalLink: AppState.getUniversalLink(for: Platforms.wechat)! - ) - - let wechatHandler = WechatHandler( - appID: AppState.getAppID(for: Platforms.wechat)!, - universalLink: AppState.getUniversalLink(for: Platforms.wechat)! - ) - let wechatItem = AppState.PlatformItem( platform: Platforms.wechat, category: .sdk, handlers: [ - .bus: wechatHandler, - .sdk: wechatSDKHandler, + .bus: Self.wechatHandler, + .sdk: Self.wechatSDKHandler, ], viewController: { PlatformViewController() } ) @@ -40,22 +30,12 @@ extension AppState { } private func setupQQItem() -> PlatformItem { - let qqSDKHandler = QQSDKHandler( - appID: AppState.getAppID(for: Platforms.qq)!, - universalLink: AppState.getUniversalLink(for: Platforms.qq)! - ) - - let qqHandler = QQHandler( - appID: AppState.getAppID(for: Platforms.qq)!, - universalLink: AppState.getUniversalLink(for: Platforms.qq)! - ) - let qqItem = AppState.PlatformItem( platform: Platforms.qq, category: .sdk, handlers: [ - .bus: qqHandler, - .sdk: qqSDKHandler, + .bus: Self.qqHandler, + .sdk: Self.qqSDKHandler, ], viewController: { PlatformViewController() } ) @@ -64,24 +44,12 @@ extension AppState { } private func setupWeiboItem() -> PlatformItem { - let weiboSDKHandler = WeiboSDKHandler( - appID: AppState.getAppID(for: Platforms.weibo)!, - universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, - redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! - ) - - let weiboHandler = WeiboHandler( - appID: AppState.getAppID(for: Platforms.weibo)!, - universalLink: AppState.getUniversalLink(for: Platforms.weibo)!, - redirectLink: AppState.getRedirectLink(for: Platforms.weibo)! - ) - let weiboItem = AppState.PlatformItem( platform: Platforms.weibo, category: .sdk, handlers: [ - .bus: weiboHandler, - .sdk: weiboSDKHandler, + .bus: Self.weiboHandler, + .sdk: Self.weiboSDKHandler, ], viewController: { PlatformViewController() } ) @@ -90,13 +58,11 @@ extension AppState { } private func setupSystemItem() -> PlatformItem { - let systemHandler = SystemHandler() - let systemItem = AppState.PlatformItem( platform: Platforms.system, category: .bus, handlers: [ - .bus: systemHandler, + .bus: Self.systemHandler, ], viewController: { PlatformViewController() } ) diff --git a/Tests/NBusTests/QQ/QQSDKHandlerTests.swift b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift index 662e8f2..90faf9f 100644 --- a/Tests/NBusTests/QQ/QQSDKHandlerTests.swift +++ b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift @@ -11,12 +11,7 @@ import Foundation class QQSDKHandlerTests: QQHandlerBaseTests { - static let qqSDKHandler = QQSDKHandler( - appID: AppState.getAppID(for: Platforms.qq)!, - universalLink: AppState.getUniversalLink(for: Platforms.qq)! - ) - - override class var handler: HandlerType { qqSDKHandler } + override class var handler: HandlerType { AppState.qqSDKHandler } override class var category: AppState.PlatformItem.Category { .sdk } } From 0f0741c227d618dcf538a7249610c0e20db612bc Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 01:15:59 +0800 Subject: [PATCH 028/123] feat: wechatImage --- Example/NBus/Model/MediaSource.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Example/NBus/Model/MediaSource.swift b/Example/NBus/Model/MediaSource.swift index b7ce253..7ea03d5 100644 --- a/Example/NBus/Model/MediaSource.swift +++ b/Example/NBus/Model/MediaSource.swift @@ -39,6 +39,13 @@ enum MediaSource { ) }() + static let wechatImage: MessageType = Messages.image( + data: defaultThumbnail, + title: defaultTitle, + description: defaultDescription, + thumbnail: defaultThumbnail + ) + static let gif: MessageType = Messages.image( data: defaultGIF, title: defaultTitle, From 5f5f0453eca8f72d390b24606d72cfa30ba856ba Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 01:30:46 +0800 Subject: [PATCH 029/123] feat: WechatHandlerBaseTests with share test --- .../Wechat/WechatHandlerBaseTests.swift | 704 ++++++++++++++++++ 1 file changed, 704 insertions(+) create mode 100644 Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift new file mode 100644 index 0000000..1f9f5a7 --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -0,0 +1,704 @@ +// +// WechatHandlerBaseTests.swift +// BusTests +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +class WechatHandlerBaseTests: HandlerBaseTests { + + override class func setUp() { + super.setUp() + + AppState.shared.clearPasteboard() + } +} + +// MARK: - Helper + +extension WechatHandlerBaseTests { + + var appID: String { + switch Self.handler { + case let handler as WechatSDKHandler: + return handler.appID + case let handler as WechatHandler: + return handler.appID + default: + fatalError() + } + } + + var bundleID: String { + Bundle.main.bus.identifier! + } + + var sdkVersion: String { + "1.9.2" + } + + var universalLink: URL { + switch Self.handler { + case let handler as WechatSDKHandler: + return handler.universalLink + case let handler as WechatHandler: + return handler.universalLink + default: + fatalError() + } + } +} + +// MARK: - Share + +extension WechatHandlerBaseTests { + + func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_share(url: url, message, endpoint) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_share(items: items, message, endpoint) + }) + .disposed(by: disposeBag) + + Bus.shared.share( + message: message, + to: endpoint, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case let .failure(error): + logger.error("\(error)") + + if message.identifier == Messages.file, endpoint == Endpoints.Wechat.timeline { + XCTAssertTrue(true) + } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Wechat.timeline { + XCTAssertTrue(true) + } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Wechat.favorite { + XCTAssertTrue(true) + } else { + XCTAssertTrue(false) + } + } + } + ) + } + + func test_share_text_friend() { + test_share(MediaSource.text, Endpoints.Wechat.friend) + } + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Wechat.timeline) + } + + func test_share_text_favorite() { + test_share(MediaSource.text, Endpoints.Wechat.favorite) + } + + func test_share_image_friend() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.friend) + } + + func test_share_image_timeline() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.timeline) + } + + func test_share_image_favorite() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.favorite) + } + + func test_share_audio_friend() { + test_share(MediaSource.audio, Endpoints.Wechat.friend) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Wechat.timeline) + } + + func test_share_audio_favorite() { + test_share(MediaSource.audio, Endpoints.Wechat.favorite) + } + + func test_share_video_friend() { + test_share(MediaSource.video, Endpoints.Wechat.friend) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Wechat.timeline) + } + + func test_share_video_favorite() { + test_share(MediaSource.video, Endpoints.Wechat.favorite) + } + + func test_share_webPage_friend() { + test_share(MediaSource.webPage, Endpoints.Wechat.friend) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Wechat.timeline) + } + + func test_share_webPage_favorite() { + test_share(MediaSource.webPage, Endpoints.Wechat.favorite) + } + + func test_share_file_friend() { + test_share(MediaSource.file, Endpoints.Wechat.friend) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Wechat.timeline) + } + + func test_share_file_favorite() { + test_share(MediaSource.file, Endpoints.Wechat.favorite) + } + + func test_share_miniProgram_friend() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.friend) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.timeline) + } + + func test_share_miniProgram_favorite() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.favorite) + } +} + +// MARK: Share - UniversalLink + +extension WechatHandlerBaseTests { + + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "help.wechat.com") + + let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! + test_wechat_app_bundleId(wechat_app_bundleId) + + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map { $0.name }.sorted())") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID) + } + + func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!.count, 64) + } +} + +// MARK: Share - Pasteboard + +extension WechatHandlerBaseTests { + + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["content"] as! Data + let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + var dictionary = plist[appID] as! [String: Any] + + // GeneralPasteboard + + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result(result) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let sdkver = dictionary.removeValue(forKey: "sdkver") as! String + test_sdkver(sdkver) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + + // SharePasteboard + + let command = dictionary.removeValue(forKey: "command") as! String + test_command(command, message) + + let scene = dictionary.removeValue(forKey: "scene") as! String + test_scene(scene, endpoint) + + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + + // shareMedia + + let appbrandissecrectmessage = dictionary.removeValue(forKey: "appbrandissecrectmessage") as? Bool + test_appbrandissecrectmessage(appbrandissecrectmessage, message) + + let appbrandisupdatablemessage = dictionary.removeValue(forKey: "appbrandisupdatablemessage") as? Bool + test_appbrandisupdatablemessage(appbrandisupdatablemessage, message) + + let description = dictionary.removeValue(forKey: "description") as? String + test_description(description, message) + + let disableForward = dictionary.removeValue(forKey: "disableForward") as? Bool + test_disableForward(disableForward, message) + + let miniprogramType = dictionary.removeValue(forKey: "miniprogramType") as? Int + test_miniprogramType(miniprogramType, message) + + let musicVideoDuration = dictionary.removeValue(forKey: "musicVideoDuration") as? String + test_musicVideoDuration(musicVideoDuration, message) + + let musicVideoIssueData = dictionary.removeValue(forKey: "musicVideoIssueData") as? String + test_musicVideoIssueData(musicVideoIssueData, message) + + let objectType = dictionary.removeValue(forKey: "objectType") as? String + test_objectType(objectType, message) + + let thumbData = dictionary.removeValue(forKey: "thumbData") as? Data + test_thumbData(thumbData, message) + + let weworkObjectSubType = dictionary.removeValue(forKey: "weworkObjectSubType") as? String + test_weworkObjectSubType(weworkObjectSubType, message) + + let withShareTicket = dictionary.removeValue(forKey: "withShareTicket") as? Bool + test_withShareTicket(withShareTicket, message) + + // share + + let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String + test_appBrandPath(appBrandPath, message) + + let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String + test_appBrandUserName(appBrandUserName, message) + + let fileData = dictionary.removeValue(forKey: "fileData") as? Data + test_fileData(fileData, message) + + let fileExt = dictionary.removeValue(forKey: "fileExt") as? String + test_fileExt(fileExt, message) + + let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data + test_hdThumbData(hdThumbData, message) + + let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String + test_mediaDataUrl(mediaDataUrl, message) + + let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String + test_mediaUrl(mediaUrl, message) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_appbrandissecrectmessage(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_appbrandisupdatablemessage(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_appBrandPath(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.path) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_appBrandUserName(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.miniProgramID) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_command(_ value: String, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(value, "1020") + case Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(value, "1010") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_description(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.description) + case let message as AudioMessage: + XCTAssertEqual(value!, message.description) + case let message as VideoMessage: + XCTAssertEqual(value!, message.description) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.description) + case let message as FileMessage: + XCTAssertEqual(value!, message.description) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.description) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_disableForward(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_fileData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value, message.data) + case let message as FileMessage: + XCTAssertEqual(value, message.data) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_fileExt(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as FileMessage: + XCTAssertEqual(value, message.fileExtension) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_hdThumbData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_isAutoResend(_ value: Bool) { + XCTAssertEqual(value, false) + } + + func test_mediaDataUrl(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as AudioMessage: + XCTAssertEqual(value!, message.dataLink?.absoluteString) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_mediaUrl(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as AudioMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as VideoMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.link.absoluteString) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_miniprogramType(_ value: Int?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, 0) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoDuration(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_objectType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage: + XCTAssertEqual(value!, "2") + case is AudioMessage: + XCTAssertEqual(value!, "3") + case is VideoMessage: + XCTAssertEqual(value!, "4") + case is WebPageMessage: + XCTAssertEqual(value!, "5") + case is FileMessage: + XCTAssertEqual(value!, "6") + case is MiniProgramMessage: + XCTAssertEqual(value!, "36") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_result(_ value: String) { + XCTAssertEqual(value, "1") + } + + func test_returnFromApp(_ value: String) { + XCTAssertEqual(value, "0") + } + + func test_scene(_ value: String, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.Wechat.friend: + XCTAssertEqual(value, "0") + case Endpoints.Wechat.timeline: + XCTAssertEqual(value, "1") + case Endpoints.Wechat.favorite: + XCTAssertEqual(value, "2") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_sdkver(_ value: String) { + XCTAssertEqual(value, sdkVersion) + } + + func test_thumbData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as FileMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_title(_ value: String, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(value, message.text) + case let message as ImageMessage: + XCTAssertEqual(value, message.title) + case let message as AudioMessage: + XCTAssertEqual(value, message.title) + case let message as VideoMessage: + XCTAssertEqual(value, message.title) + case let message as WebPageMessage: + XCTAssertEqual(value, message.title) + case let message as FileMessage: + XCTAssertEqual(value, message.title) + case let message as MiniProgramMessage: + XCTAssertEqual(value, message.title) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_universalLink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } + + func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_withShareTicket(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } +} From 66ec226ecf42e5fae52a40f12d3883ee95b64909 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 01:30:55 +0800 Subject: [PATCH 030/123] feat: WechatSDKHandlerTests --- .../Wechat/WechatSDKHandlerTests.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift diff --git a/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift b/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift new file mode 100644 index 0000000..b93616f --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift @@ -0,0 +1,17 @@ +// +// WechatSDKHandlerTests.swift +// BusTests +// +// Created by nuomi1 on 2022/4/1. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus + +class WechatSDKHandlerTests: WechatHandlerBaseTests { + + override class var handler: HandlerType { AppState.wechatSDKHandler } + + override class var category: AppState.PlatformItem.Category { .sdk } +} From d577b1f947a5926483aef9d8839b2f12e5dfd5dd Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 01:36:06 +0800 Subject: [PATCH 031/123] feat: add message --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 42 ++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 6b1df8c..5c8c0e8 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -311,12 +311,12 @@ extension QQHandlerBaseTests { case Messages.miniProgram: XCTAssertEqual(queryItem.value!, "64") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } case Endpoints.QQ.timeline: XCTAssertEqual(queryItem.value!, "0") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } } @@ -337,7 +337,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -353,7 +353,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(queryItem!.value!, message.fullName) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -369,7 +369,7 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(queryItem) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -390,7 +390,7 @@ extension QQHandlerBaseTests { case Messages.miniProgram: XCTAssertEqual(queryItem.value!, "news") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } } @@ -406,7 +406,7 @@ extension QQHandlerBaseTests { case let message as AudioMessage: XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -426,7 +426,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.miniProgramID) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -442,7 +442,7 @@ extension QQHandlerBaseTests { case is MiniProgramMessage: XCTAssertEqual(queryItem!.value!, "1") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -458,7 +458,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -485,7 +485,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -501,7 +501,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -518,7 +518,7 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(queryItem!.value!, "url") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -541,7 +541,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -562,7 +562,7 @@ extension QQHandlerBaseTests { Messages.miniProgram: XCTAssertEqual(queryItem.value!, "0") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } case Endpoints.QQ.timeline: switch message.identifier { @@ -574,10 +574,10 @@ extension QQHandlerBaseTests { Messages.webPage: XCTAssertEqual(queryItem.value!, "1") default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem.value)) } } @@ -606,7 +606,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -625,7 +625,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: queryItem?.value)) } } @@ -671,7 +671,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value!, message.data) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: value)) } } @@ -688,7 +688,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value!, message.thumbnail) default: - XCTAssertTrue(false) + XCTAssertTrue(false, String(describing: value)) } } } From a4a336f9a0801494a7c1b1ee418421002998fcae Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 01:43:19 +0800 Subject: [PATCH 032/123] refactor: use Keypath --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 13 +++++++------ Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 5c8c0e8..2f0c1f5 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -273,7 +273,7 @@ extension QQHandlerBaseTests { let url = queryItems.removeFirst { $0.name == "url" } test_url(url, message) - logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems)") + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) } } @@ -653,7 +653,7 @@ extension QQHandlerBaseTests { let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data test_previewimagedata(previewimagedata, message) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys)") + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) } } @@ -758,7 +758,7 @@ extension QQHandlerBaseTests { let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" }! test_pasteboard(pasteboard) - logger.debug("\(URLComponents.self), \(queryItems)") + logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) } } @@ -812,6 +812,7 @@ extension QQHandlerBaseTests { let status_version = object.removeValue(forKey: "status_version") as! String XCTAssertEqual(status_version, statusVersion) + logger.debug("\(URLComponents.self), \(object.keys.sorted())") XCTAssertTrue(object.isEmpty) } } @@ -828,7 +829,7 @@ extension QQHandlerBaseTests { let data = items.first!["com.tencent.mqq.api.apiLargeData"] - logger.debug("\(UIPasteboard.self), \(items.map { $0.keys })") + logger.debug("\(UIPasteboard.self), \(items.map(\.keys))") XCTAssertNil(data) } } @@ -924,7 +925,7 @@ extension QQHandlerBaseTests { let mini_type = queryItems.removeFirst { $0.name == "mini_type" }! test_mini_type(mini_type, message) - logger.debug("\(URLComponents.self), \(queryItems)") + logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) } } @@ -948,7 +949,7 @@ extension QQHandlerBaseTests { let data = items.first!["com.tencent.mqq.api.apiLargeData"] - logger.debug("\(UIPasteboard.self), \(items.map { $0.keys })") + logger.debug("\(UIPasteboard.self), \(items.map(\.keys))") XCTAssertNil(data) } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 1f9f5a7..cf01603 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -202,7 +202,7 @@ extension WechatHandlerBaseTests { let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! test_wechat_auth_context_id(wechat_auth_context_id) - logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map { $0.name }.sorted())") + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) } } From e3c7cf65e0180e141ffe7b888695ae1369e32129 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 10:22:10 +0800 Subject: [PATCH 033/123] fix: test share path --- Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index cf01603..f06cee9 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -202,6 +202,10 @@ extension WechatHandlerBaseTests { let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! test_wechat_auth_context_id(wechat_auth_context_id) + // ShareUniversalLink + + XCTAssertEqual(urlComponents.path, "/app/\(appID)/sendreq/") + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) } From a42def83aa9e706072fee12bc80de243a87a8544 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 10:27:20 +0800 Subject: [PATCH 034/123] feat: WechatHandlerBaseTests with oauth test --- .../Wechat/WechatHandlerBaseTests.swift | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index f06cee9..2320f29 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -706,3 +706,129 @@ extension WechatHandlerBaseTests { } } } + +// MARK: - Oauth + +extension WechatHandlerBaseTests { + + func test_oauth() { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_oauth(url: url) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_oauth(items: items) + }) + .disposed(by: disposeBag) + + Bus.shared.oauth( + with: Platforms.wechat, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } + ) + } +} + +// MARK: Oauth - UniversalLink + +extension WechatHandlerBaseTests { + + func test_oauth(url: URL) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "help.wechat.com") + + let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! + test_wechat_app_bundleId(wechat_app_bundleId) + + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + + // OauthUniversalLink + + XCTAssertEqual(urlComponents.path, "/app/\(appID)/auth/") + + let scope = queryItems.removeFirst { $0.name == "scope" }! + test_scope(scope) + + let state = queryItems.removeFirst { $0.name == "state" }! + test_state(state) + + logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_scope(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "snsapi_userinfo") + } + + func test_state(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "") + } +} + +// MARK: Oauth - Pasteboard + +extension WechatHandlerBaseTests { + + func test_oauth(items: [[String: Any]]) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["content"] as! Data + let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + var dictionary = plist[appID] as! [String: Any] + + // GeneralPasteboard + + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result(result) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let sdkver = dictionary.removeValue(forKey: "sdkver") as! String + test_sdkver(sdkver) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + + // oauth + + let command = dictionary.removeValue(forKey: "command") as! String + test_command(command) + + logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_command(_ value: String) { + XCTAssertEqual(value, "0") + } +} From d8cbf227e4207da09e0d313ea47e3bbfc145c0f7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 10:48:30 +0800 Subject: [PATCH 035/123] feat: WechatHandlerBaseTests with launch test --- .../Wechat/WechatHandlerBaseTests.swift | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 2320f29..c341547 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -832,3 +832,172 @@ extension WechatHandlerBaseTests { XCTAssertEqual(value, "0") } } + +// MARK: - Launch + +extension WechatHandlerBaseTests { + + func test_launch() { + let message = MediaSource.wechatMiniProgram as! MiniProgramMessage + + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_launch(url: url, message) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_launch(items: items) + }) + .disposed(by: disposeBag) + + Bus.shared.launch( + program: message, + with: Platforms.wechat, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } + ) + } +} + +// MARK: Launch - UniversalLink + +extension WechatHandlerBaseTests { + + func test_launch(url: URL, _ message: MessageType) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "help.wechat.com") + + let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! + test_wechat_app_bundleId(wechat_app_bundleId) + + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + + // LaunchUniversalLink + + XCTAssertEqual(urlComponents.path, "/app/\(appID)/jumpWxa/") + + let extMsg = queryItems.removeFirst { $0.name == "extMsg" }! + test_extMsg(extMsg) + + let miniProgramType = queryItems.removeFirst { $0.name == "miniProgramType" }! + test_miniProgramType(miniProgramType, message) + + let path = queryItems.removeFirst { $0.name == "path" }! + test_path(path, message) + + let userName = queryItems.removeFirst { $0.name == "userName" }! + test_userName(userName, message) + + logger.debug("\(URLComponents.self), \(message.identifier), \(queryItems.map(\.name).sorted())") + XCTAssertTrue(queryItems.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_extMsg(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "") + } + + func test_miniProgramType(_ queryItem: URLQueryItem, _ message: MessageType) { + let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in + switch miniProgramType { + case .release: + return "0" + case .test: + return "1" + case .preview: + return "2" + } + } + + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, miniProgramType(message.miniProgramType)) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } + + func test_path(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, message.path) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } + + func test_userName(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, message.miniProgramID) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } +} + +// MARK: Launch - Pasteboard + +extension WechatHandlerBaseTests { + + func test_launch(items: [[String: Any]]) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + let data = items.first!["content"] as! Data + let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + var dictionary = plist[appID] as! [String: Any] + + // GeneralPasteboard + + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result(result) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let sdkver = dictionary.removeValue(forKey: "sdkver") as! String + test_sdkver(sdkver) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + + // oauth + + let command = dictionary.removeValue(forKey: "command") as! String + test_oauth_command(command) + + logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WechatHandlerBaseTests { + + func test_oauth_command(_ value: String) { + XCTAssertEqual(value, "1080") + } +} From 6a92dd18d60a9413328127951e2387cfe96db7bc Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 4 Apr 2022 23:58:06 +0800 Subject: [PATCH 036/123] feat: WeiboHandlerBaseTests with share test --- .../Weibo/WeiboHandlerBaseTests.swift | 533 ++++++++++++++++++ 1 file changed, 533 insertions(+) create mode 100644 Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift new file mode 100644 index 0000000..3ba6613 --- /dev/null +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -0,0 +1,533 @@ +// +// WeiboHandlerBaseTests.swift +// BusTests +// +// Created by nuomi1 on 2022/4/4. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import NBusWeiboSDK +import RxSwift +import XCTest + +class WeiboHandlerBaseTests: HandlerBaseTests { + + override class func setUp() { + super.setUp() + + AppState.shared.clearPasteboard() + } + + lazy var dateFormatter: DateFormatter = { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" + return dateFormatter + }() + + let ulExpectation = XCTestExpectation(description: "Universal Link") + let pbExpectation = XCTestExpectation(description: "Pasteboard") +} + +// MARK: - Helper + +extension WeiboHandlerBaseTests { + + var appID: String { + switch Self.handler { + case let handler as WeiboSDKHandler: + return handler.appID + case let handler as WeiboHandler: + return handler.appID + default: + fatalError() + } + } + + var appNumber: String { + appID.trimmingCharacters(in: .letters) + } + + var bundleID: String { + Bundle.main.bus.identifier! + } + + var sdkShortVersion: String { + "3.3" + } + + var sdkVersion: String { + "003233000" + } + + var universalLink: URL { + switch Self.handler { + case let handler as WeiboSDKHandler: + return handler.universalLink + case let handler as WeiboHandler: + return handler.universalLink + default: + fatalError() + } + } +} + +// MARK: - Share + +extension WeiboHandlerBaseTests { + + func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_share(url: url, message, endpoint) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_share(items: items, message, endpoint) + }) + .disposed(by: disposeBag) + + Bus.shared.share( + message: message, + to: endpoint, + completionHandler: { [unowned self] result in + switch result { + case .success: + XCTAssertTrue(true) + case let .failure(error): + logger.error("\(error)") + + if message.identifier == Messages.file, endpoint == Endpoints.Weibo.timeline { + XCTAssertTrue(true) + + self.ulExpectation.fulfill() + self.pbExpectation.fulfill() + } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Weibo.timeline { + XCTAssertTrue(true) + + self.ulExpectation.fulfill() + self.pbExpectation.fulfill() + } else { + XCTAssertTrue(false) + } + } + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Weibo.timeline) + } + + func test_share_image_timeline() { + test_share(MediaSource.image, Endpoints.Weibo.timeline) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Weibo.timeline) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Weibo.timeline) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Weibo.timeline) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Weibo.timeline) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) + } +} + +// MARK: Share - UniversalLink + +extension WeiboHandlerBaseTests { + + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "open.weibo.com") + + XCTAssertEqual(urlComponents.path, "/weibosdk/request") + + let lfid = queryItems.removeFirst { $0.name == "lfid" }! + test_lfid(lfid) + + let luicode = queryItems.removeFirst { $0.name == "luicode" }! + test_luicode(luicode) + + let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! + test_newVersion(newVersion) + + let objId = queryItems.removeFirst { $0.name == "objId" }! + test_objId(objId) + + let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! + test_sdkversion(sdkversion) + + let urltype = queryItems.removeFirst { $0.name == "urltype" }! + test_urltype(urltype) + + logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +extension WeiboHandlerBaseTests { + + func test_lfid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID) + } + + func test_luicode(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "10000360") + } + + func test_newVersion(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkShortVersion) + } + + func test_objId(_ queryItem: URLQueryItem) { + XCTAssertNotNil(UUID(uuidString: queryItem.value!)) + } + + func test_sdkversion(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkVersion) + } + + func test_urltype(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "link") + } +} + +// MARK: Share - Pasteboard + +extension WeiboHandlerBaseTests { + + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + var items = items as! [[String: Data]] + + test_app(&items, message, endpoint) + + test_sdkVersion(&items, message, endpoint) + + test_transferObject(&items, message, endpoint) + + test_userInfo(&items, message, endpoint) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(items.map { $0.keys.sorted() })") + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } +} + +extension WeiboHandlerBaseTests { + + func test_app(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + let data = items.removeFirst { $0.keys.contains("app") }!["app"]! + var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let aid = dictionary.removeValue(forKey: "aid") as! String + test_aid(aid) + + let appKey = dictionary.removeValue(forKey: "appKey") as! String + test_appKey(appKey) + + let bundleID = dictionary.removeValue(forKey: "bundleID") as! String + test_bundleID(bundleID) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_aid(_ value: String) { + XCTAssertEqual(value.count, 50) + } + + func test_appKey(_ value: String) { + XCTAssertEqual(value, appNumber) + } + + func test_bundleID(_ value: String) { + XCTAssertEqual(value, bundleID) + } + + func test_universalLink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } +} + +extension WeiboHandlerBaseTests { + + func test_sdkVersion(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + let data = items.removeFirst { $0.keys.contains("sdkVersion") }!["sdkVersion"]! + + XCTAssertEqual(data, Data(sdkVersion.utf8)) + } +} + +extension WeiboHandlerBaseTests { + + func test_transferObject(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + let data = items.removeFirst { $0.keys.contains("transferObject") }!["transferObject"]! + var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class(`class`) + + let _message = dictionary.removeValue(forKey: "message") as! [String: Any] + test_message(_message, message, endpoint) + + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_class(_ value: String) { + XCTAssertEqual(value, "WBSendMessageToWeiboRequest") + } + + func test_message(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_message(`class`) + + let imageObject = dictionary.removeValue(forKey: "imageObject") as? [String: Any] + test_imageObject(imageObject, message, endpoint) + + let mediaObject = dictionary.removeValue(forKey: "mediaObject") as? [String: Any] + test_mediaObject(mediaObject, message, endpoint) + + let text = dictionary.removeValue(forKey: "text") as? String + test_text(text, message) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } + + func test_requestID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_message(_ value: String) { + XCTAssertEqual(value, "WBMessageObject") + } + + func test_imageObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage: + XCTAssertNil(value) + case is ImageMessage: + test_image(value!, message, endpoint) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_mediaObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { + switch message { + case is TextMessage, + is ImageMessage: + XCTAssertNil(value) + case is AudioMessage, + is VideoMessage, + is WebPageMessage: + test_media(value!, message, endpoint) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_text(_ value: String?, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(value!, message.text) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage: + XCTAssertNil(value) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_image(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + let imageData = dictionary.removeValue(forKey: "imageData") as! Data + test_imageData(imageData, message) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_imageData(_ value: Data, _ message: MessageType) { + switch message { + case let message as ImageMessage: + XCTAssertEqual(value, message.data) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_media(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_media(`class`) + + let description = dictionary.removeValue(forKey: "description") as! String + test_description(description, message) + + let objectID = dictionary.removeValue(forKey: "objectID") as! String + test_objectID(objectID) + + let thumbnailData = dictionary.removeValue(forKey: "thumbnailData") as! Data + test_thumbnailData(thumbnailData, message) + + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + + let webpageUrl = dictionary.removeValue(forKey: "webpageUrl") as! String + test_webpageUrl(webpageUrl, message) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_media(_ value: String) { + XCTAssertEqual(value, "WBWebpageObject") + } + + func test_description(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.description) + case let message as VideoMessage: + XCTAssertEqual(value, message.description) + case let message as WebPageMessage: + XCTAssertEqual(value, message.description) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_objectID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } + + func test_thumbnailData(_ value: Data, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value, message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(value, message.thumbnail) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_title(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.title) + case let message as VideoMessage: + XCTAssertEqual(value, message.title) + case let message as WebPageMessage: + XCTAssertEqual(value, message.title) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_webpageUrl(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.link.absoluteString) + case let message as VideoMessage: + XCTAssertEqual(value, message.link.absoluteString) + case let message as WebPageMessage: + XCTAssertEqual(value, message.link.absoluteString) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_userInfo(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + let data = items.removeFirst { $0.keys.contains("userInfo") }!["userInfo"]! + var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let startTime = dictionary.removeValue(forKey: "startTime") as! String + test_startTime(startTime) + + logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_startTime(_ value: String) { + XCTAssertNotNil(dateFormatter.date(from: value)) + } +} From 8a1427f1254127d78117fc1905a8249ac34f8b74 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:14:06 +0800 Subject: [PATCH 037/123] feat: WeiboHandlerBaseTests with oauth test --- .../Weibo/WeiboHandlerBaseTests.swift | 164 ++++++++++++++++-- 1 file changed, 154 insertions(+), 10 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 3ba6613..55724d8 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -53,6 +53,17 @@ extension WeiboHandlerBaseTests { Bundle.main.bus.identifier! } + var redirectLink: URL { + switch Self.handler { + case let handler as WeiboSDKHandler: + return handler.redirectLink + case let handler as WeiboHandler: + return handler.redirectLink + default: + fatalError() + } + } + var sdkShortVersion: String { "3.3" } @@ -230,13 +241,13 @@ extension WeiboHandlerBaseTests { var items = items as! [[String: Data]] - test_app(&items, message, endpoint) + test_app(&items) - test_sdkVersion(&items, message, endpoint) + test_sdkVersion(&items) test_transferObject(&items, message, endpoint) - test_userInfo(&items, message, endpoint) + test_userInfo(&items) logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(items.map { $0.keys.sorted() })") XCTAssertTrue(items.isEmpty) @@ -247,7 +258,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_app(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + func test_app(_ items: inout [[String: Data]]) { let data = items.removeFirst { $0.keys.contains("app") }!["app"]! var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] @@ -263,7 +274,7 @@ extension WeiboHandlerBaseTests { let universalLink = dictionary.removeValue(forKey: "universalLink") as! String test_universalLink(universalLink) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) } } @@ -289,7 +300,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_sdkVersion(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + func test_sdkVersion(_ items: inout [[String: Data]]) { let data = items.removeFirst { $0.keys.contains("sdkVersion") }!["sdkVersion"]! XCTAssertEqual(data, Data(sdkVersion.utf8)) @@ -303,7 +314,7 @@ extension WeiboHandlerBaseTests { var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class(`class`) + test_class_share(`class`) let _message = dictionary.removeValue(forKey: "message") as! [String: Any] test_message(_message, message, endpoint) @@ -318,7 +329,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_class(_ value: String) { + func test_class_share(_ value: String) { XCTAssertEqual(value, "WBSendMessageToWeiboRequest") } @@ -513,14 +524,14 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_userInfo(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { + func test_userInfo(_ items: inout [[String: Data]]) { let data = items.removeFirst { $0.keys.contains("userInfo") }!["userInfo"]! var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] let startTime = dictionary.removeValue(forKey: "startTime") as! String test_startTime(startTime) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) } } @@ -531,3 +542,136 @@ extension WeiboHandlerBaseTests { XCTAssertNotNil(dateFormatter.date(from: value)) } } + +// MARK: - Oauth + +extension WeiboHandlerBaseTests { + + func test_oauth() { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_oauth(url: url) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { [unowned self] items in + self.test_oauth(items: items) + }) + .disposed(by: disposeBag) + + Bus.shared.oauth( + with: Platforms.weibo, + completionHandler: { result in + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } +} + +// MARK: Oauth - UniversalLink + +extension WeiboHandlerBaseTests { + + func test_oauth(url: URL) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + // GeneralUniversalLink + + XCTAssertEqual(urlComponents.scheme, "https") + XCTAssertEqual(urlComponents.host, "open.weibo.com") + + XCTAssertEqual(urlComponents.path, "/weibosdk/request") + + let lfid = queryItems.removeFirst { $0.name == "lfid" }! + test_lfid(lfid) + + let luicode = queryItems.removeFirst { $0.name == "luicode" }! + test_luicode(luicode) + + let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! + test_newVersion(newVersion) + + let objId = queryItems.removeFirst { $0.name == "objId" }! + test_objId(objId) + + let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! + test_sdkversion(sdkversion) + + let urltype = queryItems.removeFirst { $0.name == "urltype" }! + test_urltype(urltype) + + logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: Oauth - Pasteboard + +extension WeiboHandlerBaseTests { + + func test_oauth(items: [[String: Any]]) { + if items.isEmpty { + XCTAssertTrue(true) + return + } + + var items = items as! [[String: Data]] + + test_app(&items) + + test_sdkVersion(&items) + + test_transferObject(&items) + + test_userInfo(&items) + + logger.debug("\(UIPasteboard.self), \(items.map { $0.keys.sorted() })") + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } +} + +extension WeiboHandlerBaseTests { + + func test_transferObject(_ items: inout [[String: Data]]) { + let data = items.removeFirst { $0.keys.contains("transferObject") }!["transferObject"]! + var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_oauth(`class`) + + let redirectURI = dictionary.removeValue(forKey: "redirectURI") as! String + test_redirectURI(redirectURI) + + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + + logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_oauth(_ value: String) { + XCTAssertEqual(value, "WBAuthorizeRequest") + } + + func test_redirectURI(_ value: String) { + XCTAssertEqual(value, redirectLink.absoluteString) + } +} From 557d4b2d2a2d70792755937aad8cf21f92e7d00a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:14:16 +0800 Subject: [PATCH 038/123] feat: WeiboSDKHandlerTests --- .../NBusTests/Weibo/WeiboSDKHandlerTests.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift diff --git a/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift b/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift new file mode 100644 index 0000000..e68392e --- /dev/null +++ b/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift @@ -0,0 +1,17 @@ +// +// WeiboSDKHandlerTests.swift +// BusTests +// +// Created by nuomi1 on 2022/4/4. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus + +class WeiboSDKHandlerTests: WeiboHandlerBaseTests { + + override class var handler: HandlerType { AppState.weiboSDKHandler } + + override class var category: AppState.PlatformItem.Category { .sdk } +} From 326fac74fb916e9fa5b4a2a390154e8c2d5cb478 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:34:40 +0800 Subject: [PATCH 039/123] feat: AppState with Notification --- .../NBus/Model/AppState+Notification.swift | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Example/NBus/Model/AppState+Notification.swift diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift new file mode 100644 index 0000000..5206c1d --- /dev/null +++ b/Example/NBus/Model/AppState+Notification.swift @@ -0,0 +1,35 @@ +// +// AppState+Notification.swift +// NBus +// +// Created by nuomi1 on 2022/4/5. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation + +#if BusTestsTarget +class AppState { + + static let shared = AppState() + + private init() {} +} +#endif + +extension AppState { + + enum OpenURL { + static let requestName = Notification.Name("Bus.OpenURL") + static let responseName = Notification.Name("Bus.OpenURL.Result") + static let requestKey = "url" + static let responseKey = "result" + } + + enum OpenUserActivity { + static let requestName = Notification.Name("Bus.OpenUserActivity") + static let responseName = Notification.Name("Bus.OpenUserActivity.Result") + static let requestKey = "userActivity" + static let responseKey = "result" + } +} From 726eebf9f9dbe2d376b7172091ac1dc60f2aac5d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:36:52 +0800 Subject: [PATCH 040/123] feat: handle openURL and openUserActivity in XCTest --- Example/NBus/AppDelegateSDK.swift | 79 ++++++++++++++++++++++++++ Tests/NBusTests/HandlerBaseTests.swift | 32 +++++++++++ 2 files changed, 111 insertions(+) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index cf37839..9daeba2 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -21,6 +21,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? + #if BusTestsTarget + var openURLToken: NSObjectProtocol? + var openUserActivityToken: NSObjectProtocol? + #endif + func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? @@ -64,4 +69,78 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } + + #if BusTestsTarget + func application( + _ app: UIApplication, + open url: URL, + options: [UIApplication.OpenURLOptionsKey: Any] = [:] + ) -> Bool { + let group = DispatchGroup() + + group.enter() + + NotificationCenter.default.post( + name: AppState.OpenURL.requestName, + object: nil, + userInfo: [ + AppState.OpenURL.requestKey: url, + ] + ) + + var result: Bool! + + openURLToken = NotificationCenter.default.addObserver( + forName: AppState.OpenURL.responseName, + object: nil, + queue: nil, + using: { notification in + result = notification.userInfo?[AppState.OpenURL.responseKey] as? Bool + + group.leave() + } + ) + + group.wait() + openURLToken = nil + + return result + } + + func application( + _ application: UIApplication, + continue userActivity: NSUserActivity, + restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void + ) -> Bool { + let group = DispatchGroup() + + group.enter() + + NotificationCenter.default.post( + name: AppState.OpenUserActivity.requestName, + object: nil, + userInfo: [ + AppState.OpenUserActivity.requestKey: userActivity, + ] + ) + + var result: Bool! + + openUserActivityToken = NotificationCenter.default.addObserver( + forName: AppState.OpenUserActivity.responseName, + object: nil, + queue: nil, + using: { notification in + result = notification.userInfo?[AppState.OpenUserActivity.responseKey] as? Bool + + group.leave() + } + ) + + group.wait() + openUserActivityToken = nil + + return result + } + #endif } diff --git a/Tests/NBusTests/HandlerBaseTests.swift b/Tests/NBusTests/HandlerBaseTests.swift index 0a6ba50..b2043c1 100644 --- a/Tests/NBusTests/HandlerBaseTests.swift +++ b/Tests/NBusTests/HandlerBaseTests.swift @@ -27,6 +27,38 @@ class HandlerBaseTests: XCTestCase { override class func setUp() { super.setUp() + NotificationCenter.default.rx + .notification(AppState.OpenURL.requestName) + .bind(onNext: { notification in + let url = notification.userInfo?[AppState.OpenURL.requestKey] as! URL + let result = Bus.shared.openURL(url) + + NotificationCenter.default.post( + name: AppState.OpenURL.responseName, + object: nil, + userInfo: [ + AppState.OpenURL.responseKey: result, + ] + ) + }) + .disposed(by: disposeBag) + + NotificationCenter.default.rx + .notification(AppState.OpenUserActivity.requestName) + .bind(onNext: { notification in + let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestKey] as! NSUserActivity + let result = Bus.shared.openUserActivity(userActivity) + + NotificationCenter.default.post( + name: AppState.OpenUserActivity.responseName, + object: nil, + userInfo: [ + AppState.OpenUserActivity.responseKey: result, + ] + ) + }) + .disposed(by: disposeBag) + UIApplication.shared.rx .canOpenURL() .bind(onNext: { url in From b25b49e5253e2c363515d47f2855ab49d798cfae Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:37:18 +0800 Subject: [PATCH 041/123] fix: title and message --- Example/NBus/AppDelegateSDK.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index 9daeba2..eb69e4f 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -49,6 +49,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { #elseif BusMockWeiboSDK let title = "isWeiboAppInstalled" let message = "\(WeiboSDK.isWeiboAppInstalled())" + #elseif BusTestsTarget + let title = "Empty" + let message = "Empty" #else #error("ERROR") let title = "ERROR" From aadde1d157726390c85f05609c7807286c2fa648 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:37:43 +0800 Subject: [PATCH 042/123] feat: redirectLink mask public --- Sources/NBusWeiboHandler/WeiboHandler.swift | 2 +- Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/NBusWeiboHandler/WeiboHandler.swift b/Sources/NBusWeiboHandler/WeiboHandler.swift index 5fd811d..364e9a0 100644 --- a/Sources/NBusWeiboHandler/WeiboHandler.swift +++ b/Sources/NBusWeiboHandler/WeiboHandler.swift @@ -34,7 +34,7 @@ public class WeiboHandler { public let appID: String public let universalLink: URL - private let redirectLink: URL + public let redirectLink: URL private lazy var dateFormatter: DateFormatter = { let dateFormatter = DateFormatter() diff --git a/Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift b/Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift index a1d6275..46c6a48 100644 --- a/Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift +++ b/Sources/NBusWeiboSDKHandler/WeiboSDKHandler.swift @@ -30,7 +30,7 @@ public class WeiboSDKHandler { public let appID: String public let universalLink: URL - private let redirectLink: URL + public let redirectLink: URL private var coordinator: Coordinator! From f5acc2c1282816c9a9fa8d6120e590a183b97a3f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:38:47 +0800 Subject: [PATCH 043/123] fix: privacy agreement --- Sources/NBusQQSDKHandler/QQSDKHandler.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/NBusQQSDKHandler/QQSDKHandler.swift b/Sources/NBusQQSDKHandler/QQSDKHandler.swift index 7a38829..eea040c 100644 --- a/Sources/NBusQQSDKHandler/QQSDKHandler.swift +++ b/Sources/NBusQQSDKHandler/QQSDKHandler.swift @@ -47,6 +47,8 @@ public class QQSDKHandler { coordinator = Coordinator(owner: self) + TencentOAuth.setIsUserAgreedAuthorization(true) + oauthCoordinator = TencentOAuth( appId: appID.trimmingCharacters(in: .letters), enableUniveralLink: true, From 55bcf730fed3ab8ab43ae7975ad224e4664211f0 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:39:00 +0800 Subject: [PATCH 044/123] fix: force unwrap --- Sources/NBusQQSDKHandler/QQSDKHandler.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/NBusQQSDKHandler/QQSDKHandler.swift b/Sources/NBusQQSDKHandler/QQSDKHandler.swift index eea040c..31591a7 100644 --- a/Sources/NBusQQSDKHandler/QQSDKHandler.swift +++ b/Sources/NBusQQSDKHandler/QQSDKHandler.swift @@ -175,7 +175,7 @@ extension QQSDKHandler: ShareHandlerType { case Endpoints.QQ.friend: let cflag = self.cflag(endpoint, message.identifier) .reduce(0) { result, flag in result | flag.rawValue } - request.apiObject.cflag |= UInt64(cflag) + request.apiObject?.cflag |= UInt64(cflag) code = QQApiInterface.send(request) case Endpoints.QQ.timeline: code = QQApiInterface.sendReq(toQZone: request) From 6e6bf0870cf9b34f82e1f1ded55ee0e6a422cdb3 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:39:20 +0800 Subject: [PATCH 045/123] fix: privacy agreement --- Sources/NBusQQSDKHandler/QQSDKHandler.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/NBusQQSDKHandler/QQSDKHandler.swift b/Sources/NBusQQSDKHandler/QQSDKHandler.swift index 31591a7..4e73179 100644 --- a/Sources/NBusQQSDKHandler/QQSDKHandler.swift +++ b/Sources/NBusQQSDKHandler/QQSDKHandler.swift @@ -192,6 +192,8 @@ extension QQSDKHandler: ShareHandlerType { completionHandler(.failure(.invalidParameter)) case .EQQAPIVERSIONNEEDUPDATE: completionHandler(.failure(.unsupportedApplication)) + case .EQQAPI_ERROR_USER_NOT_AGREED_AUTHORIZATION: + completionHandler(.failure(.invalidParameter)) default: busAssertionFailure() completionHandler(.failure(.unknown)) From 3cf993e74ddafec7993a7dbd7b396824ac49ca85 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:39:56 +0800 Subject: [PATCH 046/123] feat: BusTests --- Example/project.yml | 50 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/Example/project.yml b/Example/project.yml index 7c756a7..4dfe272 100644 --- a/Example/project.yml +++ b/Example/project.yml @@ -8,10 +8,17 @@ configFiles: Release: NBus/Config.xcconfig targetTemplates: - BusMockTemplate: - type: application + BusTemplate: platform: iOS deploymentTarget: 10.0 + settings: + base: + SWIFT_VERSION: 5.0 + scheme: {} + BusMockTemplate: + templates: + - BusTemplate + type: application sources: - path: NBus excludes: @@ -25,8 +32,11 @@ targetTemplates: OTHER_SWIFT_FLAGS: - "$(inherited)" - "-D ${target_name}" - SWIFT_VERSION: 5.0 - scheme: {} + BusMockSDKTemplate: + templates: + - BusMockTemplate + sources: + - NBus/AppDelegateSDK.swift packages: Logging: @@ -47,16 +57,32 @@ targets: - package: Logging BusMockQQSDK: templates: - - BusMockTemplate - sources: - - NBus/AppDelegateSDK.swift + - BusMockSDKTemplate BusMockWechatSDK: templates: - - BusMockTemplate - sources: - - NBus/AppDelegateSDK.swift + - BusMockSDKTemplate BusMockWeiboSDK: templates: - - BusMockTemplate + - BusMockSDKTemplate + BusTestsTarget: + templates: + - BusMockSDKTemplate sources: - - NBus/AppDelegateSDK.swift + - path: NBus + includes: + - Model/AppState+Notification.swift + scheme: + testTargets: + - BusTests + BusTests: + templates: + - BusTemplate + type: bundle.unit-test + sources: + - path: ../Tests/NBusTests + - path: NBus/Model + excludes: + - AppState+Setup.swift + dependencies: + - target: BusTestsTarget + - package: Logging From b0974a17dff1ca6b7aa2ed99a8dc3a5a3a74f6fd Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 00:40:08 +0800 Subject: [PATCH 047/123] feat: BusTests --- Example/Podfile | 11 +++++++++++ Example/Podfile.lock | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Example/Podfile b/Example/Podfile index ac4a683..17387e5 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -28,6 +28,17 @@ target "BusMockWeiboSDK" do pod "NBusWeiboSDK" end +target "BusTests" do + pod "NBus/BusHandlers", :path => "../" + pod "NBus/SDKHandlers", :path => "../" + + pod "NBusQQSDK" + pod "NBusWechatSDK" + pod "NBusWeiboSDK" + + pod "RxCocoa" +end + post_install do |installer| installer.pods_project.root_object.attributes["ORGANIZATIONNAME"] = "nuomi1" end diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 5e71d34..50cc4b3 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -79,6 +79,6 @@ SPEC CHECKSUMS: SwiftTrace: affc6601a316add7c299a3916d9f43c286a583ef WoodPeckeriOS: 12ec7f38c695e51cd94a476228888dfe85d9d916 -PODFILE CHECKSUM: 7615e56e197a0fccb1a3d0d7e94e2eb4c3b595fa +PODFILE CHECKSUM: 6385c66dd89179f87fb8def06a91dea9ccde0d51 COCOAPODS: 1.11.2 From 40f6c555451c88508596f1fca29f2fb942928ef6 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 01:02:56 +0800 Subject: [PATCH 048/123] refactor: move compute property to HandlerBaseTests --- Tests/NBusTests/HandlerBaseTests.swift | 41 ++++++++++++++- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 35 +++---------- Tests/NBusTests/QQ/QQSDKHandlerTests.swift | 4 +- .../Wechat/WechatHandlerBaseTests.swift | 25 ++------- .../Wechat/WechatSDKHandlerTests.swift | 4 +- .../Weibo/WeiboHandlerBaseTests.swift | 51 ++++++------------- .../Weibo/WeiboSDKHandlerTests.swift | 4 +- 7 files changed, 72 insertions(+), 92 deletions(-) diff --git a/Tests/NBusTests/HandlerBaseTests.swift b/Tests/NBusTests/HandlerBaseTests.swift index b2043c1..47b490a 100644 --- a/Tests/NBusTests/HandlerBaseTests.swift +++ b/Tests/NBusTests/HandlerBaseTests.swift @@ -13,11 +13,39 @@ import XCTest class HandlerBaseTests: XCTestCase { - class var handler: HandlerType { + var appID: String { fatalError() } - class var category: AppState.PlatformItem.Category { + final var appNumber: String { + appID.trimmingCharacters(in: .letters) + } + + final var bundleID: String { + Bundle.main.bus.identifier! + } + + var category: AppState.PlatformItem.Category { + fatalError() + } + + final var displayName: String { + Bundle.main.bus.displayName! + } + + var handler: HandlerType { + fatalError() + } + + var sdkShortVersion: String { + fatalError() + } + + var sdkVersion: String { + fatalError() + } + + var universalLink: URL { fatalError() } @@ -72,8 +100,17 @@ class HandlerBaseTests: XCTestCase { logger.debug("\(url)") }) .disposed(by: disposeBag) + } +} + +extension HandlerBaseTests { + + override func setUp() { + super.setUp() Bus.shared.handlers = [handler] + + AppState.shared.clearPasteboard() } override func tearDown() { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 2f0c1f5..cd7acdb 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -13,19 +13,8 @@ import XCTest class QQHandlerBaseTests: HandlerBaseTests { - override class func setUp() { - super.setUp() - - AppState.shared.clearPasteboard() - } -} - -// MARK: - Helper - -extension QQHandlerBaseTests { - - var appID: String { - switch Self.handler { + override var appID: String { + switch handler { case let handler as QQSDKHandler: return handler.appID case let handler as QQHandler: @@ -35,23 +24,11 @@ extension QQHandlerBaseTests { } } - var appNumber: String { - appID.trimmingCharacters(in: .letters) - } - - var bundleID: String { - Bundle.main.bus.identifier! - } - - var displayName: String { - Bundle.main.bus.displayName! - } - - var sdkShortVersion: String { + override var sdkShortVersion: String { "3.5.11" } - var sdkVersion: String { + override var sdkVersion: String { "3.5.11_lite" } @@ -71,8 +48,8 @@ extension QQHandlerBaseTests { "QQ\(String(format: "%08llX", (appNumber as NSString).longLongValue))" } - var universalLink: URL { - switch Self.handler { + override var universalLink: URL { + switch handler { case let handler as QQSDKHandler: return handler.universalLink case let handler as QQHandler: diff --git a/Tests/NBusTests/QQ/QQSDKHandlerTests.swift b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift index 90faf9f..762f09d 100644 --- a/Tests/NBusTests/QQ/QQSDKHandlerTests.swift +++ b/Tests/NBusTests/QQ/QQSDKHandlerTests.swift @@ -11,7 +11,7 @@ import Foundation class QQSDKHandlerTests: QQHandlerBaseTests { - override class var handler: HandlerType { AppState.qqSDKHandler } + override var handler: HandlerType { AppState.qqSDKHandler } - override class var category: AppState.PlatformItem.Category { .sdk } + override var category: AppState.PlatformItem.Category { .sdk } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index c341547..71eba1d 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -13,19 +13,8 @@ import XCTest class WechatHandlerBaseTests: HandlerBaseTests { - override class func setUp() { - super.setUp() - - AppState.shared.clearPasteboard() - } -} - -// MARK: - Helper - -extension WechatHandlerBaseTests { - - var appID: String { - switch Self.handler { + override var appID: String { + switch handler { case let handler as WechatSDKHandler: return handler.appID case let handler as WechatHandler: @@ -35,16 +24,12 @@ extension WechatHandlerBaseTests { } } - var bundleID: String { - Bundle.main.bus.identifier! - } - - var sdkVersion: String { + override var sdkVersion: String { "1.9.2" } - var universalLink: URL { - switch Self.handler { + override var universalLink: URL { + switch handler { case let handler as WechatSDKHandler: return handler.universalLink case let handler as WechatHandler: diff --git a/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift b/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift index b93616f..421fa5c 100644 --- a/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift +++ b/Tests/NBusTests/Wechat/WechatSDKHandlerTests.swift @@ -11,7 +11,7 @@ import Foundation class WechatSDKHandlerTests: WechatHandlerBaseTests { - override class var handler: HandlerType { AppState.wechatSDKHandler } + override var handler: HandlerType { AppState.wechatSDKHandler } - override class var category: AppState.PlatformItem.Category { .sdk } + override var category: AppState.PlatformItem.Category { .sdk } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 55724d8..e3523fd 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -14,28 +14,8 @@ import XCTest class WeiboHandlerBaseTests: HandlerBaseTests { - override class func setUp() { - super.setUp() - - AppState.shared.clearPasteboard() - } - - lazy var dateFormatter: DateFormatter = { - let dateFormatter = DateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" - return dateFormatter - }() - - let ulExpectation = XCTestExpectation(description: "Universal Link") - let pbExpectation = XCTestExpectation(description: "Pasteboard") -} - -// MARK: - Helper - -extension WeiboHandlerBaseTests { - - var appID: String { - switch Self.handler { + override var appID: String { + switch handler { case let handler as WeiboSDKHandler: return handler.appID case let handler as WeiboHandler: @@ -45,16 +25,8 @@ extension WeiboHandlerBaseTests { } } - var appNumber: String { - appID.trimmingCharacters(in: .letters) - } - - var bundleID: String { - Bundle.main.bus.identifier! - } - var redirectLink: URL { - switch Self.handler { + switch handler { case let handler as WeiboSDKHandler: return handler.redirectLink case let handler as WeiboHandler: @@ -64,16 +36,16 @@ extension WeiboHandlerBaseTests { } } - var sdkShortVersion: String { + override var sdkShortVersion: String { "3.3" } - var sdkVersion: String { + override var sdkVersion: String { "003233000" } - var universalLink: URL { - switch Self.handler { + override var universalLink: URL { + switch handler { case let handler as WeiboSDKHandler: return handler.universalLink case let handler as WeiboHandler: @@ -82,6 +54,15 @@ extension WeiboHandlerBaseTests { fatalError() } } + + lazy var dateFormatter: DateFormatter = { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" + return dateFormatter + }() + + let ulExpectation = XCTestExpectation(description: "Universal Link") + let pbExpectation = XCTestExpectation(description: "Pasteboard") } // MARK: - Share diff --git a/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift b/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift index e68392e..06b8e1c 100644 --- a/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift +++ b/Tests/NBusTests/Weibo/WeiboSDKHandlerTests.swift @@ -11,7 +11,7 @@ import Foundation class WeiboSDKHandlerTests: WeiboHandlerBaseTests { - override class var handler: HandlerType { AppState.weiboSDKHandler } + override var handler: HandlerType { AppState.weiboSDKHandler } - override class var category: AppState.PlatformItem.Category { .sdk } + override var category: AppState.PlatformItem.Category { .sdk } } From 2cc21de064ea25d0c0e3b5340d69e7f86d867e8c Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 14:02:40 +0800 Subject: [PATCH 049/123] feat: HandlerBaseTestCase --- .../NBusTests/Base/HandlerBaseTestCase.swift | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Tests/NBusTests/Base/HandlerBaseTestCase.swift diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift new file mode 100644 index 0000000..5bbd4be --- /dev/null +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -0,0 +1,99 @@ +// +// HandlerBaseTestCase.swift +// BusTests +// +// Created by nuomi1 on 2022/4/5. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - General - UniversalLink + +protocol GeneralUniversalLinkTestCase: XCTestCase { + + /// Test general universal link scheme + func test_general_ul(scheme: String) + + /// Test general universal link host + func test_general_ul(host: String) + + /// Test general universal link queryItems + func test_general_ul(queryItems: inout [URLQueryItem]) +} + +// MARK: - Share - UniversalLink + +protocol ShareUniversalLinkTestCase: XCTestCase { + + /// Test share universal link path + func test_share_ul(path: String) + + /// Test share universal link queryItems + func test_share_ul(queryItems: inout [URLQueryItem]) +} + +// MARK: - Share - MediaMessage - UniversalLink + +protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { + + /// Test share media message universal link queryItems + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - UniversalLink + +protocol ShareMessageUniversalLinkTestCase: XCTestCase { + + /// Test share message universal link queryItems + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - URL + +protocol ShareURLTestCase: GeneralUniversalLinkTestCase, ShareUniversalLinkTestCase, ShareMediaMessageUniversalLinkTestCase, ShareMessageUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test share universal link + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Pasteboard + +protocol SharePasteboardTestCase: XCTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test share pasteboard + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Completion + +protocol ShareCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test share completion + func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) + + /// Test share avoid error + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool +} + +// MARK: - Share + +protocol ShareTestCase: ShareURLTestCase, SharePasteboardTestCase, ShareCompletionTestCase { + + var disposeBag: DisposeBag { get } +} From 7e3bb67d3f9dfa480ee9f8197c8d7b7887603b4e Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 14:13:49 +0800 Subject: [PATCH 050/123] feat: ShareTestCase --- .../{ => Base}/HandlerBaseTests.swift | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) rename Tests/NBusTests/{ => Base}/HandlerBaseTests.swift (51%) diff --git a/Tests/NBusTests/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift similarity index 51% rename from Tests/NBusTests/HandlerBaseTests.swift rename to Tests/NBusTests/Base/HandlerBaseTests.swift index 47b490a..a80a6be 100644 --- a/Tests/NBusTests/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -52,6 +52,9 @@ class HandlerBaseTests: XCTestCase { static var disposeBag = DisposeBag() var disposeBag = DisposeBag() + let ulExpectation = XCTestExpectation(description: "UniversalLink") + let pbExpectation = XCTestExpectation(description: "Pasteboard") + override class func setUp() { super.setUp() @@ -119,3 +122,95 @@ extension HandlerBaseTests { disposeBag = DisposeBag() } } + +// MARK: - Share + +extension ShareTestCase { + + func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_share(url: url, message, endpoint) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_share(items: items, message, endpoint) + }) + .disposed(by: disposeBag) + + Bus.shared.share( + message: message, + to: endpoint, + completionHandler: { [unowned self] result in + self.test_share(result: result, message, endpoint) + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } +} + +// MARK: - Share - URL + +extension ShareURLTestCase { + + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Share - UniversalLink + + test_share_ul(path: urlComponents.path) + test_share_ul(queryItems: &queryItems) + + // Share - MediaMessage - UniversalLink + + test_share_media_ul(queryItems: &queryItems, message, endpoint) + + // Share - Message - UniversalLink + + test_share_message_ul(queryItems: &queryItems, message, endpoint) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: - Share - Completion + +extension ShareCompletionTestCase { + + func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { + switch result { + case .success: + XCTAssertTrue(true) + case let .failure(error): + logger.error("\(error)") + + if test_share_avoid_error(error, message, endpoint) { + XCTAssertTrue(true) + + ulExpectation.fulfill() + pbExpectation.fulfill() + } else { + XCTAssertTrue(false) + } + } + } +} From 7e02bb5e01785354db59d3619f88a2b0d56e5ab4 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 14:17:36 +0800 Subject: [PATCH 051/123] refactor: QQHandlerBaseTests with ShareTestCase --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 277 ++++++++++---------- 1 file changed, 139 insertions(+), 138 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index cd7acdb..8f6b4e7 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -60,44 +60,48 @@ class QQHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Share +// MARK: - General - UniversalLink + +extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { + + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") + } + + func test_general_ul(host: String) { + XCTAssertEqual(host, "qm.qq.com") + } + + func test_general_ul(queryItems: inout [URLQueryItem]) { + let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! + test_appsign_txid(appsign_txid) + + let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! + test_bundleid(bundleid) + + let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! + test_sdkv(sdkv) + } +} extension QQHandlerBaseTests { - func test_share(_ message: MessageType, _ endpoint: Endpoint) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_share(url: url, message, endpoint) - }) - .disposed(by: disposeBag) + func test_appsign_txid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_share(items: items, message, endpoint) - }) - .disposed(by: disposeBag) + func test_bundleid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) + } - Bus.shared.share( - message: message, - to: endpoint, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case let .failure(error): - logger.error("\(error)") - - if message.identifier == Messages.file, endpoint == Endpoints.QQ.timeline { - XCTAssertTrue(true) - } else { - XCTAssertTrue(false) - } - } - } - ) + func test_sdkv(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkShortVersion) } +} + +// MARK: - Share + +extension QQHandlerBaseTests: ShareTestCase { func test_share_text_friend() { test_share(MediaSource.text, Endpoints.QQ.friend) @@ -156,32 +160,15 @@ extension QQHandlerBaseTests { } } -// MARK: Share - UniversalLink - -extension QQHandlerBaseTests { - - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink +// MARK: - Share - UniversalLink - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "qm.qq.com") +extension QQHandlerBaseTests: ShareUniversalLinkTestCase { - let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! - test_appsign_txid(appsign_txid) - - let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! - test_bundleid(bundleid) - - let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! - test_sdkv(sdkv) - - // ShareUniversalLink - - XCTAssertEqual(urlComponents.path, "/opensdkul/mqqapi/share/to_fri") + func test_share_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") + } + func test_share_ul(queryItems: inout [URLQueryItem]) { let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) @@ -196,15 +183,98 @@ extension QQHandlerBaseTests { let version = queryItems.removeFirst { $0.name == "version" }! test_version(version) + } +} - // share +extension QQHandlerBaseTests { - let cflag = queryItems.removeFirst { $0.name == "cflag" }! - test_cflag(cflag, message, endpoint) + func test_callback_name(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_callback_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "scheme") + } + + func test_src_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "app") + } + + func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) + } + + func test_version(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "1") + } +} + +// MARK: - Share - MediaMessage - UniversalLink +extension QQHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { let description = queryItems.removeFirst { $0.name == "description" } test_description(description, message) + let title = queryItems.removeFirst { $0.name == "title" } + test_title(title, message) + } +} + +extension QQHandlerBaseTests { + + func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } +} + +// MARK: - Share - Message - UniversalLink + +extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + let cflag = queryItems.removeFirst { $0.name == "cflag" }! + test_cflag(cflag, message, endpoint) + let fileName = queryItems.removeFirst { $0.name == "fileName" } test_fileName(fileName, message) @@ -244,35 +314,13 @@ extension QQHandlerBaseTests { let shareType = queryItems.removeFirst { $0.name == "shareType" }! test_shareType(shareType, message, endpoint) - let title = queryItems.removeFirst { $0.name == "title" } - test_title(title, message) - let url = queryItems.removeFirst { $0.name == "url" } test_url(url, message) - - logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) } } extension QQHandlerBaseTests { - func test_appsign_txid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) - } - - func test_bundleid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) - } - - func test_callback_name(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) - } - - func test_callback_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "scheme") - } - func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { switch endpoint { case Endpoints.QQ.friend: @@ -297,27 +345,6 @@ extension QQHandlerBaseTests { } } - func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - func test_fileName(_ queryItem: URLQueryItem?, _ message: MessageType) { switch message { case is TextMessage, @@ -522,10 +549,6 @@ extension QQHandlerBaseTests { } } - func test_sdkv(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkShortVersion) - } - func test_shareType(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { switch endpoint { case Endpoints.QQ.friend: @@ -558,35 +581,6 @@ extension QQHandlerBaseTests { } } - func test_src_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "app") - } - - func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) - } - - func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - func test_url(_ queryItem: URLQueryItem?, _ message: MessageType) { switch message { case is TextMessage, @@ -605,10 +599,6 @@ extension QQHandlerBaseTests { XCTAssertTrue(false, String(describing: queryItem?.value)) } } - - func test_version(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "1") - } } // MARK: Share - Pasteboard @@ -632,6 +622,8 @@ extension QQHandlerBaseTests { logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) + + pbExpectation.fulfill() } } @@ -670,6 +662,15 @@ extension QQHandlerBaseTests { } } +// MARK: - Share - Completion + +extension QQHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline + } +} + // MARK: - Oauth extension QQHandlerBaseTests { From 9b122ba7a2cc86d4189a45c4cfc5287024940534 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 14:21:10 +0800 Subject: [PATCH 052/123] refactor: WechatHandlerBaseTests with ShareTestCase --- .../Wechat/WechatHandlerBaseTests.swift | 122 +++++++++--------- 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 71eba1d..e76ba97 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -40,48 +40,41 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Share +// MARK: - General - UniversalLink -extension WechatHandlerBaseTests { +extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { - func test_share(_ message: MessageType, _ endpoint: Endpoint) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_share(url: url, message, endpoint) - }) - .disposed(by: disposeBag) + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") + } - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_share(items: items, message, endpoint) - }) - .disposed(by: disposeBag) + func test_general_ul(host: String) { + XCTAssertEqual(host, "help.wechat.com") + } - Bus.shared.share( - message: message, - to: endpoint, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case let .failure(error): - logger.error("\(error)") - - if message.identifier == Messages.file, endpoint == Endpoints.Wechat.timeline { - XCTAssertTrue(true) - } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Wechat.timeline { - XCTAssertTrue(true) - } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Wechat.favorite { - XCTAssertTrue(true) - } else { - XCTAssertTrue(false) - } - } - } - ) + func test_general_ul(queryItems: inout [URLQueryItem]) { + let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! + test_wechat_app_bundleId(wechat_app_bundleId) + + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + } +} + +extension WechatHandlerBaseTests { + + func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID) + } + + func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!.count, 64) } +} + +// MARK: - Share + +extension WechatHandlerBaseTests: ShareTestCase { func test_share_text_friend() { test_share(MediaSource.text, Endpoints.Wechat.friend) @@ -168,42 +161,34 @@ extension WechatHandlerBaseTests { } } -// MARK: Share - UniversalLink - -extension WechatHandlerBaseTests { - - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] +// MARK: - Share - UniversalLink - // GeneralUniversalLink +extension WechatHandlerBaseTests: ShareUniversalLinkTestCase { - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "help.wechat.com") - - let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! - test_wechat_app_bundleId(wechat_app_bundleId) + func test_share_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/sendreq/") + } - let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! - test_wechat_auth_context_id(wechat_auth_context_id) + func test_share_ul(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} - // ShareUniversalLink +// MARK: - Share - MediaMessage - UniversalLink - XCTAssertEqual(urlComponents.path, "/app/\(appID)/sendreq/") +extension WechatHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) } } -extension WechatHandlerBaseTests { +// MARK: - Share - Message - UniversalLink - func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID) - } +extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { - func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!.count, 64) + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) } } @@ -309,6 +294,8 @@ extension WechatHandlerBaseTests { logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) + + pbExpectation.fulfill() } } @@ -692,6 +679,17 @@ extension WechatHandlerBaseTests { } } +// MARK: - Share - Completion + +extension WechatHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) + } +} + // MARK: - Oauth extension WechatHandlerBaseTests { From a43082e6dafc48c9ef9c3c418f8c3143e896024f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 14:22:54 +0800 Subject: [PATCH 053/123] refactor: WeiboHandlerBaseTests with ShareTestCase --- .../Weibo/WeiboHandlerBaseTests.swift | 176 ++++++++---------- 1 file changed, 81 insertions(+), 95 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index e3523fd..71da923 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -60,104 +60,21 @@ class WeiboHandlerBaseTests: HandlerBaseTests { dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:SSS" return dateFormatter }() - - let ulExpectation = XCTestExpectation(description: "Universal Link") - let pbExpectation = XCTestExpectation(description: "Pasteboard") } -// MARK: - Share - -extension WeiboHandlerBaseTests { - - func test_share(_ message: MessageType, _ endpoint: Endpoint) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_share(url: url, message, endpoint) - }) - .disposed(by: disposeBag) +// MARK: - General - UniversalLink - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_share(items: items, message, endpoint) - }) - .disposed(by: disposeBag) +extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { - Bus.shared.share( - message: message, - to: endpoint, - completionHandler: { [unowned self] result in - switch result { - case .success: - XCTAssertTrue(true) - case let .failure(error): - logger.error("\(error)") - - if message.identifier == Messages.file, endpoint == Endpoints.Weibo.timeline { - XCTAssertTrue(true) - - self.ulExpectation.fulfill() - self.pbExpectation.fulfill() - } else if message.identifier == Messages.miniProgram, endpoint == Endpoints.Weibo.timeline { - XCTAssertTrue(true) - - self.ulExpectation.fulfill() - self.pbExpectation.fulfill() - } else { - XCTAssertTrue(false) - } - } - } - ) - - wait(for: [ulExpectation, pbExpectation], timeout: 5) + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") } - func test_share_text_timeline() { - test_share(MediaSource.text, Endpoints.Weibo.timeline) + func test_general_ul(host: String) { + XCTAssertEqual(host, "open.weibo.com") } - func test_share_image_timeline() { - test_share(MediaSource.image, Endpoints.Weibo.timeline) - } - - func test_share_audio_timeline() { - test_share(MediaSource.audio, Endpoints.Weibo.timeline) - } - - func test_share_video_timeline() { - test_share(MediaSource.video, Endpoints.Weibo.timeline) - } - - func test_share_webPage_timeline() { - test_share(MediaSource.webPage, Endpoints.Weibo.timeline) - } - - func test_share_file_timeline() { - test_share(MediaSource.file, Endpoints.Weibo.timeline) - } - - func test_share_miniProgram_timeline() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) - } -} - -// MARK: Share - UniversalLink - -extension WeiboHandlerBaseTests { - - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink - - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "open.weibo.com") - - XCTAssertEqual(urlComponents.path, "/weibosdk/request") - + func test_general_ul(queryItems: inout [URLQueryItem]) { let lfid = queryItems.removeFirst { $0.name == "lfid" }! test_lfid(lfid) @@ -175,11 +92,6 @@ extension WeiboHandlerBaseTests { let urltype = queryItems.removeFirst { $0.name == "urltype" }! test_urltype(urltype) - - logger.debug("\(URLComponents.self), \(message.identifier), \(endpoint), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() } } @@ -210,6 +122,70 @@ extension WeiboHandlerBaseTests { } } +// MARK: - Share + +extension WeiboHandlerBaseTests: ShareTestCase { + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Weibo.timeline) + } + + func test_share_image_timeline() { + test_share(MediaSource.image, Endpoints.Weibo.timeline) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Weibo.timeline) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Weibo.timeline) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Weibo.timeline) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Weibo.timeline) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) + } +} + +// MARK: - Share - UniversalLink + +extension WeiboHandlerBaseTests: ShareUniversalLinkTestCase { + + func test_share_ul(path: String) { + XCTAssertEqual(path, "/weibosdk/request") + } + + func test_share_ul(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - UniversalLink + +extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - UniversalLink + +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + // MARK: Share - Pasteboard extension WeiboHandlerBaseTests { @@ -524,6 +500,16 @@ extension WeiboHandlerBaseTests { } } +// MARK: - Share - Completion + +extension WeiboHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) + } +} + // MARK: - Oauth extension WeiboHandlerBaseTests { From 80a6c93d1de684844f163a1578abe9aaaebd378a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 17:15:41 +0800 Subject: [PATCH 054/123] refactor: rename ShareCommonUniversalLinkTestCase --- Tests/NBusTests/Base/HandlerBaseTestCase.swift | 18 +++++++++++------- Tests/NBusTests/Base/HandlerBaseTests.swift | 6 +++--- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 8 ++++---- .../Wechat/WechatHandlerBaseTests.swift | 8 ++++---- .../Weibo/WeiboHandlerBaseTests.swift | 8 ++++---- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index 5bbd4be..178bd9d 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -25,15 +25,15 @@ protocol GeneralUniversalLinkTestCase: XCTestCase { func test_general_ul(queryItems: inout [URLQueryItem]) } -// MARK: - Share - UniversalLink +// MARK: - Share - Common - UniversalLink -protocol ShareUniversalLinkTestCase: XCTestCase { +protocol ShareCommonUniversalLinkTestCase: XCTestCase { - /// Test share universal link path - func test_share_ul(path: String) + /// Test share common universal link path + func test_share_common_ul(path: String) - /// Test share universal link queryItems - func test_share_ul(queryItems: inout [URLQueryItem]) + /// Test share common universal link queryItems + func test_share_common_ul(queryItems: inout [URLQueryItem]) } // MARK: - Share - MediaMessage - UniversalLink @@ -54,7 +54,11 @@ protocol ShareMessageUniversalLinkTestCase: XCTestCase { // MARK: - Share - URL -protocol ShareURLTestCase: GeneralUniversalLinkTestCase, ShareUniversalLinkTestCase, ShareMediaMessageUniversalLinkTestCase, ShareMessageUniversalLinkTestCase { +protocol ShareURLTestCase: + GeneralUniversalLinkTestCase, + ShareCommonUniversalLinkTestCase, + ShareMediaMessageUniversalLinkTestCase, + ShareMessageUniversalLinkTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index a80a6be..d1c3c27 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -171,10 +171,10 @@ extension ShareURLTestCase { test_general_ul(host: urlComponents.host!) test_general_ul(queryItems: &queryItems) - // Share - UniversalLink + // Share - Common - UniversalLink - test_share_ul(path: urlComponents.path) - test_share_ul(queryItems: &queryItems) + test_share_common_ul(path: urlComponents.path) + test_share_common_ul(queryItems: &queryItems) // Share - MediaMessage - UniversalLink diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 8f6b4e7..88c3c72 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -160,15 +160,15 @@ extension QQHandlerBaseTests: ShareTestCase { } } -// MARK: - Share - UniversalLink +// MARK: - Share - Common - UniversalLink -extension QQHandlerBaseTests: ShareUniversalLinkTestCase { +extension QQHandlerBaseTests: ShareCommonUniversalLinkTestCase { - func test_share_ul(path: String) { + func test_share_common_ul(path: String) { XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") } - func test_share_ul(queryItems: inout [URLQueryItem]) { + func test_share_common_ul(queryItems: inout [URLQueryItem]) { let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index e76ba97..971951e 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -161,15 +161,15 @@ extension WechatHandlerBaseTests: ShareTestCase { } } -// MARK: - Share - UniversalLink +// MARK: - Share - Common - UniversalLink -extension WechatHandlerBaseTests: ShareUniversalLinkTestCase { +extension WechatHandlerBaseTests: ShareCommonUniversalLinkTestCase { - func test_share_ul(path: String) { + func test_share_common_ul(path: String) { XCTAssertEqual(path, "/app/\(appID)/sendreq/") } - func test_share_ul(queryItems: inout [URLQueryItem]) { + func test_share_common_ul(queryItems: inout [URLQueryItem]) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 71da923..c433423 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -155,15 +155,15 @@ extension WeiboHandlerBaseTests: ShareTestCase { } } -// MARK: - Share - UniversalLink +// MARK: - Share - Common - UniversalLink -extension WeiboHandlerBaseTests: ShareUniversalLinkTestCase { +extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { - func test_share_ul(path: String) { + func test_share_common_ul(path: String) { XCTAssertEqual(path, "/weibosdk/request") } - func test_share_ul(queryItems: inout [URLQueryItem]) { + func test_share_common_ul(queryItems: inout [URLQueryItem]) { XCTAssertTrue(true) } } From 898771cc03b4073eae760db6179f47e02e457fed Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:26:19 +0800 Subject: [PATCH 055/123] refactor: SharePasteboardTestCase --- .../NBusTests/Base/HandlerBaseTestCase.swift | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index 178bd9d..bd9cf3c 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -25,6 +25,14 @@ protocol GeneralUniversalLinkTestCase: XCTestCase { func test_general_ul(queryItems: inout [URLQueryItem]) } +// MARK: - General - Pasteboard + +protocol GeneralPasteboardTestCase: XCTestCase { + + /// Test general pasteboard dictionary + func test_general_pb(dictionary: inout [String: Any]) +} + // MARK: - Share - Common - UniversalLink protocol ShareCommonUniversalLinkTestCase: XCTestCase { @@ -36,6 +44,14 @@ protocol ShareCommonUniversalLinkTestCase: XCTestCase { func test_share_common_ul(queryItems: inout [URLQueryItem]) } +// MARK: - Share - Common - Pasteboard + +protocol ShareCommonPasteboardTestCase: XCTestCase { + + /// Test share common pasteboard dictionary + func test_share_common_pb(dictionary: inout [String: Any]) +} + // MARK: - Share - MediaMessage - UniversalLink protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { @@ -44,6 +60,14 @@ protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } +// MARK: - Share - MediaMessage - Pasteboard + +protocol ShareMediaMessagePasteboardTestCase: XCTestCase { + + /// Test share media message pasteboard dictionary + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + // MARK: - Share - Message - UniversalLink protocol ShareMessageUniversalLinkTestCase: XCTestCase { @@ -52,6 +76,14 @@ protocol ShareMessageUniversalLinkTestCase: XCTestCase { func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } +// MARK: - Share - Message - Pasteboard + +protocol ShareMessagePasteboardTestCase: XCTestCase { + + /// Test share message pasteboard dictionary + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + // MARK: - Share - URL protocol ShareURLTestCase: @@ -69,13 +101,26 @@ protocol ShareURLTestCase: // MARK: - Share - Pasteboard -protocol SharePasteboardTestCase: XCTestCase { +protocol SharePasteboardTestCase: + GeneralPasteboardTestCase, + ShareCommonPasteboardTestCase, + ShareMediaMessagePasteboardTestCase, + ShareMessagePasteboardTestCase { /// Pasteboard expectation var pbExpectation: XCTestExpectation { get } /// Test share pasteboard func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) + + /// Test share pasteboard extract major data + func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] + + /// Test share pasteboard major data + func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) + + /// Test share pasteboard extra data + func test_share_extra_pb(items: inout [[String: Data]]) } // MARK: - Share - Completion From fd723983adfe503f58b4127cfba02dbaa26034e0 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:27:22 +0800 Subject: [PATCH 056/123] feat: SharePasteboardTestCase with default implement --- Tests/NBusTests/Base/HandlerBaseTests.swift | 69 +++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index d1c3c27..d8ada66 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -192,6 +192,75 @@ extension ShareURLTestCase { } } +// MARK: - Share - Pasteboard + +extension SharePasteboardTestCase { + + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_share_major_pb(dictionary: test_share_extract_major_pb(items: &items), message, endpoint) + + test_share_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Share - Comon - Pasteboard + + test_share_common_pb(dictionary: &dictionary) + + // Share - MediaMessage - Pasteboard + + test_share_media_pb(dictionary: &dictionary, message, endpoint) + + // Share - Message - Pasteboard + + test_share_message_pb(dictionary: &dictionary, message, endpoint) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } + + func test_share_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + return dictionary + } + + func test_share_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + + return dictionary + } +} + // MARK: - Share - Completion extension ShareCompletionTestCase { From 26262e7662de73ecf5df8f9b709b1a66ae35f3ae Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:27:46 +0800 Subject: [PATCH 057/123] refactor: QQHandlerBaseTests with SharePasteboardTestCase --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 88 ++++++++++++++------- 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 88c3c72..e175016 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -99,6 +99,15 @@ extension QQHandlerBaseTests { } } +// MARK: - General - Pasteboard + +extension QQHandlerBaseTests: GeneralPasteboardTestCase { + + func test_general_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } +} + // MARK: - Share extension QQHandlerBaseTests: ShareTestCase { @@ -601,61 +610,80 @@ extension QQHandlerBaseTests { } } -// MARK: Share - Pasteboard +// MARK: - Share - Pasteboard -extension QQHandlerBaseTests { +extension QQHandlerBaseTests: SharePasteboardTestCase { - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { - if items.isEmpty { - XCTAssertTrue(true) - return - } + func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_share_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") + } - let data = items.first!["com.tencent.mqq.api.apiLargeData"] as! Data - var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + func test_share_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} - let file_data = dictionary.removeValue(forKey: "file_data") as? Data - test_file_data(file_data, message) +// MARK: - Share - Common - Pasteboard - let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data - test_previewimagedata(previewimagedata, message) +extension QQHandlerBaseTests: ShareCommonPasteboardTestCase { + + func test_share_common_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } +} - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) +// MARK: - Share - MediaMessage - Pasteboard - pbExpectation.fulfill() +extension QQHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data + test_previewimagedata(previewimagedata, message) } } extension QQHandlerBaseTests { - func test_file_data(_ value: Data?, _ message: MessageType) { + func test_previewimagedata(_ value: Data?, _ message: MessageType) { switch message { - case is TextMessage, - is AudioMessage, - is VideoMessage: + case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) case let message as FileMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(value!, message.thumbnail) default: XCTAssertTrue(false, String(describing: value)) } } +} - func test_previewimagedata(_ value: Data?, _ message: MessageType) { +// MARK: - Share - Message - Pasteboard + +extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let file_data = dictionary.removeValue(forKey: "file_data") as? Data + test_file_data(file_data, message) + } +} + +extension QQHandlerBaseTests { + + func test_file_data(_ value: Data?, _ message: MessageType) { switch message { - case is TextMessage: + case is TextMessage, + is AudioMessage, + is VideoMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.data) case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.data) default: XCTAssertTrue(false, String(describing: value)) } From c0c1a0764e49e721f9fa371cd34d48586e76cd69 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:27:58 +0800 Subject: [PATCH 058/123] refactor: WechatHandlerBaseTests with SharePasteboardTestCase --- .../Wechat/WechatHandlerBaseTests.swift | 487 +++++++++--------- 1 file changed, 255 insertions(+), 232 deletions(-) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 971951e..4a93ee6 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -72,6 +72,51 @@ extension WechatHandlerBaseTests { } } +// MARK: - General - Pasteboard + +extension WechatHandlerBaseTests: GeneralPasteboardTestCase { + + func test_general_pb(dictionary: inout [String: Any]) { + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result(result) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let sdkver = dictionary.removeValue(forKey: "sdkver") as! String + test_sdkver(sdkver) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + } +} + +extension WechatHandlerBaseTests { + + func test_isAutoResend(_ value: Bool) { + XCTAssertEqual(value, false) + } + + func test_result(_ value: String) { + XCTAssertEqual(value, "1") + } + + func test_returnFromApp(_ value: String) { + XCTAssertEqual(value, "0") + } + + func test_sdkver(_ value: String) { + XCTAssertEqual(value, sdkVersion) + } + + func test_universalLink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } +} + // MARK: - Share extension WechatHandlerBaseTests: ShareTestCase { @@ -192,50 +237,36 @@ extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { } } -// MARK: Share - Pasteboard +// MARK: - Share - Pasteboard extension WechatHandlerBaseTests { - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { - if items.isEmpty { - XCTAssertTrue(true) - return - } - - let data = items.first!["content"] as! Data - let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] - var dictionary = plist[appID] as! [String: Any] - - // GeneralPasteboard - - let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool - test_isAutoResend(isAutoResend) - - let result = dictionary.removeValue(forKey: "result") as! String - test_result(result) - - let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String - test_returnFromApp(returnFromApp) + func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + let plist = test_share_extract_PropertyList_pb(items: &items, key: "content") + let dictionary = plist[appID] as! [String: Any] - let sdkver = dictionary.removeValue(forKey: "sdkver") as! String - test_sdkver(sdkver) + return dictionary + } - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) + func test_share_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} - // SharePasteboard +// MARK: - Share - Common - Pasteboard - let command = dictionary.removeValue(forKey: "command") as! String - test_command(command, message) +extension WechatHandlerBaseTests: ShareCommonPasteboardTestCase { - let scene = dictionary.removeValue(forKey: "scene") as! String - test_scene(scene, endpoint) + func test_share_common_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } +} - let title = dictionary.removeValue(forKey: "title") as! String - test_title(title, message) +// MARK: - Share - MediaMessage - Pasteboard - // shareMedia +extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let appbrandissecrectmessage = dictionary.removeValue(forKey: "appbrandissecrectmessage") as? Bool test_appbrandissecrectmessage(appbrandissecrectmessage, message) @@ -268,34 +299,6 @@ extension WechatHandlerBaseTests { let withShareTicket = dictionary.removeValue(forKey: "withShareTicket") as? Bool test_withShareTicket(withShareTicket, message) - - // share - - let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String - test_appBrandPath(appBrandPath, message) - - let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String - test_appBrandUserName(appBrandUserName, message) - - let fileData = dictionary.removeValue(forKey: "fileData") as? Data - test_fileData(fileData, message) - - let fileExt = dictionary.removeValue(forKey: "fileExt") as? String - test_fileExt(fileExt, message) - - let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data - test_hdThumbData(hdThumbData, message) - - let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String - test_mediaDataUrl(mediaDataUrl, message) - - let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String - test_mediaUrl(mediaUrl, message) - - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) - - pbExpectation.fulfill() } } @@ -333,76 +336,134 @@ extension WechatHandlerBaseTests { } } - func test_appBrandPath(_ value: String?, _ message: MessageType) { + func test_description(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage, - is ImageMessage, + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.description) + case let message as AudioMessage: + XCTAssertEqual(value!, message.description) + case let message as VideoMessage: + XCTAssertEqual(value!, message.description) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.description) + case let message as FileMessage: + XCTAssertEqual(value!, message.description) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.description) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_disableForward(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage: + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_miniprogramType(_ value: Int?, _ message: MessageType) { + switch message { + case is TextMessage: XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.path) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, 0) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_appBrandUserName(_ value: String?, _ message: MessageType) { + func test_musicVideoDuration(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage, - is ImageMessage, + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage: + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.miniProgramID) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_command(_ value: String, _ message: MessageType) { - switch message.identifier { - case Messages.text: - XCTAssertEqual(value, "1020") - case Messages.image, - Messages.audio, - Messages.video, - Messages.webPage, - Messages.file, - Messages.miniProgram: - XCTAssertEqual(value, "1010") + func test_objectType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage: + XCTAssertEqual(value!, "2") + case is AudioMessage: + XCTAssertEqual(value!, "3") + case is VideoMessage: + XCTAssertEqual(value!, "4") + case is WebPageMessage: + XCTAssertEqual(value!, "5") + case is FileMessage: + XCTAssertEqual(value!, "6") + case is MiniProgramMessage: + XCTAssertEqual(value!, "36") default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_description(_ value: String?, _ message: MessageType) { + func test_thumbData(_ value: Data?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) case let message as AudioMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) case let message as VideoMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) case let message as WebPageMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) case let message as FileMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.thumbnail) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_disableForward(_ value: Bool?, _ message: MessageType) { + func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) @@ -412,46 +473,85 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, false) + XCTAssertEqual(value!, "0") default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_fileData(_ value: Data?, _ message: MessageType) { + func test_withShareTicket(_ value: Bool?, _ message: MessageType) { switch message { - case is TextMessage, + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, + is FileMessage, is MiniProgramMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value, message.data) - case let message as FileMessage: - XCTAssertEqual(value, message.data) + XCTAssertEqual(value!, false) default: XCTAssertTrue(false, "\(String(describing: value))") } } +} - func test_fileExt(_ value: String?, _ message: MessageType) { +// MARK: - Share - Message - Pasteboard + +extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String + test_appBrandPath(appBrandPath, message) + + let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String + test_appBrandUserName(appBrandUserName, message) + + let command = dictionary.removeValue(forKey: "command") as! String + test_command(command, message) + + let fileData = dictionary.removeValue(forKey: "fileData") as? Data + test_fileData(fileData, message) + + let fileExt = dictionary.removeValue(forKey: "fileExt") as? String + test_fileExt(fileExt, message) + + let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data + test_hdThumbData(hdThumbData, message) + + let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String + test_mediaDataUrl(mediaDataUrl, message) + + let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String + test_mediaUrl(mediaUrl, message) + + let scene = dictionary.removeValue(forKey: "scene") as! String + test_scene(scene, endpoint) + + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + } +} + +extension WechatHandlerBaseTests { + + func test_appBrandPath(_ value: String?, _ message: MessageType) { switch message { case is TextMessage, is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is MiniProgramMessage: + is FileMessage: XCTAssertNil(value) - case let message as FileMessage: - XCTAssertEqual(value, message.fileExtension) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.path) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_hdThumbData(_ value: Data?, _ message: MessageType) { + func test_appBrandUserName(_ value: String?, _ message: MessageType) { switch message { case is TextMessage, is ImageMessage, @@ -461,128 +561,112 @@ extension WechatHandlerBaseTests { is FileMessage: XCTAssertNil(value) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.miniProgramID) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_isAutoResend(_ value: Bool) { - XCTAssertEqual(value, false) + func test_command(_ value: String, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(value, "1020") + case Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(value, "1010") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } } - func test_mediaDataUrl(_ value: String?, _ message: MessageType) { + func test_fileData(_ value: Data?, _ message: MessageType) { switch message { case is TextMessage, - is ImageMessage, + is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage, is MiniProgramMessage: XCTAssertNil(value) - case let message as AudioMessage: - XCTAssertEqual(value!, message.dataLink?.absoluteString) + case let message as ImageMessage: + XCTAssertEqual(value, message.data) + case let message as FileMessage: + XCTAssertEqual(value, message.data) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_mediaUrl(_ value: String?, _ message: MessageType) { + func test_fileExt(_ value: String?, _ message: MessageType) { switch message { case is TextMessage, is ImageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as AudioMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as VideoMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.link.absoluteString) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_miniprogramType(_ value: Int?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, 0) + XCTAssertNil(value) + case let message as FileMessage: + XCTAssertEqual(value, message.fileExtension) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_musicVideoDuration(_ value: String?, _ message: MessageType) { + func test_hdThumbData(_ value: Data?, _ message: MessageType) { switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, + case is TextMessage, + is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + func test_mediaDataUrl(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, + case is TextMessage, + is ImageMessage, is VideoMessage, is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertNil(value) + case let message as AudioMessage: + XCTAssertEqual(value!, message.dataLink?.absoluteString) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_objectType(_ value: String?, _ message: MessageType) { + func test_mediaUrl(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage: + case is TextMessage, + is ImageMessage, + is FileMessage: XCTAssertNil(value) - case is ImageMessage: - XCTAssertEqual(value!, "2") - case is AudioMessage: - XCTAssertEqual(value!, "3") - case is VideoMessage: - XCTAssertEqual(value!, "4") - case is WebPageMessage: - XCTAssertEqual(value!, "5") - case is FileMessage: - XCTAssertEqual(value!, "6") - case is MiniProgramMessage: - XCTAssertEqual(value!, "36") + case let message as AudioMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as VideoMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.link.absoluteString) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_result(_ value: String) { - XCTAssertEqual(value, "1") - } - - func test_returnFromApp(_ value: String) { - XCTAssertEqual(value, "0") - } - func test_scene(_ value: String, _ endpoint: Endpoint) { switch endpoint { case Endpoints.Wechat.friend: @@ -596,31 +680,6 @@ extension WechatHandlerBaseTests { } } - func test_sdkver(_ value: String) { - XCTAssertEqual(value, sdkVersion) - } - - func test_thumbData(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - func test_title(_ value: String, _ message: MessageType) { switch message { case let message as TextMessage: @@ -641,42 +700,6 @@ extension WechatHandlerBaseTests { XCTAssertTrue(false, "\(String(describing: value))") } } - - func test_universalLink(_ value: String) { - XCTAssertEqual(value, universalLink.absoluteString) - } - - func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_withShareTicket(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } } // MARK: - Share - Completion From a3688f5e2f0520d2d53618933d96b36dbee9fa3c Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:28:23 +0800 Subject: [PATCH 059/123] refactor: WeiboHandlerBaseTests with SharePasteboardTestCase --- .../Weibo/WeiboHandlerBaseTests.swift | 140 +++++++++++------- 1 file changed, 84 insertions(+), 56 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index c433423..13c72ce 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -122,6 +122,23 @@ extension WeiboHandlerBaseTests { } } +// MARK: - General - Pasteboard + +extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { + + func test_general_pb(dictionary: inout [String: Any]) { + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + } +} + +extension WeiboHandlerBaseTests { + + func test_requestID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } +} + // MARK: - Share extension WeiboHandlerBaseTests: ShareTestCase { @@ -186,38 +203,29 @@ extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { } } -// MARK: Share - Pasteboard +// MARK: - Share - Pasteboard extension WeiboHandlerBaseTests { - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { - if items.isEmpty { - XCTAssertTrue(true) - return - } - - var items = items as! [[String: Data]] + func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_share_extract_KeyedArchiver_pb(items: &items, key: "transferObject") + } + func test_share_extra_pb(items: inout [[String: Data]]) { test_app(&items) test_sdkVersion(&items) - test_transferObject(&items, message, endpoint) - test_userInfo(&items) - - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(items.map { $0.keys.sorted() })") - XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() } } extension WeiboHandlerBaseTests { func test_app(_ items: inout [[String: Data]]) { - let data = items.removeFirst { $0.keys.contains("app") }!["app"]! - var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + var dictionary = test_share_extract_KeyedArchiver_pb(items: &items, key: "app") + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") let aid = dictionary.removeValue(forKey: "aid") as! String test_aid(aid) @@ -231,7 +239,8 @@ extension WeiboHandlerBaseTests { let universalLink = dictionary.removeValue(forKey: "universalLink") as! String test_universalLink(universalLink) - logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) } } @@ -266,33 +275,70 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_transferObject(_ items: inout [[String: Data]], _ message: MessageType, _ endpoint: Endpoint) { - let data = items.removeFirst { $0.keys.contains("transferObject") }!["transferObject"]! - var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + func test_userInfo(_ items: inout [[String: Data]]) { + var dictionary = test_share_extract_KeyedArchiver_pb(items: &items, key: "userInfo") - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_share(`class`) + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - let _message = dictionary.removeValue(forKey: "message") as! [String: Any] - test_message(_message, message, endpoint) + let startTime = dictionary.removeValue(forKey: "startTime") as! String + test_startTime(startTime) - let requestID = dictionary.removeValue(forKey: "requestID") as! String - test_requestID(requestID) + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) } } +extension WeiboHandlerBaseTests { + + func test_startTime(_ value: String) { + XCTAssertNotNil(dateFormatter.date(from: value)) + } +} + +// MARK: - Share - Common - Pasteboard + +extension WeiboHandlerBaseTests: ShareCommonPasteboardTestCase { + + func test_share_common_pb(dictionary: inout [String: Any]) { + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_share(`class`) + } +} + extension WeiboHandlerBaseTests { func test_class_share(_ value: String) { XCTAssertEqual(value, "WBSendMessageToWeiboRequest") } +} + +// MARK: - Share - MediaMessage - Pasteboard + +extension WeiboHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - Pasteboard + +extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let _message = dictionary.removeValue(forKey: "message") as! [String: Any] + test_message(_message, message, endpoint) + } +} + +extension WeiboHandlerBaseTests { func test_message(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = value + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_message(`class`) @@ -305,12 +351,9 @@ extension WeiboHandlerBaseTests { let text = dictionary.removeValue(forKey: "text") as? String test_text(text, message) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) - } + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - func test_requestID(_ value: String) { - XCTAssertNotNil(UUID(uuidString: value)) + XCTAssertTrue(dictionary.isEmpty) } } @@ -368,10 +411,13 @@ extension WeiboHandlerBaseTests { func test_image(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = value + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + let imageData = dictionary.removeValue(forKey: "imageData") as! Data test_imageData(imageData, message) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) } } @@ -393,6 +439,8 @@ extension WeiboHandlerBaseTests { func test_media(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = value + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_media(`class`) @@ -411,7 +459,8 @@ extension WeiboHandlerBaseTests { let webpageUrl = dictionary.removeValue(forKey: "webpageUrl") as! String test_webpageUrl(webpageUrl, message) - logger.debug("\(UIPasteboard.self), \(message.identifier), \(endpoint), \(dictionary.keys.sorted())") + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + XCTAssertTrue(dictionary.isEmpty) } } @@ -479,27 +528,6 @@ extension WeiboHandlerBaseTests { } } -extension WeiboHandlerBaseTests { - - func test_userInfo(_ items: inout [[String: Data]]) { - let data = items.removeFirst { $0.keys.contains("userInfo") }!["userInfo"]! - var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - - let startTime = dictionary.removeValue(forKey: "startTime") as! String - test_startTime(startTime) - - logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_startTime(_ value: String) { - XCTAssertNotNil(dateFormatter.date(from: value)) - } -} - // MARK: - Share - Completion extension WeiboHandlerBaseTests: ShareCompletionTestCase { From 10d0245a80597e2f395a7f776a13d7185c47d286 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 5 Apr 2022 19:29:45 +0800 Subject: [PATCH 060/123] fix: QQSDKHandler sets empty pasteboard --- Tests/NBusTests/Base/HandlerBaseTests.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index d8ada66..b043f64 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -137,6 +137,16 @@ extension ShareTestCase { UIPasteboard.general.rx .items() + .do(onNext: { [unowned self] items in + if + (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) + || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) { + precondition(items.isEmpty) + + self.pbExpectation.fulfill() + } + }) .filter { !$0.isEmpty } .bind(onNext: { [unowned self] items in self.test_share(items: items, message, endpoint) From 17480f542ce8d431f3ca5f4df4c5595dbc99a2fb Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:19:31 +0800 Subject: [PATCH 061/123] refactor: move extract pasteboard data and test extra paste data to GeneralPasteboardTestCase --- .../NBusTests/Base/HandlerBaseTestCase.swift | 12 ++--- Tests/NBusTests/Base/HandlerBaseTests.swift | 53 ++++++++++--------- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 21 +++----- .../Wechat/WechatHandlerBaseTests.swift | 27 ++++------ .../Weibo/WeiboHandlerBaseTests.swift | 31 +++++------ 5 files changed, 68 insertions(+), 76 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index bd9cf3c..c3c321a 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -29,8 +29,14 @@ protocol GeneralUniversalLinkTestCase: XCTestCase { protocol GeneralPasteboardTestCase: XCTestCase { + /// Test pasteboard extract major data + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] + /// Test general pasteboard dictionary func test_general_pb(dictionary: inout [String: Any]) + + /// Test pasteboard extra data + func test_extra_pb(items: inout [[String: Data]]) } // MARK: - Share - Common - UniversalLink @@ -113,14 +119,8 @@ protocol SharePasteboardTestCase: /// Test share pasteboard func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) - /// Test share pasteboard extract major data - func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] - /// Test share pasteboard major data func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) - - /// Test share pasteboard extra data - func test_share_extra_pb(items: inout [[String: Data]]) } // MARK: - Share - Completion diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index b043f64..dc193a3 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -123,6 +123,33 @@ extension HandlerBaseTests { } } +// MARK: - General - Pasteboard + +extension GeneralPasteboardTestCase { + + func test_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + return dictionary + } + + func test_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + + return dictionary + } +} + // MARK: - Share extension ShareTestCase { @@ -211,9 +238,9 @@ extension SharePasteboardTestCase { logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - test_share_major_pb(dictionary: test_share_extract_major_pb(items: &items), message, endpoint) + test_share_major_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) - test_share_extra_pb(items: &items) + test_extra_pb(items: &items) logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") @@ -247,28 +274,6 @@ extension SharePasteboardTestCase { XCTAssertTrue(dictionary.isEmpty) } - - func test_share_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { - let item = items.removeFirst { $0.keys.contains(key) }! - - precondition(item.count == 1) - - let data = item[key]! - let dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - - return dictionary - } - - func test_share_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { - let item = items.removeFirst { $0.keys.contains(key) }! - - precondition(item.count == 1) - - let data = item[key]! - let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] - - return dictionary - } } // MARK: - Share - Completion diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index e175016..cbbbaa8 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -103,9 +103,17 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests: GeneralPasteboardTestCase { + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") + } + func test_general_pb(dictionary: inout [String: Any]) { XCTAssertTrue(true) } + + func test_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } } // MARK: - Share @@ -610,19 +618,6 @@ extension QQHandlerBaseTests { } } -// MARK: - Share - Pasteboard - -extension QQHandlerBaseTests: SharePasteboardTestCase { - - func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_share_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") - } - - func test_share_extra_pb(items: inout [[String: Data]]) { - XCTAssertTrue(true) - } -} - // MARK: - Share - Common - Pasteboard extension QQHandlerBaseTests: ShareCommonPasteboardTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 4a93ee6..0f4d225 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -76,6 +76,13 @@ extension WechatHandlerBaseTests { extension WechatHandlerBaseTests: GeneralPasteboardTestCase { + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + let plist = test_extract_PropertyList_pb(items: &items, key: "content") + let dictionary = plist[appID] as! [String: Any] + + return dictionary + } + func test_general_pb(dictionary: inout [String: Any]) { let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool test_isAutoResend(isAutoResend) @@ -92,6 +99,10 @@ extension WechatHandlerBaseTests: GeneralPasteboardTestCase { let universalLink = dictionary.removeValue(forKey: "universalLink") as! String test_universalLink(universalLink) } + + func test_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } } extension WechatHandlerBaseTests { @@ -237,22 +248,6 @@ extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { } } -// MARK: - Share - Pasteboard - -extension WechatHandlerBaseTests { - - func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - let plist = test_share_extract_PropertyList_pb(items: &items, key: "content") - let dictionary = plist[appID] as! [String: Any] - - return dictionary - } - - func test_share_extra_pb(items: inout [[String: Data]]) { - XCTAssertTrue(true) - } -} - // MARK: - Share - Common - Pasteboard extension WechatHandlerBaseTests: ShareCommonPasteboardTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 13c72ce..37e8eb5 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -126,10 +126,22 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_extract_KeyedArchiver_pb(items: &items, key: "transferObject") + } + func test_general_pb(dictionary: inout [String: Any]) { let requestID = dictionary.removeValue(forKey: "requestID") as! String test_requestID(requestID) } + + func test_extra_pb(items: inout [[String: Data]]) { + test_app(&items) + + test_sdkVersion(&items) + + test_userInfo(&items) + } } extension WeiboHandlerBaseTests { @@ -205,25 +217,10 @@ extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { // MARK: - Share - Pasteboard -extension WeiboHandlerBaseTests { - - func test_share_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_share_extract_KeyedArchiver_pb(items: &items, key: "transferObject") - } - - func test_share_extra_pb(items: inout [[String: Data]]) { - test_app(&items) - - test_sdkVersion(&items) - - test_userInfo(&items) - } -} - extension WeiboHandlerBaseTests { func test_app(_ items: inout [[String: Data]]) { - var dictionary = test_share_extract_KeyedArchiver_pb(items: &items, key: "app") + var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "app") logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -276,7 +273,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { func test_userInfo(_ items: inout [[String: Data]]) { - var dictionary = test_share_extract_KeyedArchiver_pb(items: &items, key: "userInfo") + var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "userInfo") logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") From 7f0085aaec4ff064f7baf8f5f5c04a43f13f16e0 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:24:25 +0800 Subject: [PATCH 062/123] style: move test extra pasteboard below the GeneralPasteboardTestCase --- .../Weibo/WeiboHandlerBaseTests.swift | 130 +++++++++--------- 1 file changed, 64 insertions(+), 66 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 37e8eb5..5d5ba07 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -151,72 +151,6 @@ extension WeiboHandlerBaseTests { } } -// MARK: - Share - -extension WeiboHandlerBaseTests: ShareTestCase { - - func test_share_text_timeline() { - test_share(MediaSource.text, Endpoints.Weibo.timeline) - } - - func test_share_image_timeline() { - test_share(MediaSource.image, Endpoints.Weibo.timeline) - } - - func test_share_audio_timeline() { - test_share(MediaSource.audio, Endpoints.Weibo.timeline) - } - - func test_share_video_timeline() { - test_share(MediaSource.video, Endpoints.Weibo.timeline) - } - - func test_share_webPage_timeline() { - test_share(MediaSource.webPage, Endpoints.Weibo.timeline) - } - - func test_share_file_timeline() { - test_share(MediaSource.file, Endpoints.Weibo.timeline) - } - - func test_share_miniProgram_timeline() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) - } -} - -// MARK: - Share - Common - UniversalLink - -extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { - - func test_share_common_ul(path: String) { - XCTAssertEqual(path, "/weibosdk/request") - } - - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - UniversalLink - -extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Pasteboard - extension WeiboHandlerBaseTests { func test_app(_ items: inout [[String: Data]]) { @@ -293,6 +227,70 @@ extension WeiboHandlerBaseTests { } } +// MARK: - Share + +extension WeiboHandlerBaseTests: ShareTestCase { + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Weibo.timeline) + } + + func test_share_image_timeline() { + test_share(MediaSource.image, Endpoints.Weibo.timeline) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Weibo.timeline) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Weibo.timeline) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Weibo.timeline) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Weibo.timeline) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) + } +} + +// MARK: - Share - Common - UniversalLink + +extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { + + func test_share_common_ul(path: String) { + XCTAssertEqual(path, "/weibosdk/request") + } + + func test_share_common_ul(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - UniversalLink + +extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - UniversalLink + +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + // MARK: - Share - Common - Pasteboard extension WeiboHandlerBaseTests: ShareCommonPasteboardTestCase { From fe05d6be37b4408bce5f4a20466dbf434f4b493d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:32:27 +0800 Subject: [PATCH 063/123] fix: launch command --- Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 0f4d225..8db601f 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -986,10 +986,10 @@ extension WechatHandlerBaseTests { let universalLink = dictionary.removeValue(forKey: "universalLink") as! String test_universalLink(universalLink) - // oauth + // launch let command = dictionary.removeValue(forKey: "command") as! String - test_oauth_command(command) + test_command_launch(command) logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") XCTAssertTrue(dictionary.isEmpty) @@ -998,7 +998,7 @@ extension WechatHandlerBaseTests { extension WechatHandlerBaseTests { - func test_oauth_command(_ value: String) { + func test_command_launch(_ value: String) { XCTAssertEqual(value, "1080") } } From 0cc8370c7dcdf48ff3b34ede9d9a2c17949b3bc7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:33:06 +0800 Subject: [PATCH 064/123] feat: OauthTestCase --- .../NBusTests/Base/HandlerBaseTestCase.swift | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index c3c321a..26fb7a8 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -146,3 +146,72 @@ protocol ShareTestCase: ShareURLTestCase, SharePasteboardTestCase, ShareCompleti var disposeBag: DisposeBag { get } } + +// MARK: - Oauth - Platform - UniversalLink + +protocol OauthPlatformUniversalLinkTestCase: XCTestCase { + + /// Test oauth universal link path + func test_oauth_ul(path: String) + + /// Test oauth universal link queryItems + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) +} + +// MARK: - Oauth - URL + +protocol OauthURLTestCase: + GeneralUniversalLinkTestCase, + OauthPlatformUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test oauth universal link + func test_oauth(url: URL, _ platform: Platform) +} + +// MARK: - Oauth - Platform - Pasteboard + +protocol OauthPlatformPasteboardTestCase: XCTestCase { + + /// Test oauth pasteboard dictionary + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) +} + +// MARK: - Oauth - Pasteboard + +protocol OauthPasteboardTestCase: + GeneralPasteboardTestCase, + OauthPlatformPasteboardTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test oauth pasteboard + func test_oauth(items: [[String: Any]], _ platform: Platform) + + /// Test oauth pasteboard major data + func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) +} + +// MARK: - Oauth - Completion + +protocol OauthCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test oauth completion + func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) +} + +// MARK: - Oauth + +protocol OauthTestCase: OauthURLTestCase, OauthPasteboardTestCase, OauthCompletionTestCase { + + var disposeBag: DisposeBag { get } +} From c81c56f9a20bcc4f03eab2444f82e9194cb01cdc Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:33:35 +0800 Subject: [PATCH 065/123] feat: OauthTestCase implementation --- Tests/NBusTests/Base/HandlerBaseTests.swift | 109 ++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index dc193a3..a455615 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -298,3 +298,112 @@ extension ShareCompletionTestCase { } } } + +// MARK: - Oauth + +extension OauthTestCase { + + func test_oauth(_ platform: Platform) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_oauth(url: url, platform) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_oauth(items: items, platform) + }) + .disposed(by: disposeBag) + + Bus.shared.oauth( + with: platform, + completionHandler: { [unowned self] result in + self.test_oauth(result: result, platform) + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } +} + +extension OauthURLTestCase { + + func test_oauth(url: URL, _ platform: Platform) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Oauth - UniversalLink + + test_oauth_ul(path: urlComponents.path) + test_oauth_ul(queryItems: &queryItems, platform) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +extension OauthPasteboardTestCase { + + func test_oauth(items: [[String: Any]], _ platform: Platform) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_oauth_major_pb(dictionary: test_extract_major_pb(items: &items), platform) + + test_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Oauth - Platform - Pasteboard + + test_oauth_pb(dictionary: &dictionary, platform) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +// MARK: - Oauth - Completion + +extension OauthCompletionTestCase { + + func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) { + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } +} From 4e6613ce9ef1bd7455cf2bd4ef19cb3b6debb9b8 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:33:51 +0800 Subject: [PATCH 066/123] feat: QQHandlerBaseTests with OauthTestCase --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 76 ++++----------------- 1 file changed, 12 insertions(+), 64 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index cbbbaa8..2de6fdc 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -696,71 +696,27 @@ extension QQHandlerBaseTests: ShareCompletionTestCase { // MARK: - Oauth -extension QQHandlerBaseTests { +extension QQHandlerBaseTests: OauthTestCase { func test_oauth() { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_oauth(url: url) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_oauth(items: items) - }) - .disposed(by: disposeBag) - - Bus.shared.oauth( - with: Platforms.qq, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } - ) + test_oauth(Platforms.qq) } } -// MARK: Oauth - UniversalLink - -extension QQHandlerBaseTests { +// MARK: Oauth - Platform - UniversalLink - func test_oauth(url: URL) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink +extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "qm.qq.com") - - let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! - test_appsign_txid(appsign_txid) - - let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! - test_bundleid(bundleid) - - let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! - test_sdkv(sdkv) - - // OauthUniversalLink - - XCTAssertEqual(urlComponents.path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") + func test_oauth_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") + } + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" }! test_objectlocation(objectlocation) let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" }! test_pasteboard(pasteboard) - - logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) } } @@ -818,20 +774,12 @@ extension QQHandlerBaseTests { } } -// MARK: Oauth - Pasteboard - -extension QQHandlerBaseTests { - - func test_oauth(items: [[String: Any]]) { - if items.isEmpty { - XCTAssertTrue(true) - return - } +// MARK: - Oauth - Platform - Pasteboard - let data = items.first!["com.tencent.mqq.api.apiLargeData"] +extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { - logger.debug("\(UIPasteboard.self), \(items.map(\.keys))") - XCTAssertNil(data) + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + XCTAssertTrue(true) } } From dd154fd02c5f77110147713c9f0079b9f6278a51 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:34:00 +0800 Subject: [PATCH 067/123] feat: WechatHandlerBaseTests with OauthTestCase --- .../Wechat/WechatHandlerBaseTests.swift | 98 +++---------------- 1 file changed, 13 insertions(+), 85 deletions(-) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 8db601f..1f43471 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -710,68 +710,27 @@ extension WechatHandlerBaseTests: ShareCompletionTestCase { // MARK: - Oauth -extension WechatHandlerBaseTests { +extension WechatHandlerBaseTests: OauthTestCase { func test_oauth() { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_oauth(url: url) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_oauth(items: items) - }) - .disposed(by: disposeBag) - - Bus.shared.oauth( - with: Platforms.wechat, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } - ) + test_oauth(Platforms.wechat) } } -// MARK: Oauth - UniversalLink - -extension WechatHandlerBaseTests { - - func test_oauth(url: URL) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink +// MARK: - Oauth - Platform - UniversalLink - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "help.wechat.com") +extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! - test_wechat_app_bundleId(wechat_app_bundleId) - - let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! - test_wechat_auth_context_id(wechat_auth_context_id) - - // OauthUniversalLink - - XCTAssertEqual(urlComponents.path, "/app/\(appID)/auth/") + func test_oauth_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/auth/") + } + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { let scope = queryItems.removeFirst { $0.name == "scope" }! test_scope(scope) let state = queryItems.removeFirst { $0.name == "state" }! test_state(state) - - logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) } } @@ -786,50 +745,19 @@ extension WechatHandlerBaseTests { } } -// MARK: Oauth - Pasteboard - -extension WechatHandlerBaseTests { - - func test_oauth(items: [[String: Any]]) { - if items.isEmpty { - XCTAssertTrue(true) - return - } - - let data = items.first!["content"] as! Data - let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] - var dictionary = plist[appID] as! [String: Any] - - // GeneralPasteboard - - let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool - test_isAutoResend(isAutoResend) - - let result = dictionary.removeValue(forKey: "result") as! String - test_result(result) - - let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String - test_returnFromApp(returnFromApp) - - let sdkver = dictionary.removeValue(forKey: "sdkver") as! String - test_sdkver(sdkver) +// MARK: - Oauth - Platform - Pasteboard - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) - - // oauth +extension WechatHandlerBaseTests: OauthPlatformPasteboardTestCase { + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { let command = dictionary.removeValue(forKey: "command") as! String - test_command(command) - - logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) + test_command_oauth(command) } } extension WechatHandlerBaseTests { - func test_command(_ value: String) { + func test_command_oauth(_ value: String) { XCTAssertEqual(value, "0") } } From 31f31563562ce214c63844f6179aab09778fbbaa Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:35:28 +0800 Subject: [PATCH 068/123] feat: WeiboHandlerBaseTests with OauthTestCase --- .../Weibo/WeiboHandlerBaseTests.swift | 109 ++---------------- 1 file changed, 11 insertions(+), 98 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 5d5ba07..cc22366 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -535,123 +535,36 @@ extension WeiboHandlerBaseTests: ShareCompletionTestCase { // MARK: - Oauth -extension WeiboHandlerBaseTests { +extension WeiboHandlerBaseTests: OauthTestCase { func test_oauth() { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_oauth(url: url) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_oauth(items: items) - }) - .disposed(by: disposeBag) - - Bus.shared.oauth( - with: Platforms.weibo, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } - ) - - wait(for: [ulExpectation, pbExpectation], timeout: 5) + test_oauth(Platforms.weibo) } } -// MARK: Oauth - UniversalLink - -extension WeiboHandlerBaseTests { - - func test_oauth(url: URL) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink - - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "open.weibo.com") - - XCTAssertEqual(urlComponents.path, "/weibosdk/request") - - let lfid = queryItems.removeFirst { $0.name == "lfid" }! - test_lfid(lfid) - - let luicode = queryItems.removeFirst { $0.name == "luicode" }! - test_luicode(luicode) - - let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! - test_newVersion(newVersion) - - let objId = queryItems.removeFirst { $0.name == "objId" }! - test_objId(objId) - - let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! - test_sdkversion(sdkversion) +// MARK: - Oauth - Platform -UniversalLink - let urltype = queryItems.removeFirst { $0.name == "urltype" }! - test_urltype(urltype) +extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() + func test_oauth_ul(path: String) { + test_share_common_ul(path: path) } -} - -// MARK: Oauth - Pasteboard - -extension WeiboHandlerBaseTests { - - func test_oauth(items: [[String: Any]]) { - if items.isEmpty { - XCTAssertTrue(true) - return - } - - var items = items as! [[String: Data]] - - test_app(&items) - - test_sdkVersion(&items) - test_transferObject(&items) - - test_userInfo(&items) - - logger.debug("\(UIPasteboard.self), \(items.map { $0.keys.sorted() })") - XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + XCTAssertTrue(true) } } -extension WeiboHandlerBaseTests { +// MARK: - Oauth - Platform - Pasteboard - func test_transferObject(_ items: inout [[String: Data]]) { - let data = items.removeFirst { $0.keys.contains("transferObject") }!["transferObject"]! - var dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] +extension WeiboHandlerBaseTests: OauthPlatformPasteboardTestCase { + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_oauth(`class`) let redirectURI = dictionary.removeValue(forKey: "redirectURI") as! String test_redirectURI(redirectURI) - - let requestID = dictionary.removeValue(forKey: "requestID") as! String - test_requestID(requestID) - - logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) } } From bf935c97128feca47f87b1ea30ab7872b94df5da Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 6 Apr 2022 22:46:25 +0800 Subject: [PATCH 069/123] fix: skip test pasteboard for oauth qq --- Tests/NBusTests/Base/HandlerBaseTests.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index a455615..b3832fd 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -313,6 +313,13 @@ extension OauthTestCase { UIPasteboard.general.rx .items() + .do(onNext: { [unowned self] items in + if platform == Platforms.qq { + precondition(items.isEmpty) + + self.pbExpectation.fulfill() + } + }) .filter { !$0.isEmpty } .bind(onNext: { [unowned self] items in self.test_oauth(items: items, platform) From 7fd4ddeb99a4be953db1888daec196f22392bf15 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 8 Apr 2022 20:03:39 +0800 Subject: [PATCH 070/123] docs: MARK --- Tests/NBusTests/Base/HandlerBaseTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index b3832fd..5fcd18a 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -337,6 +337,8 @@ extension OauthTestCase { } } +// MARK: - Oauth - URL + extension OauthURLTestCase { func test_oauth(url: URL, _ platform: Platform) { @@ -364,6 +366,8 @@ extension OauthURLTestCase { } } +// MARK: - Oauth - Pasteboard + extension OauthPasteboardTestCase { func test_oauth(items: [[String: Any]], _ platform: Platform) { From ce5b1ec4d3ea178eb91b10274d278f8ac096d2fd Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 8 Apr 2022 20:25:45 +0800 Subject: [PATCH 071/123] feat: LaunchTestCase --- .../NBusTests/Base/HandlerBaseTestCase.swift | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index 26fb7a8..00dd273 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -215,3 +215,72 @@ protocol OauthTestCase: OauthURLTestCase, OauthPasteboardTestCase, OauthCompleti var disposeBag: DisposeBag { get } } + +// MARK: - Launch - Program - UniversalLink + +protocol LaunchProgramUniversalLinkTestCase: XCTestCase { + + /// Test launch universal link path + func test_launch_ul(path: String) + + /// Test launch universal link queryItems + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - URL + +protocol LaunchURLTestCase: + GeneralUniversalLinkTestCase, + LaunchProgramUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test launch universal link + func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Platform - Pasteboard + +protocol LaunchProgramPasteboardTestCase: XCTestCase { + + /// Test launch pasteboard dictionary + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Pasteboard + +protocol LaunchPasteboardTestCase: + GeneralPasteboardTestCase, + LaunchProgramPasteboardTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test launch pasteboard + func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) + + /// Test launch pasteboard major data + func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Completion + +protocol LaunchCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test launch completion + func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch + +protocol LaunchTestCase: LaunchURLTestCase, LaunchPasteboardTestCase, LaunchCompletionTestCase { + + var disposeBag: DisposeBag { get } +} From e6947cd6b7c936c4ee30ae9b9af4f6879d059bab Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 8 Apr 2022 20:27:16 +0800 Subject: [PATCH 072/123] feat: LaunchTestCase implementation --- Tests/NBusTests/Base/HandlerBaseTests.swift | 112 ++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 5fcd18a..cd61751 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -418,3 +418,115 @@ extension OauthCompletionTestCase { } } } + +// MARK: - Launch + +extension LaunchTestCase { + + func test_launch(_ platform: Platform, _ program: MiniProgramMessage) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_launch(url: url, platform, program) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_launch(items: items, platform, program) + }) + .disposed(by: disposeBag) + + Bus.shared.launch( + program: program, + with: platform, + completionHandler: { [unowned self] result in + self.test_launch(result: result, platform, program) + } + ) + } +} + +// MARK: - Launch - URL + +extension LaunchURLTestCase { + + func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Launch - UniversalLink + + test_launch_ul(path: urlComponents.path) + test_launch_ul(queryItems: &queryItems, platform, program) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: - Launch - Pasteboard + +extension LaunchPasteboardTestCase { + + func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_launch_major_pb(dictionary: test_extract_major_pb(items: &items), platform, program) + + test_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Launch - Program - Pasteboard + + test_launch_pb(dictionary: &dictionary, platform, program) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +// MARK: - Launch - Completion + +extension LaunchCompletionTestCase { + + func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) { + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } +} From ef6a3b30a58f3f9608b6ff7fbcb92e638338d5f7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 8 Apr 2022 20:27:47 +0800 Subject: [PATCH 073/123] feat: QQHandlerBaseTests with LaunchTestCase --- Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 87 ++++----------------- 1 file changed, 15 insertions(+), 72 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 2de6fdc..54a4441 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -785,66 +785,22 @@ extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { // MARK: - Launch -extension QQHandlerBaseTests { +extension QQHandlerBaseTests: LaunchTestCase { func test_launch() { - let message = MediaSource.qqMiniProgram as! MiniProgramMessage - - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_launch(url: url, message) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_launch(items: items) - }) - .disposed(by: disposeBag) - - Bus.shared.launch( - program: message, - with: Platforms.qq, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } - ) + test_launch(Platforms.qq, MediaSource.qqMiniProgram as! MiniProgramMessage) } } -// MARK: Launch - UniversalLink - -extension QQHandlerBaseTests { - - func test_launch(url: URL, _ message: MessageType) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - // GeneralUniversalLink - - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "qm.qq.com") +// MARK: - Launch - URL - let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! - test_appsign_txid(appsign_txid) +extension QQHandlerBaseTests: LaunchURLTestCase { - let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! - test_bundleid(bundleid) - - let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! - test_sdkv(sdkv) - - // LaunchUniversalLink - - XCTAssertEqual(urlComponents.path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") + func test_launch_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") + } + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { let appid = queryItems.removeFirst { $0.name == "appid" }! test_appid(appid) @@ -863,19 +819,14 @@ extension QQHandlerBaseTests { let version = queryItems.removeFirst { $0.name == "version" }! test_version(version) - // launch - let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" }! - test_mini_appid(mini_appid, message) + test_mini_appid(mini_appid, program) let mini_path = queryItems.removeFirst { $0.name == "mini_path" }! - test_mini_path(mini_path, message) + test_mini_path(mini_path, program) let mini_type = queryItems.removeFirst { $0.name == "mini_type" }! - test_mini_type(mini_type, message) - - logger.debug("\(URLComponents.self), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) + test_mini_type(mini_type, program) } } @@ -886,19 +837,11 @@ extension QQHandlerBaseTests { } } -// MARK: Launch - Pasteboard - -extension QQHandlerBaseTests { - - func test_launch(items: [[String: Any]]) { - if items.isEmpty { - XCTAssertTrue(true) - return - } +// MARK: - Launch - Pasteboard - let data = items.first!["com.tencent.mqq.api.apiLargeData"] +extension QQHandlerBaseTests: LaunchPasteboardTestCase { - logger.debug("\(UIPasteboard.self), \(items.map(\.keys))") - XCTAssertNil(data) + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + XCTAssertTrue(true) } } From ab2f167c296bf8e6cea27a17c1b59f94e317a581 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Fri, 8 Apr 2022 20:28:07 +0800 Subject: [PATCH 074/123] feat: WechatHandlerBaseTests with LaunchTestCase --- .../Wechat/WechatHandlerBaseTests.swift | 103 +++--------------- 1 file changed, 14 insertions(+), 89 deletions(-) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 1f43471..fa7cd22 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -764,77 +764,33 @@ extension WechatHandlerBaseTests { // MARK: - Launch -extension WechatHandlerBaseTests { +extension WechatHandlerBaseTests: LaunchTestCase { func test_launch() { - let message = MediaSource.wechatMiniProgram as! MiniProgramMessage - - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_launch(url: url, message) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .bind(onNext: { [unowned self] items in - self.test_launch(items: items) - }) - .disposed(by: disposeBag) - - Bus.shared.launch( - program: message, - with: Platforms.wechat, - completionHandler: { result in - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } - ) + test_launch(Platforms.wechat, MediaSource.wechatMiniProgram as! MiniProgramMessage) } } -// MARK: Launch - UniversalLink - -extension WechatHandlerBaseTests { - - func test_launch(url: URL, _ message: MessageType) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] +// MARK: - Launch - URL - // GeneralUniversalLink +extension WechatHandlerBaseTests: LaunchURLTestCase { - XCTAssertEqual(urlComponents.scheme, "https") - XCTAssertEqual(urlComponents.host, "help.wechat.com") - - let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! - test_wechat_app_bundleId(wechat_app_bundleId) - - let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! - test_wechat_auth_context_id(wechat_auth_context_id) - - // LaunchUniversalLink - - XCTAssertEqual(urlComponents.path, "/app/\(appID)/jumpWxa/") + func test_launch_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/jumpWxa/") + } + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { let extMsg = queryItems.removeFirst { $0.name == "extMsg" }! test_extMsg(extMsg) let miniProgramType = queryItems.removeFirst { $0.name == "miniProgramType" }! - test_miniProgramType(miniProgramType, message) + test_miniProgramType(miniProgramType, program) let path = queryItems.removeFirst { $0.name == "path" }! - test_path(path, message) + test_path(path, program) let userName = queryItems.removeFirst { $0.name == "userName" }! - test_userName(userName, message) - - logger.debug("\(URLComponents.self), \(message.identifier), \(queryItems.map(\.name).sorted())") - XCTAssertTrue(queryItems.isEmpty) + test_userName(userName, program) } } @@ -883,44 +839,13 @@ extension WechatHandlerBaseTests { } } -// MARK: Launch - Pasteboard - -extension WechatHandlerBaseTests { - - func test_launch(items: [[String: Any]]) { - if items.isEmpty { - XCTAssertTrue(true) - return - } +// MARK: - Launch - Pasteboard - let data = items.first!["content"] as! Data - let plist = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] - var dictionary = plist[appID] as! [String: Any] - - // GeneralPasteboard - - let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool - test_isAutoResend(isAutoResend) - - let result = dictionary.removeValue(forKey: "result") as! String - test_result(result) - - let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String - test_returnFromApp(returnFromApp) - - let sdkver = dictionary.removeValue(forKey: "sdkver") as! String - test_sdkver(sdkver) - - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) - - // launch +extension WechatHandlerBaseTests: LaunchPasteboardTestCase { + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { let command = dictionary.removeValue(forKey: "command") as! String test_command_launch(command) - - logger.debug("\(UIPasteboard.self), \(dictionary.keys.sorted())") - XCTAssertTrue(dictionary.isEmpty) } } From 29fdd9959e4b5c15900f18ae134b9ae92ea8b614 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:26:40 +0800 Subject: [PATCH 075/123] refactor: general test --- Tests/NBusTests/Base/GeneralTestCase.swift | 38 ++++ .../NBusTests/Base/HandlerBaseTestCase.swift | 28 --- .../Base/HandlerBaseTests+General.swift | 36 ++++ Tests/NBusTests/Base/HandlerBaseTests.swift | 27 --- .../QQ/QQHandlerBaseTests+General.swift | 66 +++++++ Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 56 ------ .../WechatHandlerBaseTests+General.swift | 98 ++++++++++ .../Wechat/WechatHandlerBaseTests.swift | 88 --------- .../Weibo/WeiboHandlerBaseTests+General.swift | 175 ++++++++++++++++++ .../Weibo/WeiboHandlerBaseTests.swift | 165 ----------------- 10 files changed, 413 insertions(+), 364 deletions(-) create mode 100644 Tests/NBusTests/Base/GeneralTestCase.swift create mode 100644 Tests/NBusTests/Base/HandlerBaseTests+General.swift create mode 100644 Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift create mode 100644 Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift create mode 100644 Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift new file mode 100644 index 0000000..df454b4 --- /dev/null +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -0,0 +1,38 @@ +// +// GeneralTestCase.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import XCTest + +// MARK: - General - UniversalLink + +protocol GeneralUniversalLinkTestCase: XCTestCase { + + /// Test general universal link scheme + func test_general_ul(scheme: String) + + /// Test general universal link host + func test_general_ul(host: String) + + /// Test general universal link queryItems + func test_general_ul(queryItems: inout [URLQueryItem]) +} + +// MARK: - General - Pasteboard + +protocol GeneralPasteboardTestCase: XCTestCase { + + /// Test pasteboard extract major data + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] + + /// Test general pasteboard dictionary + func test_general_pb(dictionary: inout [String: Any]) + + /// Test pasteboard extra data + func test_extra_pb(items: inout [[String: Data]]) +} diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index 00dd273..d0323a6 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -11,34 +11,6 @@ import Foundation import RxSwift import XCTest -// MARK: - General - UniversalLink - -protocol GeneralUniversalLinkTestCase: XCTestCase { - - /// Test general universal link scheme - func test_general_ul(scheme: String) - - /// Test general universal link host - func test_general_ul(host: String) - - /// Test general universal link queryItems - func test_general_ul(queryItems: inout [URLQueryItem]) -} - -// MARK: - General - Pasteboard - -protocol GeneralPasteboardTestCase: XCTestCase { - - /// Test pasteboard extract major data - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] - - /// Test general pasteboard dictionary - func test_general_pb(dictionary: inout [String: Any]) - - /// Test pasteboard extra data - func test_extra_pb(items: inout [[String: Data]]) -} - // MARK: - Share - Common - UniversalLink protocol ShareCommonUniversalLinkTestCase: XCTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+General.swift b/Tests/NBusTests/Base/HandlerBaseTests+General.swift new file mode 100644 index 0000000..b868008 --- /dev/null +++ b/Tests/NBusTests/Base/HandlerBaseTests+General.swift @@ -0,0 +1,36 @@ +// +// HandlerBaseTests+General.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation + +// MARK: - General - Pasteboard + +extension GeneralPasteboardTestCase { + + func test_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + return dictionary + } + + func test_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + let item = items.removeFirst { $0.keys.contains(key) }! + + precondition(item.count == 1) + + let data = item[key]! + let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] + + return dictionary + } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index cd61751..e888d87 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -123,33 +123,6 @@ extension HandlerBaseTests { } } -// MARK: - General - Pasteboard - -extension GeneralPasteboardTestCase { - - func test_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { - let item = items.removeFirst { $0.keys.contains(key) }! - - precondition(item.count == 1) - - let data = item[key]! - let dictionary = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - - return dictionary - } - - func test_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { - let item = items.removeFirst { $0.keys.contains(key) }! - - precondition(item.count == 1) - - let data = item[key]! - let dictionary = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String: Any] - - return dictionary - } -} - // MARK: - Share extension ShareTestCase { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift new file mode 100644 index 0000000..d69edd7 --- /dev/null +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -0,0 +1,66 @@ +// +// QQHandlerBaseTests+General.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import XCTest + +// MARK: - General - UniversalLink + +extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { + + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") + } + + func test_general_ul(host: String) { + XCTAssertEqual(host, "qm.qq.com") + } + + func test_general_ul(queryItems: inout [URLQueryItem]) { + let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! + test_appsign_txid(appsign_txid) + + let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! + test_bundleid(bundleid) + + let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! + test_sdkv(sdkv) + } +} + +extension QQHandlerBaseTests { + + func test_appsign_txid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_bundleid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) + } + + func test_sdkv(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkShortVersion) + } +} + +// MARK: - General - Pasteboard + +extension QQHandlerBaseTests: GeneralPasteboardTestCase { + + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") + } + + func test_general_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } + + func test_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 54a4441..b8f109c 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -60,62 +60,6 @@ class QQHandlerBaseTests: HandlerBaseTests { } } -// MARK: - General - UniversalLink - -extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { - - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") - } - - func test_general_ul(host: String) { - XCTAssertEqual(host, "qm.qq.com") - } - - func test_general_ul(queryItems: inout [URLQueryItem]) { - let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! - test_appsign_txid(appsign_txid) - - let bundleid = queryItems.removeFirst { $0.name == "bundleid" }! - test_bundleid(bundleid) - - let sdkv = queryItems.removeFirst { $0.name == "sdkv" }! - test_sdkv(sdkv) - } -} - -extension QQHandlerBaseTests { - - func test_appsign_txid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) - } - - func test_bundleid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) - } - - func test_sdkv(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkShortVersion) - } -} - -// MARK: - General - Pasteboard - -extension QQHandlerBaseTests: GeneralPasteboardTestCase { - - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") - } - - func test_general_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) - } - - func test_extra_pb(items: inout [[String: Data]]) { - XCTAssertTrue(true) - } -} - // MARK: - Share extension QQHandlerBaseTests: ShareTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift new file mode 100644 index 0000000..c4dd5a6 --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -0,0 +1,98 @@ +// +// WechatHandlerBaseTests+General.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import XCTest + +// MARK: - General - UniversalLink + +extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { + + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") + } + + func test_general_ul(host: String) { + XCTAssertEqual(host, "help.wechat.com") + } + + func test_general_ul(queryItems: inout [URLQueryItem]) { + let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! + test_wechat_app_bundleId(wechat_app_bundleId) + + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + } +} + +extension WechatHandlerBaseTests { + + func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID) + } + + func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!.count, 64) + } +} + +// MARK: - General - Pasteboard + +extension WechatHandlerBaseTests: GeneralPasteboardTestCase { + + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + let plist = test_extract_PropertyList_pb(items: &items, key: "content") + let dictionary = plist[appID] as! [String: Any] + + return dictionary + } + + func test_general_pb(dictionary: inout [String: Any]) { + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result(result) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let sdkver = dictionary.removeValue(forKey: "sdkver") as! String + test_sdkver(sdkver) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + } + + func test_extra_pb(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} + +extension WechatHandlerBaseTests { + + func test_isAutoResend(_ value: Bool) { + XCTAssertEqual(value, false) + } + + func test_result(_ value: String) { + XCTAssertEqual(value, "1") + } + + func test_returnFromApp(_ value: String) { + XCTAssertEqual(value, "0") + } + + func test_sdkver(_ value: String) { + XCTAssertEqual(value, sdkVersion) + } + + func test_universalLink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index fa7cd22..f1b21af 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -40,94 +40,6 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } -// MARK: - General - UniversalLink - -extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { - - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") - } - - func test_general_ul(host: String) { - XCTAssertEqual(host, "help.wechat.com") - } - - func test_general_ul(queryItems: inout [URLQueryItem]) { - let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! - test_wechat_app_bundleId(wechat_app_bundleId) - - let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! - test_wechat_auth_context_id(wechat_auth_context_id) - } -} - -extension WechatHandlerBaseTests { - - func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID) - } - - func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!.count, 64) - } -} - -// MARK: - General - Pasteboard - -extension WechatHandlerBaseTests: GeneralPasteboardTestCase { - - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - let plist = test_extract_PropertyList_pb(items: &items, key: "content") - let dictionary = plist[appID] as! [String: Any] - - return dictionary - } - - func test_general_pb(dictionary: inout [String: Any]) { - let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool - test_isAutoResend(isAutoResend) - - let result = dictionary.removeValue(forKey: "result") as! String - test_result(result) - - let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String - test_returnFromApp(returnFromApp) - - let sdkver = dictionary.removeValue(forKey: "sdkver") as! String - test_sdkver(sdkver) - - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) - } - - func test_extra_pb(items: inout [[String: Data]]) { - XCTAssertTrue(true) - } -} - -extension WechatHandlerBaseTests { - - func test_isAutoResend(_ value: Bool) { - XCTAssertEqual(value, false) - } - - func test_result(_ value: String) { - XCTAssertEqual(value, "1") - } - - func test_returnFromApp(_ value: String) { - XCTAssertEqual(value, "0") - } - - func test_sdkver(_ value: String) { - XCTAssertEqual(value, sdkVersion) - } - - func test_universalLink(_ value: String) { - XCTAssertEqual(value, universalLink.absoluteString) - } -} - // MARK: - Share extension WechatHandlerBaseTests: ShareTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift new file mode 100644 index 0000000..236cc44 --- /dev/null +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -0,0 +1,175 @@ +// +// WeiboHandlerBaseTests+General.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import XCTest + +// MARK: - General - UniversalLink + +extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { + + func test_general_ul(scheme: String) { + XCTAssertEqual(scheme, "https") + } + + func test_general_ul(host: String) { + XCTAssertEqual(host, "open.weibo.com") + } + + func test_general_ul(queryItems: inout [URLQueryItem]) { + let lfid = queryItems.removeFirst { $0.name == "lfid" }! + test_lfid(lfid) + + let luicode = queryItems.removeFirst { $0.name == "luicode" }! + test_luicode(luicode) + + let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! + test_newVersion(newVersion) + + let objId = queryItems.removeFirst { $0.name == "objId" }! + test_objId(objId) + + let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! + test_sdkversion(sdkversion) + + let urltype = queryItems.removeFirst { $0.name == "urltype" }! + test_urltype(urltype) + } +} + +extension WeiboHandlerBaseTests { + + func test_lfid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, bundleID) + } + + func test_luicode(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "10000360") + } + + func test_newVersion(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkShortVersion) + } + + func test_objId(_ queryItem: URLQueryItem) { + XCTAssertNotNil(UUID(uuidString: queryItem.value!)) + } + + func test_sdkversion(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, sdkVersion) + } + + func test_urltype(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "link") + } +} + +// MARK: - General - Pasteboard + +extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { + + func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + test_extract_KeyedArchiver_pb(items: &items, key: "transferObject") + } + + func test_general_pb(dictionary: inout [String: Any]) { + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + } + + func test_extra_pb(items: inout [[String: Data]]) { + test_app(&items) + + test_sdkVersion(&items) + + test_userInfo(&items) + } +} + +extension WeiboHandlerBaseTests { + + func test_requestID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } +} + +extension WeiboHandlerBaseTests { + + func test_app(_ items: inout [[String: Data]]) { + var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "app") + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let aid = dictionary.removeValue(forKey: "aid") as! String + test_aid(aid) + + let appKey = dictionary.removeValue(forKey: "appKey") as! String + test_appKey(appKey) + + let bundleID = dictionary.removeValue(forKey: "bundleID") as! String + test_bundleID(bundleID) + + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_aid(_ value: String) { + XCTAssertEqual(value.count, 50) + } + + func test_appKey(_ value: String) { + XCTAssertEqual(value, appNumber) + } + + func test_bundleID(_ value: String) { + XCTAssertEqual(value, bundleID) + } + + func test_universalLink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } +} + +extension WeiboHandlerBaseTests { + + func test_sdkVersion(_ items: inout [[String: Data]]) { + let data = items.removeFirst { $0.keys.contains("sdkVersion") }!["sdkVersion"]! + + XCTAssertEqual(data, Data(sdkVersion.utf8)) + } +} + +extension WeiboHandlerBaseTests { + + func test_userInfo(_ items: inout [[String: Data]]) { + var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "userInfo") + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let startTime = dictionary.removeValue(forKey: "startTime") as! String + test_startTime(startTime) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_startTime(_ value: String) { + XCTAssertNotNil(dateFormatter.date(from: value)) + } +} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index cc22366..c6e875a 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -62,171 +62,6 @@ class WeiboHandlerBaseTests: HandlerBaseTests { }() } -// MARK: - General - UniversalLink - -extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { - - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") - } - - func test_general_ul(host: String) { - XCTAssertEqual(host, "open.weibo.com") - } - - func test_general_ul(queryItems: inout [URLQueryItem]) { - let lfid = queryItems.removeFirst { $0.name == "lfid" }! - test_lfid(lfid) - - let luicode = queryItems.removeFirst { $0.name == "luicode" }! - test_luicode(luicode) - - let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! - test_newVersion(newVersion) - - let objId = queryItems.removeFirst { $0.name == "objId" }! - test_objId(objId) - - let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! - test_sdkversion(sdkversion) - - let urltype = queryItems.removeFirst { $0.name == "urltype" }! - test_urltype(urltype) - } -} - -extension WeiboHandlerBaseTests { - - func test_lfid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID) - } - - func test_luicode(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "10000360") - } - - func test_newVersion(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkShortVersion) - } - - func test_objId(_ queryItem: URLQueryItem) { - XCTAssertNotNil(UUID(uuidString: queryItem.value!)) - } - - func test_sdkversion(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkVersion) - } - - func test_urltype(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "link") - } -} - -// MARK: - General - Pasteboard - -extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { - - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_extract_KeyedArchiver_pb(items: &items, key: "transferObject") - } - - func test_general_pb(dictionary: inout [String: Any]) { - let requestID = dictionary.removeValue(forKey: "requestID") as! String - test_requestID(requestID) - } - - func test_extra_pb(items: inout [[String: Data]]) { - test_app(&items) - - test_sdkVersion(&items) - - test_userInfo(&items) - } -} - -extension WeiboHandlerBaseTests { - - func test_requestID(_ value: String) { - XCTAssertNotNil(UUID(uuidString: value)) - } -} - -extension WeiboHandlerBaseTests { - - func test_app(_ items: inout [[String: Data]]) { - var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "app") - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - let aid = dictionary.removeValue(forKey: "aid") as! String - test_aid(aid) - - let appKey = dictionary.removeValue(forKey: "appKey") as! String - test_appKey(appKey) - - let bundleID = dictionary.removeValue(forKey: "bundleID") as! String - test_bundleID(bundleID) - - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_aid(_ value: String) { - XCTAssertEqual(value.count, 50) - } - - func test_appKey(_ value: String) { - XCTAssertEqual(value, appNumber) - } - - func test_bundleID(_ value: String) { - XCTAssertEqual(value, bundleID) - } - - func test_universalLink(_ value: String) { - XCTAssertEqual(value, universalLink.absoluteString) - } -} - -extension WeiboHandlerBaseTests { - - func test_sdkVersion(_ items: inout [[String: Data]]) { - let data = items.removeFirst { $0.keys.contains("sdkVersion") }!["sdkVersion"]! - - XCTAssertEqual(data, Data(sdkVersion.utf8)) - } -} - -extension WeiboHandlerBaseTests { - - func test_userInfo(_ items: inout [[String: Data]]) { - var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "userInfo") - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - let startTime = dictionary.removeValue(forKey: "startTime") as! String - test_startTime(startTime) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_startTime(_ value: String) { - XCTAssertNotNil(dateFormatter.date(from: value)) - } -} - // MARK: - Share extension WeiboHandlerBaseTests: ShareTestCase { From 605b105af12f1891012f346c9c7cef8f18771c9f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:35:55 +0800 Subject: [PATCH 076/123] refactor: share test --- .../NBusTests/Base/HandlerBaseTestCase.swift | 108 ---- .../Base/HandlerBaseTests+Share.swift | 161 +++++ Tests/NBusTests/Base/HandlerBaseTests.swift | 149 ----- Tests/NBusTests/Base/ShareTestCase.swift | 120 ++++ .../QQ/QQHandlerBaseTests+Share.swift | 589 +++++++++++++++++ Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 578 ----------------- .../Wechat/WechatHandlerBaseTests+Share.swift | 591 ++++++++++++++++++ .../Wechat/WechatHandlerBaseTests.swift | 580 ----------------- .../Weibo/WeiboHandlerBaseTests+Share.swift | 317 ++++++++++ .../Weibo/WeiboHandlerBaseTests.swift | 306 --------- 10 files changed, 1778 insertions(+), 1721 deletions(-) create mode 100644 Tests/NBusTests/Base/HandlerBaseTests+Share.swift create mode 100644 Tests/NBusTests/Base/ShareTestCase.swift create mode 100644 Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift create mode 100644 Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift create mode 100644 Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index d0323a6..15c44be 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -11,114 +11,6 @@ import Foundation import RxSwift import XCTest -// MARK: - Share - Common - UniversalLink - -protocol ShareCommonUniversalLinkTestCase: XCTestCase { - - /// Test share common universal link path - func test_share_common_ul(path: String) - - /// Test share common universal link queryItems - func test_share_common_ul(queryItems: inout [URLQueryItem]) -} - -// MARK: - Share - Common - Pasteboard - -protocol ShareCommonPasteboardTestCase: XCTestCase { - - /// Test share common pasteboard dictionary - func test_share_common_pb(dictionary: inout [String: Any]) -} - -// MARK: - Share - MediaMessage - UniversalLink - -protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { - - /// Test share media message universal link queryItems - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - MediaMessage - Pasteboard - -protocol ShareMediaMessagePasteboardTestCase: XCTestCase { - - /// Test share media message pasteboard dictionary - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - Message - UniversalLink - -protocol ShareMessageUniversalLinkTestCase: XCTestCase { - - /// Test share message universal link queryItems - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - Message - Pasteboard - -protocol ShareMessagePasteboardTestCase: XCTestCase { - - /// Test share message pasteboard dictionary - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - URL - -protocol ShareURLTestCase: - GeneralUniversalLinkTestCase, - ShareCommonUniversalLinkTestCase, - ShareMediaMessageUniversalLinkTestCase, - ShareMessageUniversalLinkTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Test share universal link - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - Pasteboard - -protocol SharePasteboardTestCase: - GeneralPasteboardTestCase, - ShareCommonPasteboardTestCase, - ShareMediaMessagePasteboardTestCase, - ShareMessagePasteboardTestCase { - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test share pasteboard - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) - - /// Test share pasteboard major data - func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - -// MARK: - Share - Completion - -protocol ShareCompletionTestCase: XCTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test share completion - func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) - - /// Test share avoid error - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool -} - -// MARK: - Share - -protocol ShareTestCase: ShareURLTestCase, SharePasteboardTestCase, ShareCompletionTestCase { - - var disposeBag: DisposeBag { get } -} - // MARK: - Oauth - Platform - UniversalLink protocol OauthPlatformUniversalLinkTestCase: XCTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift new file mode 100644 index 0000000..116cb09 --- /dev/null +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -0,0 +1,161 @@ +// +// HandlerBaseTests+Share.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Share + +extension ShareTestCase { + + func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_share(url: url, message, endpoint) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .do(onNext: { [unowned self] items in + if + (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) + || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) { + precondition(items.isEmpty) + + self.pbExpectation.fulfill() + } + }) + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_share(items: items, message, endpoint) + }) + .disposed(by: disposeBag) + + Bus.shared.share( + message: message, + to: endpoint, + completionHandler: { [unowned self] result in + self.test_share(result: result, message, endpoint) + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } +} + +// MARK: - Share - URL + +extension ShareURLTestCase { + + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Share - Common - UniversalLink + + test_share_common_ul(path: urlComponents.path) + test_share_common_ul(queryItems: &queryItems) + + // Share - MediaMessage - UniversalLink + + test_share_media_ul(queryItems: &queryItems, message, endpoint) + + // Share - Message - UniversalLink + + test_share_message_ul(queryItems: &queryItems, message, endpoint) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: - Share - Pasteboard + +extension SharePasteboardTestCase { + + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_share_major_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) + + test_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Share - Comon - Pasteboard + + test_share_common_pb(dictionary: &dictionary) + + // Share - MediaMessage - Pasteboard + + test_share_media_pb(dictionary: &dictionary, message, endpoint) + + // Share - Message - Pasteboard + + test_share_message_pb(dictionary: &dictionary, message, endpoint) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +// MARK: - Share - Completion + +extension ShareCompletionTestCase { + + func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { + switch result { + case .success: + XCTAssertTrue(true) + case let .failure(error): + logger.error("\(error)") + + if test_share_avoid_error(error, message, endpoint) { + XCTAssertTrue(true) + + ulExpectation.fulfill() + pbExpectation.fulfill() + } else { + XCTAssertTrue(false) + } + } + } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index e888d87..c3710a2 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -123,155 +123,6 @@ extension HandlerBaseTests { } } -// MARK: - Share - -extension ShareTestCase { - - func test_share(_ message: MessageType, _ endpoint: Endpoint) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_share(url: url, message, endpoint) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .do(onNext: { [unowned self] items in - if - (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) - || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) { - precondition(items.isEmpty) - - self.pbExpectation.fulfill() - } - }) - .filter { !$0.isEmpty } - .bind(onNext: { [unowned self] items in - self.test_share(items: items, message, endpoint) - }) - .disposed(by: disposeBag) - - Bus.shared.share( - message: message, - to: endpoint, - completionHandler: { [unowned self] result in - self.test_share(result: result, message, endpoint) - } - ) - - wait(for: [ulExpectation, pbExpectation], timeout: 5) - } -} - -// MARK: - Share - URL - -extension ShareURLTestCase { - - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - - // General - UniversalLink - - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) - test_general_ul(queryItems: &queryItems) - - // Share - Common - UniversalLink - - test_share_common_ul(path: urlComponents.path) - test_share_common_ul(queryItems: &queryItems) - - // Share - MediaMessage - UniversalLink - - test_share_media_ul(queryItems: &queryItems, message, endpoint) - - // Share - Message - UniversalLink - - test_share_message_ul(queryItems: &queryItems, message, endpoint) - - logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") - - XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() - } -} - -// MARK: - Share - Pasteboard - -extension SharePasteboardTestCase { - - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { - var items = items as! [[String: Data]] - - logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - - test_share_major_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) - - test_extra_pb(items: &items) - - logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") - - XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() - } - - func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - var dictionary = dictionary - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - // General - Pasteboard - - test_general_pb(dictionary: &dictionary) - - // Share - Comon - Pasteboard - - test_share_common_pb(dictionary: &dictionary) - - // Share - MediaMessage - Pasteboard - - test_share_media_pb(dictionary: &dictionary, message, endpoint) - - // Share - Message - Pasteboard - - test_share_message_pb(dictionary: &dictionary, message, endpoint) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -// MARK: - Share - Completion - -extension ShareCompletionTestCase { - - func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { - switch result { - case .success: - XCTAssertTrue(true) - case let .failure(error): - logger.error("\(error)") - - if test_share_avoid_error(error, message, endpoint) { - XCTAssertTrue(true) - - ulExpectation.fulfill() - pbExpectation.fulfill() - } else { - XCTAssertTrue(false) - } - } - } -} - // MARK: - Oauth extension OauthTestCase { diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift new file mode 100644 index 0000000..1e2b2b9 --- /dev/null +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -0,0 +1,120 @@ +// +// ShareTestCase.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Share - Common - UniversalLink + +protocol ShareCommonUniversalLinkTestCase: XCTestCase { + + /// Test share common universal link path + func test_share_common_ul(path: String) + + /// Test share common universal link queryItems + func test_share_common_ul(queryItems: inout [URLQueryItem]) +} + +// MARK: - Share - Common - Pasteboard + +protocol ShareCommonPasteboardTestCase: XCTestCase { + + /// Test share common pasteboard dictionary + func test_share_common_pb(dictionary: inout [String: Any]) +} + +// MARK: - Share - MediaMessage - UniversalLink + +protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { + + /// Test share media message universal link queryItems + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - MediaMessage - Pasteboard + +protocol ShareMediaMessagePasteboardTestCase: XCTestCase { + + /// Test share media message pasteboard dictionary + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - UniversalLink + +protocol ShareMessageUniversalLinkTestCase: XCTestCase { + + /// Test share message universal link queryItems + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - Pasteboard + +protocol ShareMessagePasteboardTestCase: XCTestCase { + + /// Test share message pasteboard dictionary + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - URL + +protocol ShareURLTestCase: + GeneralUniversalLinkTestCase, + ShareCommonUniversalLinkTestCase, + ShareMediaMessageUniversalLinkTestCase, + ShareMessageUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test share universal link + func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Pasteboard + +protocol SharePasteboardTestCase: + GeneralPasteboardTestCase, + ShareCommonPasteboardTestCase, + ShareMediaMessagePasteboardTestCase, + ShareMessagePasteboardTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test share pasteboard + func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) + + /// Test share pasteboard major data + func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Completion + +protocol ShareCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test share completion + func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) + + /// Test share avoid error + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool +} + +// MARK: - Share + +protocol ShareTestCase: ShareURLTestCase, SharePasteboardTestCase, ShareCompletionTestCase { + + var disposeBag: DisposeBag { get } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift new file mode 100644 index 0000000..2c45124 --- /dev/null +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -0,0 +1,589 @@ +// +// QQHandlerBaseTests+Share.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Share + +extension QQHandlerBaseTests: ShareTestCase { + + func test_share_text_friend() { + test_share(MediaSource.text, Endpoints.QQ.friend) + } + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_image_friend() { + test_share(MediaSource.qqImage, Endpoints.QQ.friend) + } + + func test_share_image_timeline() { + test_share(MediaSource.qqImage, Endpoints.QQ.timeline) + } + + func test_share_audio_friend() { + test_share(MediaSource.audio, Endpoints.QQ.friend) + } + + func test_share_audio_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_video_friend() { + test_share(MediaSource.video, Endpoints.QQ.friend) + } + + func test_share_video_timeline() { + test_share(MediaSource.text, Endpoints.QQ.timeline) + } + + func test_share_webPage_friend() { + test_share(MediaSource.webPage, Endpoints.QQ.friend) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.QQ.timeline) + } + + func test_share_file_friend() { + test_share(MediaSource.file, Endpoints.QQ.friend) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.QQ.timeline) + } + + func test_share_miniProgram_friend() { + test_share(MediaSource.qqMiniProgram, Endpoints.QQ.friend) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.webPage, Endpoints.QQ.timeline) + } +} + +// MARK: - Share - Common - UniversalLink + +extension QQHandlerBaseTests: ShareCommonUniversalLinkTestCase { + + func test_share_common_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") + } + + func test_share_common_ul(queryItems: inout [URLQueryItem]) { + let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! + test_callback_name(callback_name) + + let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! + test_callback_type(callback_type) + + let src_type = queryItems.removeFirst { $0.name == "src_type" }! + test_src_type(src_type) + + let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! + test_thirdAppDisplayName(thirdAppDisplayName) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) + } +} + +extension QQHandlerBaseTests { + + func test_callback_name(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_callback_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "scheme") + } + + func test_src_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "app") + } + + func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) + } + + func test_version(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "1") + } +} + +// MARK: - Share - MediaMessage - UniversalLink + +extension QQHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + let description = queryItems.removeFirst { $0.name == "description" } + test_description(description, message) + + let title = queryItems.removeFirst { $0.name == "title" } + test_title(title, message) + } +} + +extension QQHandlerBaseTests { + + func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } +} + +// MARK: - Share - Message - UniversalLink + +extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + let cflag = queryItems.removeFirst { $0.name == "cflag" }! + test_cflag(cflag, message, endpoint) + + let fileName = queryItems.removeFirst { $0.name == "fileName" } + test_fileName(fileName, message) + + let file_data = queryItems.removeFirst { $0.name == "file_data" } + test_file_data(file_data, message) + + let file_type = queryItems.removeFirst { $0.name == "file_type" }! + test_file_type(file_type, message) + + let flashurl = queryItems.removeFirst { $0.name == "flashurl" } + test_flashurl(flashurl, message) + + let generalpastboard = queryItems.removeFirst { $0.name == "generalpastboard" } + test_generalpastboard(generalpastboard) + + let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" } + test_mini_appid(mini_appid, message) + + let mini_code64 = queryItems.removeFirst { $0.name == "mini_code64" } + test_mini_code64(mini_code64, message) + + let mini_path = queryItems.removeFirst { $0.name == "mini_path" } + test_mini_path(mini_path, message) + + let mini_type = queryItems.removeFirst { $0.name == "mini_type" } + test_mini_type(mini_type, message) + + let mini_weburl = queryItems.removeFirst { $0.name == "mini_weburl" } + test_mini_weburl(mini_weburl, message) + + let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" } + test_objectlocation(objectlocation, message) + + let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" } + test_pasteboard(pasteboard, message) + + let shareType = queryItems.removeFirst { $0.name == "shareType" }! + test_shareType(shareType, message, endpoint) + + let url = queryItems.removeFirst { $0.name == "url" } + test_url(url, message) + } +} + +extension QQHandlerBaseTests { + + func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.QQ.friend: + switch message.identifier { + case Messages.text, + Messages.image, + Messages.audio, + Messages.video, + Messages.webPage: + XCTAssertEqual(queryItem.value!, "2") + case Messages.file: + XCTAssertEqual(queryItem.value!, "18") + case Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "64") + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + case Endpoints.QQ.timeline: + XCTAssertEqual(queryItem.value!, "0") + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + } + + func test_fileName(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.fullName) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_file_data(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(queryItem!.value!, message.text.bus.base64EncodedString) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_file_type(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(queryItem.value!, "text") + case Messages.image: + XCTAssertEqual(queryItem.value!, "img") + case Messages.audio: + XCTAssertEqual(queryItem.value!, "audio") + case Messages.video: + XCTAssertEqual(queryItem.value!, "video") + case Messages.webPage: + XCTAssertEqual(queryItem.value!, "news") + case Messages.file: + XCTAssertEqual(queryItem.value!, "localFile") + case Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "news") + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + } + + func test_flashurl(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(queryItem) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_generalpastboard(_ queryItem: URLQueryItem?) { + XCTAssertEqual(queryItem!.value!, "1") + } + + func test_mini_appid(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.miniProgramID) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_mini_code64(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case is MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, "1") + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_mini_path(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_mini_type(_ queryItem: URLQueryItem?, _ message: MessageType) { + let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in + switch miniProgramType { + case .release: + return "3" + case .test: + return "1" + case .preview: + return "4" + } + } + + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_mini_weburl(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_objectlocation(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is FileMessage: + XCTAssertEqual(queryItem!.value!, "pasteboard") + case is WebPageMessage, + is MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, "url") + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { + let thumbnail: (String) -> Data = { value in + let data = Data(base64Encoded: value)! + let object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + return object["previewimagedata"] as! Data + } + + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as WebPageMessage: + XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + + func test_shareType(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.QQ.friend: + switch message.identifier { + case Messages.text, + Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(queryItem.value!, "0") + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + case Endpoints.QQ.timeline: + switch message.identifier { + case Messages.text, + Messages.image: + XCTAssertEqual(queryItem.value!, "0") + case Messages.audio, + Messages.video, + Messages.webPage: + XCTAssertEqual(queryItem.value!, "1") + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + default: + XCTAssertTrue(false, String(describing: queryItem.value)) + } + } + + func test_url(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is FileMessage: + XCTAssertNil(queryItem) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } +} + +// MARK: - Share - Common - Pasteboard + +extension QQHandlerBaseTests: ShareCommonPasteboardTestCase { + + func test_share_common_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - Pasteboard + +extension QQHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data + test_previewimagedata(previewimagedata, message) + } +} + +extension QQHandlerBaseTests { + + func test_previewimagedata(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as FileMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +// MARK: - Share - Message - Pasteboard + +extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let file_data = dictionary.removeValue(forKey: "file_data") as? Data + test_file_data(file_data, message) + } +} + +extension QQHandlerBaseTests { + + func test_file_data(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.data) + case let message as FileMessage: + XCTAssertEqual(value!, message.data) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +// MARK: - Share - Completion + +extension QQHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index b8f109c..0814190 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -60,584 +60,6 @@ class QQHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Share - -extension QQHandlerBaseTests: ShareTestCase { - - func test_share_text_friend() { - test_share(MediaSource.text, Endpoints.QQ.friend) - } - - func test_share_text_timeline() { - test_share(MediaSource.text, Endpoints.QQ.timeline) - } - - func test_share_image_friend() { - test_share(MediaSource.qqImage, Endpoints.QQ.friend) - } - - func test_share_image_timeline() { - test_share(MediaSource.qqImage, Endpoints.QQ.timeline) - } - - func test_share_audio_friend() { - test_share(MediaSource.audio, Endpoints.QQ.friend) - } - - func test_share_audio_timeline() { - test_share(MediaSource.text, Endpoints.QQ.timeline) - } - - func test_share_video_friend() { - test_share(MediaSource.video, Endpoints.QQ.friend) - } - - func test_share_video_timeline() { - test_share(MediaSource.text, Endpoints.QQ.timeline) - } - - func test_share_webPage_friend() { - test_share(MediaSource.webPage, Endpoints.QQ.friend) - } - - func test_share_webPage_timeline() { - test_share(MediaSource.webPage, Endpoints.QQ.timeline) - } - - func test_share_file_friend() { - test_share(MediaSource.file, Endpoints.QQ.friend) - } - - func test_share_file_timeline() { - test_share(MediaSource.file, Endpoints.QQ.timeline) - } - - func test_share_miniProgram_friend() { - test_share(MediaSource.qqMiniProgram, Endpoints.QQ.friend) - } - - func test_share_miniProgram_timeline() { - test_share(MediaSource.webPage, Endpoints.QQ.timeline) - } -} - -// MARK: - Share - Common - UniversalLink - -extension QQHandlerBaseTests: ShareCommonUniversalLinkTestCase { - - func test_share_common_ul(path: String) { - XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") - } - - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! - test_callback_name(callback_name) - - let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! - test_callback_type(callback_type) - - let src_type = queryItems.removeFirst { $0.name == "src_type" }! - test_src_type(src_type) - - let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! - test_thirdAppDisplayName(thirdAppDisplayName) - - let version = queryItems.removeFirst { $0.name == "version" }! - test_version(version) - } -} - -extension QQHandlerBaseTests { - - func test_callback_name(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) - } - - func test_callback_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "scheme") - } - - func test_src_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "app") - } - - func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) - } - - func test_version(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "1") - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension QQHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - let description = queryItems.removeFirst { $0.name == "description" } - test_description(description, message) - - let title = queryItems.removeFirst { $0.name == "title" } - test_title(title, message) - } -} - -extension QQHandlerBaseTests { - - func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } -} - -// MARK: - Share - Message - UniversalLink - -extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - let cflag = queryItems.removeFirst { $0.name == "cflag" }! - test_cflag(cflag, message, endpoint) - - let fileName = queryItems.removeFirst { $0.name == "fileName" } - test_fileName(fileName, message) - - let file_data = queryItems.removeFirst { $0.name == "file_data" } - test_file_data(file_data, message) - - let file_type = queryItems.removeFirst { $0.name == "file_type" }! - test_file_type(file_type, message) - - let flashurl = queryItems.removeFirst { $0.name == "flashurl" } - test_flashurl(flashurl, message) - - let generalpastboard = queryItems.removeFirst { $0.name == "generalpastboard" } - test_generalpastboard(generalpastboard) - - let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" } - test_mini_appid(mini_appid, message) - - let mini_code64 = queryItems.removeFirst { $0.name == "mini_code64" } - test_mini_code64(mini_code64, message) - - let mini_path = queryItems.removeFirst { $0.name == "mini_path" } - test_mini_path(mini_path, message) - - let mini_type = queryItems.removeFirst { $0.name == "mini_type" } - test_mini_type(mini_type, message) - - let mini_weburl = queryItems.removeFirst { $0.name == "mini_weburl" } - test_mini_weburl(mini_weburl, message) - - let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" } - test_objectlocation(objectlocation, message) - - let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" } - test_pasteboard(pasteboard, message) - - let shareType = queryItems.removeFirst { $0.name == "shareType" }! - test_shareType(shareType, message, endpoint) - - let url = queryItems.removeFirst { $0.name == "url" } - test_url(url, message) - } -} - -extension QQHandlerBaseTests { - - func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { - switch endpoint { - case Endpoints.QQ.friend: - switch message.identifier { - case Messages.text, - Messages.image, - Messages.audio, - Messages.video, - Messages.webPage: - XCTAssertEqual(queryItem.value!, "2") - case Messages.file: - XCTAssertEqual(queryItem.value!, "18") - case Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "64") - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - case Endpoints.QQ.timeline: - XCTAssertEqual(queryItem.value!, "0") - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - } - - func test_fileName(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is MiniProgramMessage: - XCTAssertNil(queryItem) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.fullName) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_file_data(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case let message as TextMessage: - XCTAssertEqual(queryItem!.value!, message.text.bus.base64EncodedString) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertNil(queryItem) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_file_type(_ queryItem: URLQueryItem, _ message: MessageType) { - switch message.identifier { - case Messages.text: - XCTAssertEqual(queryItem.value!, "text") - case Messages.image: - XCTAssertEqual(queryItem.value!, "img") - case Messages.audio: - XCTAssertEqual(queryItem.value!, "audio") - case Messages.video: - XCTAssertEqual(queryItem.value!, "video") - case Messages.webPage: - XCTAssertEqual(queryItem.value!, "news") - case Messages.file: - XCTAssertEqual(queryItem.value!, "localFile") - case Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "news") - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - } - - func test_flashurl(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertNil(queryItem) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_generalpastboard(_ queryItem: URLQueryItem?) { - XCTAssertEqual(queryItem!.value!, "1") - } - - func test_mini_appid(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.miniProgramID) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_mini_code64(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case is MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, "1") - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_mini_path(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_mini_type(_ queryItem: URLQueryItem?, _ message: MessageType) { - let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in - switch miniProgramType { - case .release: - return "3" - case .test: - return "1" - case .preview: - return "4" - } - } - - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_mini_weburl(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_objectlocation(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is FileMessage: - XCTAssertEqual(queryItem!.value!, "pasteboard") - case is WebPageMessage, - is MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, "url") - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { - let thumbnail: (String) -> Data = { value in - let data = Data(base64Encoded: value)! - let object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - return object["previewimagedata"] as! Data - } - - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as WebPageMessage: - XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) - case let message as MiniProgramMessage: - XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_shareType(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { - switch endpoint { - case Endpoints.QQ.friend: - switch message.identifier { - case Messages.text, - Messages.image, - Messages.audio, - Messages.video, - Messages.webPage, - Messages.file, - Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "0") - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - case Endpoints.QQ.timeline: - switch message.identifier { - case Messages.text, - Messages.image: - XCTAssertEqual(queryItem.value!, "0") - case Messages.audio, - Messages.video, - Messages.webPage: - XCTAssertEqual(queryItem.value!, "1") - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - default: - XCTAssertTrue(false, String(describing: queryItem.value)) - } - } - - func test_url(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is FileMessage: - XCTAssertNil(queryItem) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } -} - -// MARK: - Share - Common - Pasteboard - -extension QQHandlerBaseTests: ShareCommonPasteboardTestCase { - - func test_share_common_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - Pasteboard - -extension QQHandlerBaseTests: ShareMediaMessagePasteboardTestCase { - - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data - test_previewimagedata(previewimagedata, message) - } -} - -extension QQHandlerBaseTests { - - func test_previewimagedata(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) - default: - XCTAssertTrue(false, String(describing: value)) - } - } -} - -// MARK: - Share - Message - Pasteboard - -extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let file_data = dictionary.removeValue(forKey: "file_data") as? Data - test_file_data(file_data, message) - } -} - -extension QQHandlerBaseTests { - - func test_file_data(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage, - is AudioMessage, - is VideoMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.data) - case let message as FileMessage: - XCTAssertEqual(value!, message.data) - default: - XCTAssertTrue(false, String(describing: value)) - } - } -} - -// MARK: - Share - Completion - -extension QQHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline - } -} - // MARK: - Oauth extension QQHandlerBaseTests: OauthTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift new file mode 100644 index 0000000..1a6ea84 --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -0,0 +1,591 @@ +// +// WechatHandlerBaseTests+Share.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Share + +extension WechatHandlerBaseTests: ShareTestCase { + + func test_share_text_friend() { + test_share(MediaSource.text, Endpoints.Wechat.friend) + } + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Wechat.timeline) + } + + func test_share_text_favorite() { + test_share(MediaSource.text, Endpoints.Wechat.favorite) + } + + func test_share_image_friend() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.friend) + } + + func test_share_image_timeline() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.timeline) + } + + func test_share_image_favorite() { + test_share(MediaSource.wechatImage, Endpoints.Wechat.favorite) + } + + func test_share_audio_friend() { + test_share(MediaSource.audio, Endpoints.Wechat.friend) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Wechat.timeline) + } + + func test_share_audio_favorite() { + test_share(MediaSource.audio, Endpoints.Wechat.favorite) + } + + func test_share_video_friend() { + test_share(MediaSource.video, Endpoints.Wechat.friend) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Wechat.timeline) + } + + func test_share_video_favorite() { + test_share(MediaSource.video, Endpoints.Wechat.favorite) + } + + func test_share_webPage_friend() { + test_share(MediaSource.webPage, Endpoints.Wechat.friend) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Wechat.timeline) + } + + func test_share_webPage_favorite() { + test_share(MediaSource.webPage, Endpoints.Wechat.favorite) + } + + func test_share_file_friend() { + test_share(MediaSource.file, Endpoints.Wechat.friend) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Wechat.timeline) + } + + func test_share_file_favorite() { + test_share(MediaSource.file, Endpoints.Wechat.favorite) + } + + func test_share_miniProgram_friend() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.friend) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.timeline) + } + + func test_share_miniProgram_favorite() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.favorite) + } +} + +// MARK: - Share - Common - UniversalLink + +extension WechatHandlerBaseTests: ShareCommonUniversalLinkTestCase { + + func test_share_common_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/sendreq/") + } + + func test_share_common_ul(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - UniversalLink + +extension WechatHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - UniversalLink + +extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Common - Pasteboard + +extension WechatHandlerBaseTests: ShareCommonPasteboardTestCase { + + func test_share_common_pb(dictionary: inout [String: Any]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - Pasteboard + +extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let appbrandissecrectmessage = dictionary.removeValue(forKey: "appbrandissecrectmessage") as? Bool + test_appbrandissecrectmessage(appbrandissecrectmessage, message) + + let appbrandisupdatablemessage = dictionary.removeValue(forKey: "appbrandisupdatablemessage") as? Bool + test_appbrandisupdatablemessage(appbrandisupdatablemessage, message) + + let description = dictionary.removeValue(forKey: "description") as? String + test_description(description, message) + + let disableForward = dictionary.removeValue(forKey: "disableForward") as? Bool + test_disableForward(disableForward, message) + + let miniprogramType = dictionary.removeValue(forKey: "miniprogramType") as? Int + test_miniprogramType(miniprogramType, message) + + let musicVideoDuration = dictionary.removeValue(forKey: "musicVideoDuration") as? String + test_musicVideoDuration(musicVideoDuration, message) + + let musicVideoIssueData = dictionary.removeValue(forKey: "musicVideoIssueData") as? String + test_musicVideoIssueData(musicVideoIssueData, message) + + let objectType = dictionary.removeValue(forKey: "objectType") as? String + test_objectType(objectType, message) + + let thumbData = dictionary.removeValue(forKey: "thumbData") as? Data + test_thumbData(thumbData, message) + + let weworkObjectSubType = dictionary.removeValue(forKey: "weworkObjectSubType") as? String + test_weworkObjectSubType(weworkObjectSubType, message) + + let withShareTicket = dictionary.removeValue(forKey: "withShareTicket") as? Bool + test_withShareTicket(withShareTicket, message) + } +} + +extension WechatHandlerBaseTests { + + func test_appbrandissecrectmessage(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_appbrandisupdatablemessage(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_description(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.description) + case let message as AudioMessage: + XCTAssertEqual(value!, message.description) + case let message as VideoMessage: + XCTAssertEqual(value!, message.description) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.description) + case let message as FileMessage: + XCTAssertEqual(value!, message.description) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.description) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_disableForward(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_miniprogramType(_ value: Int?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, 0) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoDuration(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_objectType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage: + XCTAssertEqual(value!, "2") + case is AudioMessage: + XCTAssertEqual(value!, "3") + case is VideoMessage: + XCTAssertEqual(value!, "4") + case is WebPageMessage: + XCTAssertEqual(value!, "5") + case is FileMessage: + XCTAssertEqual(value!, "6") + case is MiniProgramMessage: + XCTAssertEqual(value!, "36") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_thumbData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as FileMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_withShareTicket(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } +} + +// MARK: - Share - Message - Pasteboard + +extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String + test_appBrandPath(appBrandPath, message) + + let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String + test_appBrandUserName(appBrandUserName, message) + + let command = dictionary.removeValue(forKey: "command") as! String + test_command(command, message) + + let fileData = dictionary.removeValue(forKey: "fileData") as? Data + test_fileData(fileData, message) + + let fileExt = dictionary.removeValue(forKey: "fileExt") as? String + test_fileExt(fileExt, message) + + let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data + test_hdThumbData(hdThumbData, message) + + let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String + test_mediaDataUrl(mediaDataUrl, message) + + let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String + test_mediaUrl(mediaUrl, message) + + let scene = dictionary.removeValue(forKey: "scene") as! String + test_scene(scene, endpoint) + + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + } +} + +extension WechatHandlerBaseTests { + + func test_appBrandPath(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.path) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_appBrandUserName(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.miniProgramID) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_command(_ value: String, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(value, "1020") + case Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(value, "1010") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_fileData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value, message.data) + case let message as FileMessage: + XCTAssertEqual(value, message.data) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_fileExt(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as FileMessage: + XCTAssertEqual(value, message.fileExtension) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_hdThumbData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_mediaDataUrl(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertNil(value) + case let message as AudioMessage: + XCTAssertEqual(value!, message.dataLink?.absoluteString) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_mediaUrl(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage, + is ImageMessage, + is FileMessage: + XCTAssertNil(value) + case let message as AudioMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as VideoMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.link.absoluteString) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.link.absoluteString) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_scene(_ value: String, _ endpoint: Endpoint) { + switch endpoint { + case Endpoints.Wechat.friend: + XCTAssertEqual(value, "0") + case Endpoints.Wechat.timeline: + XCTAssertEqual(value, "1") + case Endpoints.Wechat.favorite: + XCTAssertEqual(value, "2") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_title(_ value: String, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(value, message.text) + case let message as ImageMessage: + XCTAssertEqual(value, message.title) + case let message as AudioMessage: + XCTAssertEqual(value, message.title) + case let message as VideoMessage: + XCTAssertEqual(value, message.title) + case let message as WebPageMessage: + XCTAssertEqual(value, message.title) + case let message as FileMessage: + XCTAssertEqual(value, message.title) + case let message as MiniProgramMessage: + XCTAssertEqual(value, message.title) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } +} + +// MARK: - Share - Completion + +extension WechatHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index f1b21af..e9b8fa7 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -40,586 +40,6 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Share - -extension WechatHandlerBaseTests: ShareTestCase { - - func test_share_text_friend() { - test_share(MediaSource.text, Endpoints.Wechat.friend) - } - - func test_share_text_timeline() { - test_share(MediaSource.text, Endpoints.Wechat.timeline) - } - - func test_share_text_favorite() { - test_share(MediaSource.text, Endpoints.Wechat.favorite) - } - - func test_share_image_friend() { - test_share(MediaSource.wechatImage, Endpoints.Wechat.friend) - } - - func test_share_image_timeline() { - test_share(MediaSource.wechatImage, Endpoints.Wechat.timeline) - } - - func test_share_image_favorite() { - test_share(MediaSource.wechatImage, Endpoints.Wechat.favorite) - } - - func test_share_audio_friend() { - test_share(MediaSource.audio, Endpoints.Wechat.friend) - } - - func test_share_audio_timeline() { - test_share(MediaSource.audio, Endpoints.Wechat.timeline) - } - - func test_share_audio_favorite() { - test_share(MediaSource.audio, Endpoints.Wechat.favorite) - } - - func test_share_video_friend() { - test_share(MediaSource.video, Endpoints.Wechat.friend) - } - - func test_share_video_timeline() { - test_share(MediaSource.video, Endpoints.Wechat.timeline) - } - - func test_share_video_favorite() { - test_share(MediaSource.video, Endpoints.Wechat.favorite) - } - - func test_share_webPage_friend() { - test_share(MediaSource.webPage, Endpoints.Wechat.friend) - } - - func test_share_webPage_timeline() { - test_share(MediaSource.webPage, Endpoints.Wechat.timeline) - } - - func test_share_webPage_favorite() { - test_share(MediaSource.webPage, Endpoints.Wechat.favorite) - } - - func test_share_file_friend() { - test_share(MediaSource.file, Endpoints.Wechat.friend) - } - - func test_share_file_timeline() { - test_share(MediaSource.file, Endpoints.Wechat.timeline) - } - - func test_share_file_favorite() { - test_share(MediaSource.file, Endpoints.Wechat.favorite) - } - - func test_share_miniProgram_friend() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.friend) - } - - func test_share_miniProgram_timeline() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.timeline) - } - - func test_share_miniProgram_favorite() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Wechat.favorite) - } -} - -// MARK: - Share - Common - UniversalLink - -extension WechatHandlerBaseTests: ShareCommonUniversalLinkTestCase { - - func test_share_common_ul(path: String) { - XCTAssertEqual(path, "/app/\(appID)/sendreq/") - } - - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension WechatHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - UniversalLink - -extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Common - Pasteboard - -extension WechatHandlerBaseTests: ShareCommonPasteboardTestCase { - - func test_share_common_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - Pasteboard - -extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { - - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let appbrandissecrectmessage = dictionary.removeValue(forKey: "appbrandissecrectmessage") as? Bool - test_appbrandissecrectmessage(appbrandissecrectmessage, message) - - let appbrandisupdatablemessage = dictionary.removeValue(forKey: "appbrandisupdatablemessage") as? Bool - test_appbrandisupdatablemessage(appbrandisupdatablemessage, message) - - let description = dictionary.removeValue(forKey: "description") as? String - test_description(description, message) - - let disableForward = dictionary.removeValue(forKey: "disableForward") as? Bool - test_disableForward(disableForward, message) - - let miniprogramType = dictionary.removeValue(forKey: "miniprogramType") as? Int - test_miniprogramType(miniprogramType, message) - - let musicVideoDuration = dictionary.removeValue(forKey: "musicVideoDuration") as? String - test_musicVideoDuration(musicVideoDuration, message) - - let musicVideoIssueData = dictionary.removeValue(forKey: "musicVideoIssueData") as? String - test_musicVideoIssueData(musicVideoIssueData, message) - - let objectType = dictionary.removeValue(forKey: "objectType") as? String - test_objectType(objectType, message) - - let thumbData = dictionary.removeValue(forKey: "thumbData") as? Data - test_thumbData(thumbData, message) - - let weworkObjectSubType = dictionary.removeValue(forKey: "weworkObjectSubType") as? String - test_weworkObjectSubType(weworkObjectSubType, message) - - let withShareTicket = dictionary.removeValue(forKey: "withShareTicket") as? Bool - test_withShareTicket(withShareTicket, message) - } -} - -extension WechatHandlerBaseTests { - - func test_appbrandissecrectmessage(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_appbrandisupdatablemessage(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_description(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.description) - case let message as AudioMessage: - XCTAssertEqual(value!, message.description) - case let message as VideoMessage: - XCTAssertEqual(value!, message.description) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.description) - case let message as FileMessage: - XCTAssertEqual(value!, message.description) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.description) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_disableForward(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_miniprogramType(_ value: Int?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, 0) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_musicVideoDuration(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_objectType(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage: - XCTAssertEqual(value!, "2") - case is AudioMessage: - XCTAssertEqual(value!, "3") - case is VideoMessage: - XCTAssertEqual(value!, "4") - case is WebPageMessage: - XCTAssertEqual(value!, "5") - case is FileMessage: - XCTAssertEqual(value!, "6") - case is MiniProgramMessage: - XCTAssertEqual(value!, "36") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_thumbData(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_withShareTicket(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } -} - -// MARK: - Share - Message - Pasteboard - -extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String - test_appBrandPath(appBrandPath, message) - - let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String - test_appBrandUserName(appBrandUserName, message) - - let command = dictionary.removeValue(forKey: "command") as! String - test_command(command, message) - - let fileData = dictionary.removeValue(forKey: "fileData") as? Data - test_fileData(fileData, message) - - let fileExt = dictionary.removeValue(forKey: "fileExt") as? String - test_fileExt(fileExt, message) - - let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data - test_hdThumbData(hdThumbData, message) - - let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String - test_mediaDataUrl(mediaDataUrl, message) - - let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String - test_mediaUrl(mediaUrl, message) - - let scene = dictionary.removeValue(forKey: "scene") as! String - test_scene(scene, endpoint) - - let title = dictionary.removeValue(forKey: "title") as! String - test_title(title, message) - } -} - -extension WechatHandlerBaseTests { - - func test_appBrandPath(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.path) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_appBrandUserName(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.miniProgramID) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_command(_ value: String, _ message: MessageType) { - switch message.identifier { - case Messages.text: - XCTAssertEqual(value, "1020") - case Messages.image, - Messages.audio, - Messages.video, - Messages.webPage, - Messages.file, - Messages.miniProgram: - XCTAssertEqual(value, "1010") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_fileData(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is MiniProgramMessage: - XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value, message.data) - case let message as FileMessage: - XCTAssertEqual(value, message.data) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_fileExt(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is MiniProgramMessage: - XCTAssertNil(value) - case let message as FileMessage: - XCTAssertEqual(value, message.fileExtension) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_hdThumbData(_ value: Data?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_mediaDataUrl(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertNil(value) - case let message as AudioMessage: - XCTAssertEqual(value!, message.dataLink?.absoluteString) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_mediaUrl(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as AudioMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as VideoMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.link.absoluteString) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.link.absoluteString) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_scene(_ value: String, _ endpoint: Endpoint) { - switch endpoint { - case Endpoints.Wechat.friend: - XCTAssertEqual(value, "0") - case Endpoints.Wechat.timeline: - XCTAssertEqual(value, "1") - case Endpoints.Wechat.favorite: - XCTAssertEqual(value, "2") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_title(_ value: String, _ message: MessageType) { - switch message { - case let message as TextMessage: - XCTAssertEqual(value, message.text) - case let message as ImageMessage: - XCTAssertEqual(value, message.title) - case let message as AudioMessage: - XCTAssertEqual(value, message.title) - case let message as VideoMessage: - XCTAssertEqual(value, message.title) - case let message as WebPageMessage: - XCTAssertEqual(value, message.title) - case let message as FileMessage: - XCTAssertEqual(value, message.title) - case let message as MiniProgramMessage: - XCTAssertEqual(value, message.title) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } -} - -// MARK: - Share - Completion - -extension WechatHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) - } -} - // MARK: - Oauth extension WechatHandlerBaseTests: OauthTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift new file mode 100644 index 0000000..65cbc35 --- /dev/null +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -0,0 +1,317 @@ +// +// WeiboHandlerBaseTests+Share.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Share + +extension WeiboHandlerBaseTests: ShareTestCase { + + func test_share_text_timeline() { + test_share(MediaSource.text, Endpoints.Weibo.timeline) + } + + func test_share_image_timeline() { + test_share(MediaSource.image, Endpoints.Weibo.timeline) + } + + func test_share_audio_timeline() { + test_share(MediaSource.audio, Endpoints.Weibo.timeline) + } + + func test_share_video_timeline() { + test_share(MediaSource.video, Endpoints.Weibo.timeline) + } + + func test_share_webPage_timeline() { + test_share(MediaSource.webPage, Endpoints.Weibo.timeline) + } + + func test_share_file_timeline() { + test_share(MediaSource.file, Endpoints.Weibo.timeline) + } + + func test_share_miniProgram_timeline() { + test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) + } +} + +// MARK: - Share - Common - UniversalLink + +extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { + + func test_share_common_ul(path: String) { + XCTAssertEqual(path, "/weibosdk/request") + } + + func test_share_common_ul(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - MediaMessage - UniversalLink + +extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + + func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - UniversalLink + +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { + + func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Common - Pasteboard + +extension WeiboHandlerBaseTests: ShareCommonPasteboardTestCase { + + func test_share_common_pb(dictionary: inout [String: Any]) { + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_share(`class`) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_share(_ value: String) { + XCTAssertEqual(value, "WBSendMessageToWeiboRequest") + } +} + +// MARK: - Share - MediaMessage - Pasteboard + +extension WeiboHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - Pasteboard + +extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { + + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let _message = dictionary.removeValue(forKey: "message") as! [String: Any] + test_message(_message, message, endpoint) + } +} + +extension WeiboHandlerBaseTests { + + func test_message(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_message(`class`) + + let imageObject = dictionary.removeValue(forKey: "imageObject") as? [String: Any] + test_imageObject(imageObject, message, endpoint) + + let mediaObject = dictionary.removeValue(forKey: "mediaObject") as? [String: Any] + test_mediaObject(mediaObject, message, endpoint) + + let text = dictionary.removeValue(forKey: "text") as? String + test_text(text, message) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_message(_ value: String) { + XCTAssertEqual(value, "WBMessageObject") + } + + func test_imageObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { + switch message { + case is TextMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage: + XCTAssertNil(value) + case is ImageMessage: + test_image(value!, message, endpoint) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_mediaObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { + switch message { + case is TextMessage, + is ImageMessage: + XCTAssertNil(value) + case is AudioMessage, + is VideoMessage, + is WebPageMessage: + test_media(value!, message, endpoint) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_text(_ value: String?, _ message: MessageType) { + switch message { + case let message as TextMessage: + XCTAssertEqual(value!, message.text) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage: + XCTAssertNil(value) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_image(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let imageData = dictionary.removeValue(forKey: "imageData") as! Data + test_imageData(imageData, message) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_imageData(_ value: Data, _ message: MessageType) { + switch message { + case let message as ImageMessage: + XCTAssertEqual(value, message.data) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_media(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_media(`class`) + + let description = dictionary.removeValue(forKey: "description") as! String + test_description(description, message) + + let objectID = dictionary.removeValue(forKey: "objectID") as! String + test_objectID(objectID) + + let thumbnailData = dictionary.removeValue(forKey: "thumbnailData") as! Data + test_thumbnailData(thumbnailData, message) + + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + + let webpageUrl = dictionary.removeValue(forKey: "webpageUrl") as! String + test_webpageUrl(webpageUrl, message) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_media(_ value: String) { + XCTAssertEqual(value, "WBWebpageObject") + } + + func test_description(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.description) + case let message as VideoMessage: + XCTAssertEqual(value, message.description) + case let message as WebPageMessage: + XCTAssertEqual(value, message.description) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_objectID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } + + func test_thumbnailData(_ value: Data, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value, message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(value, message.thumbnail) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_title(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.title) + case let message as VideoMessage: + XCTAssertEqual(value, message.title) + case let message as WebPageMessage: + XCTAssertEqual(value, message.title) + default: + XCTAssertTrue(false, String(describing: value)) + } + } + + func test_webpageUrl(_ value: String, _ message: MessageType) { + switch message { + case let message as AudioMessage: + XCTAssertEqual(value, message.link.absoluteString) + case let message as VideoMessage: + XCTAssertEqual(value, message.link.absoluteString) + case let message as WebPageMessage: + XCTAssertEqual(value, message.link.absoluteString) + default: + XCTAssertTrue(false, String(describing: value)) + } + } +} + +// MARK: - Share - Completion + +extension WeiboHandlerBaseTests: ShareCompletionTestCase { + + func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) + } +} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index c6e875a..5761c5f 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -62,312 +62,6 @@ class WeiboHandlerBaseTests: HandlerBaseTests { }() } -// MARK: - Share - -extension WeiboHandlerBaseTests: ShareTestCase { - - func test_share_text_timeline() { - test_share(MediaSource.text, Endpoints.Weibo.timeline) - } - - func test_share_image_timeline() { - test_share(MediaSource.image, Endpoints.Weibo.timeline) - } - - func test_share_audio_timeline() { - test_share(MediaSource.audio, Endpoints.Weibo.timeline) - } - - func test_share_video_timeline() { - test_share(MediaSource.video, Endpoints.Weibo.timeline) - } - - func test_share_webPage_timeline() { - test_share(MediaSource.webPage, Endpoints.Weibo.timeline) - } - - func test_share_file_timeline() { - test_share(MediaSource.file, Endpoints.Weibo.timeline) - } - - func test_share_miniProgram_timeline() { - test_share(MediaSource.wechatMiniProgram, Endpoints.Weibo.timeline) - } -} - -// MARK: - Share - Common - UniversalLink - -extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { - - func test_share_common_ul(path: String) { - XCTAssertEqual(path, "/weibosdk/request") - } - - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - UniversalLink - -extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Common - Pasteboard - -extension WeiboHandlerBaseTests: ShareCommonPasteboardTestCase { - - func test_share_common_pb(dictionary: inout [String: Any]) { - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_share(`class`) - } -} - -extension WeiboHandlerBaseTests { - - func test_class_share(_ value: String) { - XCTAssertEqual(value, "WBSendMessageToWeiboRequest") - } -} - -// MARK: - Share - MediaMessage - Pasteboard - -extension WeiboHandlerBaseTests: ShareMediaMessagePasteboardTestCase { - - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - Pasteboard - -extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let _message = dictionary.removeValue(forKey: "message") as! [String: Any] - test_message(_message, message, endpoint) - } -} - -extension WeiboHandlerBaseTests { - - func test_message(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - var dictionary = value - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_message(`class`) - - let imageObject = dictionary.removeValue(forKey: "imageObject") as? [String: Any] - test_imageObject(imageObject, message, endpoint) - - let mediaObject = dictionary.removeValue(forKey: "mediaObject") as? [String: Any] - test_mediaObject(mediaObject, message, endpoint) - - let text = dictionary.removeValue(forKey: "text") as? String - test_text(text, message) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_class_message(_ value: String) { - XCTAssertEqual(value, "WBMessageObject") - } - - func test_imageObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { - switch message { - case is TextMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage: - XCTAssertNil(value) - case is ImageMessage: - test_image(value!, message, endpoint) - default: - XCTAssertTrue(false, String(describing: value)) - } - } - - func test_mediaObject(_ value: [String: Any]?, _ message: MessageType, _ endpoint: Endpoint) { - switch message { - case is TextMessage, - is ImageMessage: - XCTAssertNil(value) - case is AudioMessage, - is VideoMessage, - is WebPageMessage: - test_media(value!, message, endpoint) - default: - XCTAssertTrue(false, String(describing: value)) - } - } - - func test_text(_ value: String?, _ message: MessageType) { - switch message { - case let message as TextMessage: - XCTAssertEqual(value!, message.text) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage: - XCTAssertNil(value) - default: - XCTAssertTrue(false, String(describing: value)) - } - } -} - -extension WeiboHandlerBaseTests { - - func test_image(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - var dictionary = value - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - let imageData = dictionary.removeValue(forKey: "imageData") as! Data - test_imageData(imageData, message) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_imageData(_ value: Data, _ message: MessageType) { - switch message { - case let message as ImageMessage: - XCTAssertEqual(value, message.data) - default: - XCTAssertTrue(false, String(describing: value)) - } - } -} - -extension WeiboHandlerBaseTests { - - func test_media(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - var dictionary = value - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_media(`class`) - - let description = dictionary.removeValue(forKey: "description") as! String - test_description(description, message) - - let objectID = dictionary.removeValue(forKey: "objectID") as! String - test_objectID(objectID) - - let thumbnailData = dictionary.removeValue(forKey: "thumbnailData") as! Data - test_thumbnailData(thumbnailData, message) - - let title = dictionary.removeValue(forKey: "title") as! String - test_title(title, message) - - let webpageUrl = dictionary.removeValue(forKey: "webpageUrl") as! String - test_webpageUrl(webpageUrl, message) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -extension WeiboHandlerBaseTests { - - func test_class_media(_ value: String) { - XCTAssertEqual(value, "WBWebpageObject") - } - - func test_description(_ value: String, _ message: MessageType) { - switch message { - case let message as AudioMessage: - XCTAssertEqual(value, message.description) - case let message as VideoMessage: - XCTAssertEqual(value, message.description) - case let message as WebPageMessage: - XCTAssertEqual(value, message.description) - default: - XCTAssertTrue(false, String(describing: value)) - } - } - - func test_objectID(_ value: String) { - XCTAssertNotNil(UUID(uuidString: value)) - } - - func test_thumbnailData(_ value: Data, _ message: MessageType) { - switch message { - case let message as AudioMessage: - XCTAssertEqual(value, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value, message.thumbnail) - case let message as WebPageMessage: - XCTAssertEqual(value, message.thumbnail) - default: - XCTAssertTrue(false, String(describing: value)) - } - } - - func test_title(_ value: String, _ message: MessageType) { - switch message { - case let message as AudioMessage: - XCTAssertEqual(value, message.title) - case let message as VideoMessage: - XCTAssertEqual(value, message.title) - case let message as WebPageMessage: - XCTAssertEqual(value, message.title) - default: - XCTAssertTrue(false, String(describing: value)) - } - } - - func test_webpageUrl(_ value: String, _ message: MessageType) { - switch message { - case let message as AudioMessage: - XCTAssertEqual(value, message.link.absoluteString) - case let message as VideoMessage: - XCTAssertEqual(value, message.link.absoluteString) - case let message as WebPageMessage: - XCTAssertEqual(value, message.link.absoluteString) - default: - XCTAssertTrue(false, String(describing: value)) - } - } -} - -// MARK: - Share - Completion - -extension WeiboHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) - } -} - // MARK: - Oauth extension WeiboHandlerBaseTests: OauthTestCase { From b69ed6bdcd7b1632395ebafa2bcc37c7d72d9b18 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:40:45 +0800 Subject: [PATCH 077/123] refactor: oauth test --- .../NBusTests/Base/HandlerBaseTestCase.swift | 69 --------- .../Base/HandlerBaseTests+Oauth.swift | 132 ++++++++++++++++++ Tests/NBusTests/Base/HandlerBaseTests.swift | 120 ---------------- Tests/NBusTests/Base/OauthTestCase.swift | 81 +++++++++++ .../QQ/QQHandlerBaseTests+Oauth.swift | 100 +++++++++++++ Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 89 ------------ .../Wechat/WechatHandlerBaseTests+Oauth.swift | 65 +++++++++ .../Wechat/WechatHandlerBaseTests.swift | 54 ------- .../Weibo/WeiboHandlerBaseTests+Oauth.swift | 57 ++++++++ .../Weibo/WeiboHandlerBaseTests.swift | 46 ------ 10 files changed, 435 insertions(+), 378 deletions(-) create mode 100644 Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift create mode 100644 Tests/NBusTests/Base/OauthTestCase.swift create mode 100644 Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift create mode 100644 Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift create mode 100644 Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index 15c44be..acc4485 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -11,75 +11,6 @@ import Foundation import RxSwift import XCTest -// MARK: - Oauth - Platform - UniversalLink - -protocol OauthPlatformUniversalLinkTestCase: XCTestCase { - - /// Test oauth universal link path - func test_oauth_ul(path: String) - - /// Test oauth universal link queryItems - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) -} - -// MARK: - Oauth - URL - -protocol OauthURLTestCase: - GeneralUniversalLinkTestCase, - OauthPlatformUniversalLinkTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Test oauth universal link - func test_oauth(url: URL, _ platform: Platform) -} - -// MARK: - Oauth - Platform - Pasteboard - -protocol OauthPlatformPasteboardTestCase: XCTestCase { - - /// Test oauth pasteboard dictionary - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) -} - -// MARK: - Oauth - Pasteboard - -protocol OauthPasteboardTestCase: - GeneralPasteboardTestCase, - OauthPlatformPasteboardTestCase { - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test oauth pasteboard - func test_oauth(items: [[String: Any]], _ platform: Platform) - - /// Test oauth pasteboard major data - func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) -} - -// MARK: - Oauth - Completion - -protocol OauthCompletionTestCase: XCTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test oauth completion - func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) -} - -// MARK: - Oauth - -protocol OauthTestCase: OauthURLTestCase, OauthPasteboardTestCase, OauthCompletionTestCase { - - var disposeBag: DisposeBag { get } -} - // MARK: - Launch - Program - UniversalLink protocol LaunchProgramUniversalLinkTestCase: XCTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift new file mode 100644 index 0000000..127b81c --- /dev/null +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -0,0 +1,132 @@ +// +// HandlerBaseTests+Oauth.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Oauth + +extension OauthTestCase { + + func test_oauth(_ platform: Platform) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_oauth(url: url, platform) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .do(onNext: { [unowned self] items in + if platform == Platforms.qq { + precondition(items.isEmpty) + + self.pbExpectation.fulfill() + } + }) + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_oauth(items: items, platform) + }) + .disposed(by: disposeBag) + + Bus.shared.oauth( + with: platform, + completionHandler: { [unowned self] result in + self.test_oauth(result: result, platform) + } + ) + + wait(for: [ulExpectation, pbExpectation], timeout: 5) + } +} + +// MARK: - Oauth - URL + +extension OauthURLTestCase { + + func test_oauth(url: URL, _ platform: Platform) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Oauth - UniversalLink + + test_oauth_ul(path: urlComponents.path) + test_oauth_ul(queryItems: &queryItems, platform) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: - Oauth - Pasteboard + +extension OauthPasteboardTestCase { + + func test_oauth(items: [[String: Any]], _ platform: Platform) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_oauth_major_pb(dictionary: test_extract_major_pb(items: &items), platform) + + test_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Oauth - Platform - Pasteboard + + test_oauth_pb(dictionary: &dictionary, platform) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +// MARK: - Oauth - Completion + +extension OauthCompletionTestCase { + + func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) { + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index c3710a2..c23f7e7 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -123,126 +123,6 @@ extension HandlerBaseTests { } } -// MARK: - Oauth - -extension OauthTestCase { - - func test_oauth(_ platform: Platform) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_oauth(url: url, platform) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .do(onNext: { [unowned self] items in - if platform == Platforms.qq { - precondition(items.isEmpty) - - self.pbExpectation.fulfill() - } - }) - .filter { !$0.isEmpty } - .bind(onNext: { [unowned self] items in - self.test_oauth(items: items, platform) - }) - .disposed(by: disposeBag) - - Bus.shared.oauth( - with: platform, - completionHandler: { [unowned self] result in - self.test_oauth(result: result, platform) - } - ) - - wait(for: [ulExpectation, pbExpectation], timeout: 5) - } -} - -// MARK: - Oauth - URL - -extension OauthURLTestCase { - - func test_oauth(url: URL, _ platform: Platform) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - - // General - UniversalLink - - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) - test_general_ul(queryItems: &queryItems) - - // Oauth - UniversalLink - - test_oauth_ul(path: urlComponents.path) - test_oauth_ul(queryItems: &queryItems, platform) - - logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") - - XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() - } -} - -// MARK: - Oauth - Pasteboard - -extension OauthPasteboardTestCase { - - func test_oauth(items: [[String: Any]], _ platform: Platform) { - var items = items as! [[String: Data]] - - logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - - test_oauth_major_pb(dictionary: test_extract_major_pb(items: &items), platform) - - test_extra_pb(items: &items) - - logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") - - XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() - } - - func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) { - var dictionary = dictionary - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - // General - Pasteboard - - test_general_pb(dictionary: &dictionary) - - // Oauth - Platform - Pasteboard - - test_oauth_pb(dictionary: &dictionary, platform) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -// MARK: - Oauth - Completion - -extension OauthCompletionTestCase { - - func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) { - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } -} - // MARK: - Launch extension LaunchTestCase { diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift new file mode 100644 index 0000000..808dabb --- /dev/null +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -0,0 +1,81 @@ +// +// OauthTestCase.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Oauth - Platform - UniversalLink + +protocol OauthPlatformUniversalLinkTestCase: XCTestCase { + + /// Test oauth universal link path + func test_oauth_ul(path: String) + + /// Test oauth universal link queryItems + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) +} + +// MARK: - Oauth - URL + +protocol OauthURLTestCase: + GeneralUniversalLinkTestCase, + OauthPlatformUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test oauth universal link + func test_oauth(url: URL, _ platform: Platform) +} + +// MARK: - Oauth - Platform - Pasteboard + +protocol OauthPlatformPasteboardTestCase: XCTestCase { + + /// Test oauth pasteboard dictionary + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) +} + +// MARK: - Oauth - Pasteboard + +protocol OauthPasteboardTestCase: + GeneralPasteboardTestCase, + OauthPlatformPasteboardTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test oauth pasteboard + func test_oauth(items: [[String: Any]], _ platform: Platform) + + /// Test oauth pasteboard major data + func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) +} + +// MARK: - Oauth - Completion + +protocol OauthCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test oauth completion + func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) +} + +// MARK: - Oauth + +protocol OauthTestCase: OauthURLTestCase, OauthPasteboardTestCase, OauthCompletionTestCase { + + var disposeBag: DisposeBag { get } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift new file mode 100644 index 0000000..9473714 --- /dev/null +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -0,0 +1,100 @@ +// +// QQHandlerBaseTests+Oauth.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Oauth + +extension QQHandlerBaseTests: OauthTestCase { + + func test_oauth() { + test_oauth(Platforms.qq) + } +} + +// MARK: Oauth - Platform - UniversalLink + +extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { + + func test_oauth_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") + } + + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" }! + test_objectlocation(objectlocation) + + let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" }! + test_pasteboard(pasteboard) + } +} + +extension QQHandlerBaseTests { + + func test_objectlocation(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value, "url") + } + + func test_pasteboard(_ queryItem: URLQueryItem) { + let data = Data(base64Encoded: queryItem.value!)! + var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + + let appsign_token = object.removeValue(forKey: "appsign_token") as! String + XCTAssertEqual(appsign_token, "") + + let app_id = object.removeValue(forKey: "app_id") as! String + XCTAssertEqual(app_id, appNumber) + + let app_name = object.removeValue(forKey: "app_name") as! String + XCTAssertEqual(app_name, displayName) + + let bundleid = object.removeValue(forKey: "bundleid") as! String + XCTAssertEqual(bundleid, bundleID) + + let client_id = object.removeValue(forKey: "client_id") as! String + XCTAssertEqual(client_id, appNumber) + + let refUniversallink = object.removeValue(forKey: "refUniversallink") as! String + XCTAssertEqual(refUniversallink, universalLink.absoluteString) + + let response_type = object.removeValue(forKey: "response_type") as! String + XCTAssertEqual(response_type, "token") + + let scope = object.removeValue(forKey: "scope") as! String + XCTAssertEqual(scope, "get_user_info") + + let sdkp = object.removeValue(forKey: "sdkp") as! String + XCTAssertEqual(sdkp, "i") + + let sdkv = object.removeValue(forKey: "sdkv") as! String + XCTAssertEqual(sdkv, sdkVersion) + + let status_machine = object.removeValue(forKey: "status_machine") as! String + XCTAssertEqual(status_machine, statusMachine) + + let status_os = object.removeValue(forKey: "status_os") as! String + XCTAssertEqual(status_os, statusOS) + + let status_version = object.removeValue(forKey: "status_version") as! String + XCTAssertEqual(status_version, statusVersion) + + logger.debug("\(URLComponents.self), \(object.keys.sorted())") + XCTAssertTrue(object.isEmpty) + } +} + +// MARK: - Oauth - Platform - Pasteboard + +extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { + + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + XCTAssertTrue(true) + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 0814190..96f7d88 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -60,95 +60,6 @@ class QQHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Oauth - -extension QQHandlerBaseTests: OauthTestCase { - - func test_oauth() { - test_oauth(Platforms.qq) - } -} - -// MARK: Oauth - Platform - UniversalLink - -extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - - func test_oauth_ul(path: String) { - XCTAssertEqual(path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") - } - - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { - let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" }! - test_objectlocation(objectlocation) - - let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" }! - test_pasteboard(pasteboard) - } -} - -extension QQHandlerBaseTests { - - func test_objectlocation(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value, "url") - } - - func test_pasteboard(_ queryItem: URLQueryItem) { - let data = Data(base64Encoded: queryItem.value!)! - var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - - let appsign_token = object.removeValue(forKey: "appsign_token") as! String - XCTAssertEqual(appsign_token, "") - - let app_id = object.removeValue(forKey: "app_id") as! String - XCTAssertEqual(app_id, appNumber) - - let app_name = object.removeValue(forKey: "app_name") as! String - XCTAssertEqual(app_name, displayName) - - let bundleid = object.removeValue(forKey: "bundleid") as! String - XCTAssertEqual(bundleid, bundleID) - - let client_id = object.removeValue(forKey: "client_id") as! String - XCTAssertEqual(client_id, appNumber) - - let refUniversallink = object.removeValue(forKey: "refUniversallink") as! String - XCTAssertEqual(refUniversallink, universalLink.absoluteString) - - let response_type = object.removeValue(forKey: "response_type") as! String - XCTAssertEqual(response_type, "token") - - let scope = object.removeValue(forKey: "scope") as! String - XCTAssertEqual(scope, "get_user_info") - - let sdkp = object.removeValue(forKey: "sdkp") as! String - XCTAssertEqual(sdkp, "i") - - let sdkv = object.removeValue(forKey: "sdkv") as! String - XCTAssertEqual(sdkv, sdkVersion) - - let status_machine = object.removeValue(forKey: "status_machine") as! String - XCTAssertEqual(status_machine, statusMachine) - - let status_os = object.removeValue(forKey: "status_os") as! String - XCTAssertEqual(status_os, statusOS) - - let status_version = object.removeValue(forKey: "status_version") as! String - XCTAssertEqual(status_version, statusVersion) - - logger.debug("\(URLComponents.self), \(object.keys.sorted())") - XCTAssertTrue(object.isEmpty) - } -} - -// MARK: - Oauth - Platform - Pasteboard - -extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { - - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { - XCTAssertTrue(true) - } -} - // MARK: - Launch extension QQHandlerBaseTests: LaunchTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift new file mode 100644 index 0000000..45f5d64 --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift @@ -0,0 +1,65 @@ +// +// WechatHandlerBaseTests+Oauth.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Oauth + +extension WechatHandlerBaseTests: OauthTestCase { + + func test_oauth() { + test_oauth(Platforms.wechat) + } +} + +// MARK: - Oauth - Platform - UniversalLink + +extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { + + func test_oauth_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/auth/") + } + + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + let scope = queryItems.removeFirst { $0.name == "scope" }! + test_scope(scope) + + let state = queryItems.removeFirst { $0.name == "state" }! + test_state(state) + } +} + +extension WechatHandlerBaseTests { + + func test_scope(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "snsapi_userinfo") + } + + func test_state(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "") + } +} + +// MARK: - Oauth - Platform - Pasteboard + +extension WechatHandlerBaseTests: OauthPlatformPasteboardTestCase { + + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + let command = dictionary.removeValue(forKey: "command") as! String + test_command_oauth(command) + } +} + +extension WechatHandlerBaseTests { + + func test_command_oauth(_ value: String) { + XCTAssertEqual(value, "0") + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index e9b8fa7..38476b2 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -40,60 +40,6 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } -// MARK: - Oauth - -extension WechatHandlerBaseTests: OauthTestCase { - - func test_oauth() { - test_oauth(Platforms.wechat) - } -} - -// MARK: - Oauth - Platform - UniversalLink - -extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - - func test_oauth_ul(path: String) { - XCTAssertEqual(path, "/app/\(appID)/auth/") - } - - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { - let scope = queryItems.removeFirst { $0.name == "scope" }! - test_scope(scope) - - let state = queryItems.removeFirst { $0.name == "state" }! - test_state(state) - } -} - -extension WechatHandlerBaseTests { - - func test_scope(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "snsapi_userinfo") - } - - func test_state(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "") - } -} - -// MARK: - Oauth - Platform - Pasteboard - -extension WechatHandlerBaseTests: OauthPlatformPasteboardTestCase { - - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { - let command = dictionary.removeValue(forKey: "command") as! String - test_command_oauth(command) - } -} - -extension WechatHandlerBaseTests { - - func test_command_oauth(_ value: String) { - XCTAssertEqual(value, "0") - } -} - // MARK: - Launch extension WechatHandlerBaseTests: LaunchTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift new file mode 100644 index 0000000..3b23431 --- /dev/null +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift @@ -0,0 +1,57 @@ +// +// WeiboHandlerBaseTests+Oauth.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Oauth + +extension WeiboHandlerBaseTests: OauthTestCase { + + func test_oauth() { + test_oauth(Platforms.weibo) + } +} + +// MARK: - Oauth - Platform -UniversalLink + +extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { + + func test_oauth_ul(path: String) { + test_share_common_ul(path: path) + } + + func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + XCTAssertTrue(true) + } +} + +// MARK: - Oauth - Platform - Pasteboard + +extension WeiboHandlerBaseTests: OauthPlatformPasteboardTestCase { + + func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_oauth(`class`) + + let redirectURI = dictionary.removeValue(forKey: "redirectURI") as! String + test_redirectURI(redirectURI) + } +} + +extension WeiboHandlerBaseTests { + + func test_class_oauth(_ value: String) { + XCTAssertEqual(value, "WBAuthorizeRequest") + } + + func test_redirectURI(_ value: String) { + XCTAssertEqual(value, redirectLink.absoluteString) + } +} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index 5761c5f..d63d15a 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -61,49 +61,3 @@ class WeiboHandlerBaseTests: HandlerBaseTests { return dateFormatter }() } - -// MARK: - Oauth - -extension WeiboHandlerBaseTests: OauthTestCase { - - func test_oauth() { - test_oauth(Platforms.weibo) - } -} - -// MARK: - Oauth - Platform -UniversalLink - -extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { - - func test_oauth_ul(path: String) { - test_share_common_ul(path: path) - } - - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { - XCTAssertTrue(true) - } -} - -// MARK: - Oauth - Platform - Pasteboard - -extension WeiboHandlerBaseTests: OauthPlatformPasteboardTestCase { - - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_oauth(`class`) - - let redirectURI = dictionary.removeValue(forKey: "redirectURI") as! String - test_redirectURI(redirectURI) - } -} - -extension WeiboHandlerBaseTests { - - func test_class_oauth(_ value: String) { - XCTAssertEqual(value, "WBAuthorizeRequest") - } - - func test_redirectURI(_ value: String) { - XCTAssertEqual(value, redirectLink.absoluteString) - } -} From 73c4e28bc854af06352146f7bcef82fe22aadc2a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:44:23 +0800 Subject: [PATCH 078/123] refactor: launch test --- .../NBusTests/Base/HandlerBaseTestCase.swift | 69 ---------- .../Base/HandlerBaseTests+Launch.swift | 124 ++++++++++++++++++ Tests/NBusTests/Base/HandlerBaseTests.swift | 112 ---------------- Tests/NBusTests/Base/LaunchTestCase.swift | 81 ++++++++++++ .../QQ/QQHandlerBaseTests+Launch.swift | 74 +++++++++++ Tests/NBusTests/QQ/QQHandlerBaseTests.swift | 63 --------- .../WechatHandlerBaseTests+Launch.swift | 105 +++++++++++++++ .../Wechat/WechatHandlerBaseTests.swift | 94 ------------- 8 files changed, 384 insertions(+), 338 deletions(-) create mode 100644 Tests/NBusTests/Base/HandlerBaseTests+Launch.swift create mode 100644 Tests/NBusTests/Base/LaunchTestCase.swift create mode 100644 Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift create mode 100644 Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift index acc4485..84e4e05 100644 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ b/Tests/NBusTests/Base/HandlerBaseTestCase.swift @@ -10,72 +10,3 @@ import Foundation @testable import NBus import RxSwift import XCTest - -// MARK: - Launch - Program - UniversalLink - -protocol LaunchProgramUniversalLinkTestCase: XCTestCase { - - /// Test launch universal link path - func test_launch_ul(path: String) - - /// Test launch universal link queryItems - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) -} - -// MARK: - Launch - URL - -protocol LaunchURLTestCase: - GeneralUniversalLinkTestCase, - LaunchProgramUniversalLinkTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Test launch universal link - func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) -} - -// MARK: - Launch - Platform - Pasteboard - -protocol LaunchProgramPasteboardTestCase: XCTestCase { - - /// Test launch pasteboard dictionary - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) -} - -// MARK: - Launch - Pasteboard - -protocol LaunchPasteboardTestCase: - GeneralPasteboardTestCase, - LaunchProgramPasteboardTestCase { - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test launch pasteboard - func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) - - /// Test launch pasteboard major data - func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) -} - -// MARK: - Launch - Completion - -protocol LaunchCompletionTestCase: XCTestCase { - - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - - /// Test launch completion - func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) -} - -// MARK: - Launch - -protocol LaunchTestCase: LaunchURLTestCase, LaunchPasteboardTestCase, LaunchCompletionTestCase { - - var disposeBag: DisposeBag { get } -} diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift new file mode 100644 index 0000000..055ab8d --- /dev/null +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -0,0 +1,124 @@ +// +// HandlerBaseTests+Launch.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Launch + +extension LaunchTestCase { + + func test_launch(_ platform: Platform, _ program: MiniProgramMessage) { + UIApplication.shared.rx + .openURL() + .bind(onNext: { [unowned self] url in + self.test_launch(url: url, platform, program) + }) + .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .filter { !$0.isEmpty } + .bind(onNext: { [unowned self] items in + self.test_launch(items: items, platform, program) + }) + .disposed(by: disposeBag) + + Bus.shared.launch( + program: program, + with: platform, + completionHandler: { [unowned self] result in + self.test_launch(result: result, platform, program) + } + ) + } +} + +// MARK: - Launch - URL + +extension LaunchURLTestCase { + + func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink + + test_general_ul(scheme: urlComponents.scheme!) + test_general_ul(host: urlComponents.host!) + test_general_ul(queryItems: &queryItems) + + // Launch - UniversalLink + + test_launch_ul(path: urlComponents.path) + test_launch_ul(queryItems: &queryItems, platform, program) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + + ulExpectation.fulfill() + } +} + +// MARK: - Launch - Pasteboard + +extension LaunchPasteboardTestCase { + + func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + test_launch_major_pb(dictionary: test_extract_major_pb(items: &items), platform, program) + + test_extra_pb(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + + pbExpectation.fulfill() + } + + func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard + + test_general_pb(dictionary: &dictionary) + + // Launch - Program - Pasteboard + + test_launch_pb(dictionary: &dictionary, platform, program) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) + } +} + +// MARK: - Launch - Completion + +extension LaunchCompletionTestCase { + + func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) { + switch result { + case .success: + XCTAssertTrue(true) + case .failure: + XCTAssertTrue(false) + } + } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index c23f7e7..dd28629 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -122,115 +122,3 @@ extension HandlerBaseTests { disposeBag = DisposeBag() } } - -// MARK: - Launch - -extension LaunchTestCase { - - func test_launch(_ platform: Platform, _ program: MiniProgramMessage) { - UIApplication.shared.rx - .openURL() - .bind(onNext: { [unowned self] url in - self.test_launch(url: url, platform, program) - }) - .disposed(by: disposeBag) - - UIPasteboard.general.rx - .items() - .filter { !$0.isEmpty } - .bind(onNext: { [unowned self] items in - self.test_launch(items: items, platform, program) - }) - .disposed(by: disposeBag) - - Bus.shared.launch( - program: program, - with: platform, - completionHandler: { [unowned self] result in - self.test_launch(result: result, platform, program) - } - ) - } -} - -// MARK: - Launch - URL - -extension LaunchURLTestCase { - - func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { - let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! - var queryItems = urlComponents.queryItems ?? [] - - logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - - // General - UniversalLink - - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) - test_general_ul(queryItems: &queryItems) - - // Launch - UniversalLink - - test_launch_ul(path: urlComponents.path) - test_launch_ul(queryItems: &queryItems, platform, program) - - logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") - - XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() - } -} - -// MARK: - Launch - Pasteboard - -extension LaunchPasteboardTestCase { - - func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { - var items = items as! [[String: Data]] - - logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - - test_launch_major_pb(dictionary: test_extract_major_pb(items: &items), platform, program) - - test_extra_pb(items: &items) - - logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") - - XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() - } - - func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { - var dictionary = dictionary - - logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - - // General - Pasteboard - - test_general_pb(dictionary: &dictionary) - - // Launch - Program - Pasteboard - - test_launch_pb(dictionary: &dictionary, platform, program) - - logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") - - XCTAssertTrue(dictionary.isEmpty) - } -} - -// MARK: - Launch - Completion - -extension LaunchCompletionTestCase { - - func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) { - switch result { - case .success: - XCTAssertTrue(true) - case .failure: - XCTAssertTrue(false) - } - } -} diff --git a/Tests/NBusTests/Base/LaunchTestCase.swift b/Tests/NBusTests/Base/LaunchTestCase.swift new file mode 100644 index 0000000..0979e36 --- /dev/null +++ b/Tests/NBusTests/Base/LaunchTestCase.swift @@ -0,0 +1,81 @@ +// +// LaunchTestCase.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import RxSwift +import XCTest + +// MARK: - Launch - Program - UniversalLink + +protocol LaunchProgramUniversalLinkTestCase: XCTestCase { + + /// Test launch universal link path + func test_launch_ul(path: String) + + /// Test launch universal link queryItems + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - URL + +protocol LaunchURLTestCase: + GeneralUniversalLinkTestCase, + LaunchProgramUniversalLinkTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Test launch universal link + func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Platform - Pasteboard + +protocol LaunchProgramPasteboardTestCase: XCTestCase { + + /// Test launch pasteboard dictionary + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Pasteboard + +protocol LaunchPasteboardTestCase: + GeneralPasteboardTestCase, + LaunchProgramPasteboardTestCase { + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test launch pasteboard + func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) + + /// Test launch pasteboard major data + func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch - Completion + +protocol LaunchCompletionTestCase: XCTestCase { + + /// Universal link expectation + var ulExpectation: XCTestExpectation { get } + + /// Pasteboard expectation + var pbExpectation: XCTestExpectation { get } + + /// Test launch completion + func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) +} + +// MARK: - Launch + +protocol LaunchTestCase: LaunchURLTestCase, LaunchPasteboardTestCase, LaunchCompletionTestCase { + + var disposeBag: DisposeBag { get } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift new file mode 100644 index 0000000..8254c8f --- /dev/null +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift @@ -0,0 +1,74 @@ +// +// QQHandlerBaseTests+Launch.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Launch + +extension QQHandlerBaseTests: LaunchTestCase { + + func test_launch() { + test_launch(Platforms.qq, MediaSource.qqMiniProgram as! MiniProgramMessage) + } +} + +// MARK: - Launch - URL + +extension QQHandlerBaseTests: LaunchURLTestCase { + + func test_launch_ul(path: String) { + XCTAssertEqual(path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") + } + + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { + let appid = queryItems.removeFirst { $0.name == "appid" }! + test_appid(appid) + + let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! + test_callback_name(callback_name) + + let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! + test_callback_type(callback_type) + + let src_type = queryItems.removeFirst { $0.name == "src_type" }! + test_src_type(src_type) + + let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! + test_thirdAppDisplayName(thirdAppDisplayName) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) + + let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" }! + test_mini_appid(mini_appid, program) + + let mini_path = queryItems.removeFirst { $0.name == "mini_path" }! + test_mini_path(mini_path, program) + + let mini_type = queryItems.removeFirst { $0.name == "mini_type" }! + test_mini_type(mini_type, program) + } +} + +extension QQHandlerBaseTests { + + func test_appid(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, appNumber) + } +} + +// MARK: - Launch - Pasteboard + +extension QQHandlerBaseTests: LaunchPasteboardTestCase { + + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + XCTAssertTrue(true) + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift index 96f7d88..7266b41 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests.swift @@ -59,66 +59,3 @@ class QQHandlerBaseTests: HandlerBaseTests { } } } - -// MARK: - Launch - -extension QQHandlerBaseTests: LaunchTestCase { - - func test_launch() { - test_launch(Platforms.qq, MediaSource.qqMiniProgram as! MiniProgramMessage) - } -} - -// MARK: - Launch - URL - -extension QQHandlerBaseTests: LaunchURLTestCase { - - func test_launch_ul(path: String) { - XCTAssertEqual(path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") - } - - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { - let appid = queryItems.removeFirst { $0.name == "appid" }! - test_appid(appid) - - let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! - test_callback_name(callback_name) - - let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! - test_callback_type(callback_type) - - let src_type = queryItems.removeFirst { $0.name == "src_type" }! - test_src_type(src_type) - - let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! - test_thirdAppDisplayName(thirdAppDisplayName) - - let version = queryItems.removeFirst { $0.name == "version" }! - test_version(version) - - let mini_appid = queryItems.removeFirst { $0.name == "mini_appid" }! - test_mini_appid(mini_appid, program) - - let mini_path = queryItems.removeFirst { $0.name == "mini_path" }! - test_mini_path(mini_path, program) - - let mini_type = queryItems.removeFirst { $0.name == "mini_type" }! - test_mini_type(mini_type, program) - } -} - -extension QQHandlerBaseTests { - - func test_appid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, appNumber) - } -} - -// MARK: - Launch - Pasteboard - -extension QQHandlerBaseTests: LaunchPasteboardTestCase { - - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { - XCTAssertTrue(true) - } -} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift new file mode 100644 index 0000000..42dbd6b --- /dev/null +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -0,0 +1,105 @@ +// +// WechatHandlerBaseTests+Launch.swift +// BusTests +// +// Created by nuomi1 on 2022/4/10. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +@testable import NBus +import XCTest + +// MARK: - Launch + +extension WechatHandlerBaseTests: LaunchTestCase { + + func test_launch() { + test_launch(Platforms.wechat, MediaSource.wechatMiniProgram as! MiniProgramMessage) + } +} + +// MARK: - Launch - URL + +extension WechatHandlerBaseTests: LaunchURLTestCase { + + func test_launch_ul(path: String) { + XCTAssertEqual(path, "/app/\(appID)/jumpWxa/") + } + + func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { + let extMsg = queryItems.removeFirst { $0.name == "extMsg" }! + test_extMsg(extMsg) + + let miniProgramType = queryItems.removeFirst { $0.name == "miniProgramType" }! + test_miniProgramType(miniProgramType, program) + + let path = queryItems.removeFirst { $0.name == "path" }! + test_path(path, program) + + let userName = queryItems.removeFirst { $0.name == "userName" }! + test_userName(userName, program) + } +} + +extension WechatHandlerBaseTests { + + func test_extMsg(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "") + } + + func test_miniProgramType(_ queryItem: URLQueryItem, _ message: MessageType) { + let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in + switch miniProgramType { + case .release: + return "0" + case .test: + return "1" + case .preview: + return "2" + } + } + + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, miniProgramType(message.miniProgramType)) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } + + func test_path(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, message.path) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } + + func test_userName(_ queryItem: URLQueryItem, _ message: MessageType) { + switch message { + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem.value!, message.miniProgramID) + default: + XCTAssertTrue(false, "\(String(describing: queryItem.value))") + } + } +} + +// MARK: - Launch - Pasteboard + +extension WechatHandlerBaseTests: LaunchPasteboardTestCase { + + func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + let command = dictionary.removeValue(forKey: "command") as! String + test_command_launch(command) + } +} + +extension WechatHandlerBaseTests { + + func test_command_launch(_ value: String) { + XCTAssertEqual(value, "1080") + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index 38476b2..e87d15e 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -39,97 +39,3 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } } - -// MARK: - Launch - -extension WechatHandlerBaseTests: LaunchTestCase { - - func test_launch() { - test_launch(Platforms.wechat, MediaSource.wechatMiniProgram as! MiniProgramMessage) - } -} - -// MARK: - Launch - URL - -extension WechatHandlerBaseTests: LaunchURLTestCase { - - func test_launch_ul(path: String) { - XCTAssertEqual(path, "/app/\(appID)/jumpWxa/") - } - - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { - let extMsg = queryItems.removeFirst { $0.name == "extMsg" }! - test_extMsg(extMsg) - - let miniProgramType = queryItems.removeFirst { $0.name == "miniProgramType" }! - test_miniProgramType(miniProgramType, program) - - let path = queryItems.removeFirst { $0.name == "path" }! - test_path(path, program) - - let userName = queryItems.removeFirst { $0.name == "userName" }! - test_userName(userName, program) - } -} - -extension WechatHandlerBaseTests { - - func test_extMsg(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "") - } - - func test_miniProgramType(_ queryItem: URLQueryItem, _ message: MessageType) { - let miniProgramType: (MiniProgramMessage.MiniProgramType) -> String = { miniProgramType in - switch miniProgramType { - case .release: - return "0" - case .test: - return "1" - case .preview: - return "2" - } - } - - switch message { - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, miniProgramType(message.miniProgramType)) - default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") - } - } - - func test_path(_ queryItem: URLQueryItem, _ message: MessageType) { - switch message { - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, message.path) - default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") - } - } - - func test_userName(_ queryItem: URLQueryItem, _ message: MessageType) { - switch message { - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, message.miniProgramID) - default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") - } - } -} - -// MARK: - Launch - Pasteboard - -extension WechatHandlerBaseTests: LaunchPasteboardTestCase { - - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { - let command = dictionary.removeValue(forKey: "command") as! String - test_command_launch(command) - } -} - -extension WechatHandlerBaseTests { - - func test_command_launch(_ value: String) { - XCTAssertEqual(value, "1080") - } -} From 56a622076975c21c4667a59e3637f1f3272b499a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:46:16 +0800 Subject: [PATCH 079/123] refactor: remove HandlerBaseTestCase.swift --- Tests/NBusTests/Base/HandlerBaseTestCase.swift | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 Tests/NBusTests/Base/HandlerBaseTestCase.swift diff --git a/Tests/NBusTests/Base/HandlerBaseTestCase.swift b/Tests/NBusTests/Base/HandlerBaseTestCase.swift deleted file mode 100644 index 84e4e05..0000000 --- a/Tests/NBusTests/Base/HandlerBaseTestCase.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// HandlerBaseTestCase.swift -// BusTests -// -// Created by nuomi1 on 2022/4/5. -// Copyright © 2022 nuomi1. All rights reserved. -// - -import Foundation -@testable import NBus -import RxSwift -import XCTest From 3eb1af3025bf418b37d4c79da5e4a728b32ad4af Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 10 Apr 2022 23:49:23 +0800 Subject: [PATCH 080/123] fix: import RxCocoa --- Tests/NBusTests/Base/HandlerBaseTests+Launch.swift | 1 + Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift | 1 + Tests/NBusTests/Base/HandlerBaseTests+Share.swift | 1 + Tests/NBusTests/Base/HandlerBaseTests.swift | 1 + 4 files changed, 4 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index 055ab8d..c51d847 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -8,6 +8,7 @@ import Foundation @testable import NBus +import RxCocoa import RxSwift import XCTest diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 127b81c..96eeecb 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -8,6 +8,7 @@ import Foundation @testable import NBus +import RxCocoa import RxSwift import XCTest diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 116cb09..9d22b42 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -8,6 +8,7 @@ import Foundation @testable import NBus +import RxCocoa import RxSwift import XCTest diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index dd28629..42e27bd 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -8,6 +8,7 @@ import Foundation @testable import NBus +import RxCocoa import RxSwift import XCTest From 1b1bcb249956fda1389cc73e3c9677f12fc4bb9d Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 13 Apr 2022 00:33:42 +0800 Subject: [PATCH 081/123] style: move pasteboard protocol above the SharePasteboardTestCase --- Tests/NBusTests/Base/ShareTestCase.swift | 48 ++++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 1e2b2b9..308475e 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -22,14 +22,6 @@ protocol ShareCommonUniversalLinkTestCase: XCTestCase { func test_share_common_ul(queryItems: inout [URLQueryItem]) } -// MARK: - Share - Common - Pasteboard - -protocol ShareCommonPasteboardTestCase: XCTestCase { - - /// Test share common pasteboard dictionary - func test_share_common_pb(dictionary: inout [String: Any]) -} - // MARK: - Share - MediaMessage - UniversalLink protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { @@ -38,14 +30,6 @@ protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - MediaMessage - Pasteboard - -protocol ShareMediaMessagePasteboardTestCase: XCTestCase { - - /// Test share media message pasteboard dictionary - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - // MARK: - Share - Message - UniversalLink protocol ShareMessageUniversalLinkTestCase: XCTestCase { @@ -54,14 +38,6 @@ protocol ShareMessageUniversalLinkTestCase: XCTestCase { func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Message - Pasteboard - -protocol ShareMessagePasteboardTestCase: XCTestCase { - - /// Test share message pasteboard dictionary - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - // MARK: - Share - URL protocol ShareURLTestCase: @@ -77,6 +53,30 @@ protocol ShareURLTestCase: func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) } +// MARK: - Share - Common - Pasteboard + +protocol ShareCommonPasteboardTestCase: XCTestCase { + + /// Test share common pasteboard dictionary + func test_share_common_pb(dictionary: inout [String: Any]) +} + +// MARK: - Share - MediaMessage - Pasteboard + +protocol ShareMediaMessagePasteboardTestCase: XCTestCase { + + /// Test share media message pasteboard dictionary + func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - Pasteboard + +protocol ShareMessagePasteboardTestCase: XCTestCase { + + /// Test share message pasteboard dictionary + func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + // MARK: - Share - Pasteboard protocol SharePasteboardTestCase: From 9e1019ca51c6d6a51e93300680fa69ba659eca1f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 13 Apr 2022 21:46:41 +0800 Subject: [PATCH 082/123] refactor: add underscore to default implementation function and protocol # Conflicts: # Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift # Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift --- .../Base/HandlerBaseTests+Launch.swift | 26 ++++++------- .../Base/HandlerBaseTests+Oauth.swift | 26 ++++++------- .../Base/HandlerBaseTests+Share.swift | 37 ++++++++++++------- Tests/NBusTests/Base/LaunchTestCase.swift | 20 +++++----- Tests/NBusTests/Base/OauthTestCase.swift | 20 +++++----- Tests/NBusTests/Base/ShareTestCase.swift | 22 +++++------ .../QQ/QQHandlerBaseTests+Launch.swift | 8 ++-- .../QQ/QQHandlerBaseTests+Oauth.swift | 2 +- .../QQ/QQHandlerBaseTests+Share.swift | 9 ----- .../WechatHandlerBaseTests+Launch.swift | 8 ++-- .../Wechat/WechatHandlerBaseTests+Share.swift | 11 ------ .../Weibo/WeiboHandlerBaseTests+Oauth.swift | 2 +- .../Weibo/WeiboHandlerBaseTests+Share.swift | 10 ----- 13 files changed, 90 insertions(+), 111 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index c51d847..0eac563 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -20,7 +20,7 @@ extension LaunchTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self.test_launch(url: url, platform, program) + self._test_launch(url: url, platform, program) }) .disposed(by: disposeBag) @@ -28,7 +28,7 @@ extension LaunchTestCase { .items() .filter { !$0.isEmpty } .bind(onNext: { [unowned self] items in - self.test_launch(items: items, platform, program) + self._test_launch(items: items, platform, program) }) .disposed(by: disposeBag) @@ -36,17 +36,17 @@ extension LaunchTestCase { program: program, with: platform, completionHandler: { [unowned self] result in - self.test_launch(result: result, platform, program) + self._test_launch(result: result, platform, program) } ) } } -// MARK: - Launch - URL +// MARK: - Launch - UniversalLink -extension LaunchURLTestCase { +extension _LaunchUniversalLinkTestCase { - func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] @@ -58,7 +58,7 @@ extension LaunchURLTestCase { test_general_ul(host: urlComponents.host!) test_general_ul(queryItems: &queryItems) - // Launch - UniversalLink + // Launch - Program - UniversalLink test_launch_ul(path: urlComponents.path) test_launch_ul(queryItems: &queryItems, platform, program) @@ -73,14 +73,14 @@ extension LaunchURLTestCase { // MARK: - Launch - Pasteboard -extension LaunchPasteboardTestCase { +extension _LaunchPasteboardTestCase { - func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - test_launch_major_pb(dictionary: test_extract_major_pb(items: &items), platform, program) + _test_launch_pb(dictionary: test_extract_major_pb(items: &items), platform, program) test_extra_pb(items: &items) @@ -91,7 +91,7 @@ extension LaunchPasteboardTestCase { pbExpectation.fulfill() } - func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -112,9 +112,9 @@ extension LaunchPasteboardTestCase { // MARK: - Launch - Completion -extension LaunchCompletionTestCase { +extension _LaunchCompletionTestCase { - func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) { switch result { case .success: XCTAssertTrue(true) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 96eeecb..247f377 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -20,7 +20,7 @@ extension OauthTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self.test_oauth(url: url, platform) + self._test_oauth(url: url, platform) }) .disposed(by: disposeBag) @@ -35,14 +35,14 @@ extension OauthTestCase { }) .filter { !$0.isEmpty } .bind(onNext: { [unowned self] items in - self.test_oauth(items: items, platform) + self._test_oauth(items: items, platform) }) .disposed(by: disposeBag) Bus.shared.oauth( with: platform, completionHandler: { [unowned self] result in - self.test_oauth(result: result, platform) + self._test_oauth(result: result, platform) } ) @@ -50,11 +50,11 @@ extension OauthTestCase { } } -// MARK: - Oauth - URL +// MARK: - Oauth - UniversalLink -extension OauthURLTestCase { +extension _OauthUniversalLinkTestCase { - func test_oauth(url: URL, _ platform: Platform) { + func _test_oauth(url: URL, _ platform: Platform) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] @@ -66,7 +66,7 @@ extension OauthURLTestCase { test_general_ul(host: urlComponents.host!) test_general_ul(queryItems: &queryItems) - // Oauth - UniversalLink + // Oauth - Platform - UniversalLink test_oauth_ul(path: urlComponents.path) test_oauth_ul(queryItems: &queryItems, platform) @@ -81,14 +81,14 @@ extension OauthURLTestCase { // MARK: - Oauth - Pasteboard -extension OauthPasteboardTestCase { +extension _OauthPasteboardTestCase { - func test_oauth(items: [[String: Any]], _ platform: Platform) { + func _test_oauth(items: [[String: Any]], _ platform: Platform) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - test_oauth_major_pb(dictionary: test_extract_major_pb(items: &items), platform) + _test_oauth_pb(dictionary: test_extract_major_pb(items: &items), platform) test_extra_pb(items: &items) @@ -99,7 +99,7 @@ extension OauthPasteboardTestCase { pbExpectation.fulfill() } - func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) { + func _test_oauth_pb(dictionary: [String: Any], _ platform: Platform) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -120,9 +120,9 @@ extension OauthPasteboardTestCase { // MARK: - Oauth - Completion -extension OauthCompletionTestCase { +extension _OauthCompletionTestCase { - func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) { + func _test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) { switch result { case .success: XCTAssertTrue(true) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 9d22b42..36e8cfb 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -20,7 +20,7 @@ extension ShareTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self.test_share(url: url, message, endpoint) + self._test_share(url: url, message, endpoint) }) .disposed(by: disposeBag) @@ -38,7 +38,7 @@ extension ShareTestCase { }) .filter { !$0.isEmpty } .bind(onNext: { [unowned self] items in - self.test_share(items: items, message, endpoint) + self._test_share(items: items, message, endpoint) }) .disposed(by: disposeBag) @@ -46,7 +46,7 @@ extension ShareTestCase { message: message, to: endpoint, completionHandler: { [unowned self] result in - self.test_share(result: result, message, endpoint) + self._test_share(result: result, message, endpoint) } ) @@ -54,11 +54,11 @@ extension ShareTestCase { } } -// MARK: - Share - URL +// MARK: - Share - UniversalLink -extension ShareURLTestCase { +extension _ShareUniversalLinkTestCase { - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + func _test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] @@ -93,14 +93,14 @@ extension ShareURLTestCase { // MARK: - Share - Pasteboard -extension SharePasteboardTestCase { +extension _SharePasteboardTestCase { - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + func _test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - test_share_major_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) + _test_share_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) test_extra_pb(items: &items) @@ -111,7 +111,7 @@ extension SharePasteboardTestCase { pbExpectation.fulfill() } - func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + func _test_share_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -120,7 +120,7 @@ extension SharePasteboardTestCase { test_general_pb(dictionary: &dictionary) - // Share - Comon - Pasteboard + // Share - Common - Pasteboard test_share_common_pb(dictionary: &dictionary) @@ -140,16 +140,16 @@ extension SharePasteboardTestCase { // MARK: - Share - Completion -extension ShareCompletionTestCase { +extension _ShareCompletionTestCase { - func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { + func _test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { switch result { case .success: XCTAssertTrue(true) case let .failure(error): logger.error("\(error)") - if test_share_avoid_error(error, message, endpoint) { + if _test_share_avoid_error(error, message, endpoint) { XCTAssertTrue(true) ulExpectation.fulfill() @@ -159,4 +159,13 @@ extension ShareCompletionTestCase { } } } + + func _test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline) + || (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) + || (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) + } } diff --git a/Tests/NBusTests/Base/LaunchTestCase.swift b/Tests/NBusTests/Base/LaunchTestCase.swift index 0979e36..5704019 100644 --- a/Tests/NBusTests/Base/LaunchTestCase.swift +++ b/Tests/NBusTests/Base/LaunchTestCase.swift @@ -22,9 +22,9 @@ protocol LaunchProgramUniversalLinkTestCase: XCTestCase { func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) } -// MARK: - Launch - URL +// MARK: - Launch - UniversalLink -protocol LaunchURLTestCase: +protocol _LaunchUniversalLinkTestCase: GeneralUniversalLinkTestCase, LaunchProgramUniversalLinkTestCase { @@ -32,7 +32,7 @@ protocol LaunchURLTestCase: var ulExpectation: XCTestExpectation { get } /// Test launch universal link - func test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) + func _test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) } // MARK: - Launch - Platform - Pasteboard @@ -45,7 +45,7 @@ protocol LaunchProgramPasteboardTestCase: XCTestCase { // MARK: - Launch - Pasteboard -protocol LaunchPasteboardTestCase: +protocol _LaunchPasteboardTestCase: GeneralPasteboardTestCase, LaunchProgramPasteboardTestCase { @@ -53,15 +53,15 @@ protocol LaunchPasteboardTestCase: var pbExpectation: XCTestExpectation { get } /// Test launch pasteboard - func test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) + func _test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) - /// Test launch pasteboard major data - func test_launch_major_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch pasteboard dictionary + func _test_launch_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) } // MARK: - Launch - Completion -protocol LaunchCompletionTestCase: XCTestCase { +protocol _LaunchCompletionTestCase: XCTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } @@ -70,12 +70,12 @@ protocol LaunchCompletionTestCase: XCTestCase { var pbExpectation: XCTestExpectation { get } /// Test launch completion - func test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) + func _test_launch(result: Result, _ platform: Platform, _ program: MiniProgramMessage) } // MARK: - Launch -protocol LaunchTestCase: LaunchURLTestCase, LaunchPasteboardTestCase, LaunchCompletionTestCase { +protocol LaunchTestCase: _LaunchUniversalLinkTestCase, _LaunchPasteboardTestCase, _LaunchCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift index 808dabb..309c26d 100644 --- a/Tests/NBusTests/Base/OauthTestCase.swift +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -22,9 +22,9 @@ protocol OauthPlatformUniversalLinkTestCase: XCTestCase { func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) } -// MARK: - Oauth - URL +// MARK: - Oauth - UniversalLink -protocol OauthURLTestCase: +protocol _OauthUniversalLinkTestCase: GeneralUniversalLinkTestCase, OauthPlatformUniversalLinkTestCase { @@ -32,7 +32,7 @@ protocol OauthURLTestCase: var ulExpectation: XCTestExpectation { get } /// Test oauth universal link - func test_oauth(url: URL, _ platform: Platform) + func _test_oauth(url: URL, _ platform: Platform) } // MARK: - Oauth - Platform - Pasteboard @@ -45,7 +45,7 @@ protocol OauthPlatformPasteboardTestCase: XCTestCase { // MARK: - Oauth - Pasteboard -protocol OauthPasteboardTestCase: +protocol _OauthPasteboardTestCase: GeneralPasteboardTestCase, OauthPlatformPasteboardTestCase { @@ -53,15 +53,15 @@ protocol OauthPasteboardTestCase: var pbExpectation: XCTestExpectation { get } /// Test oauth pasteboard - func test_oauth(items: [[String: Any]], _ platform: Platform) + func _test_oauth(items: [[String: Any]], _ platform: Platform) - /// Test oauth pasteboard major data - func test_oauth_major_pb(dictionary: [String: Any], _ platform: Platform) + /// Test oauth pasteboard dictionary + func _test_oauth_pb(dictionary: [String: Any], _ platform: Platform) } // MARK: - Oauth - Completion -protocol OauthCompletionTestCase: XCTestCase { +protocol _OauthCompletionTestCase: XCTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } @@ -70,12 +70,12 @@ protocol OauthCompletionTestCase: XCTestCase { var pbExpectation: XCTestExpectation { get } /// Test oauth completion - func test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) + func _test_oauth(result: Result<[Bus.OauthInfoKey: String], Bus.Error>, _ platform: Platform) } // MARK: - Oauth -protocol OauthTestCase: OauthURLTestCase, OauthPasteboardTestCase, OauthCompletionTestCase { +protocol OauthTestCase: _OauthUniversalLinkTestCase, _OauthPasteboardTestCase, _OauthCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 308475e..d10244a 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -38,9 +38,9 @@ protocol ShareMessageUniversalLinkTestCase: XCTestCase { func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - URL +// MARK: - Share - UniversalLink -protocol ShareURLTestCase: +protocol _ShareUniversalLinkTestCase: GeneralUniversalLinkTestCase, ShareCommonUniversalLinkTestCase, ShareMediaMessageUniversalLinkTestCase, @@ -50,7 +50,7 @@ protocol ShareURLTestCase: var ulExpectation: XCTestExpectation { get } /// Test share universal link - func test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) + func _test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) } // MARK: - Share - Common - Pasteboard @@ -79,7 +79,7 @@ protocol ShareMessagePasteboardTestCase: XCTestCase { // MARK: - Share - Pasteboard -protocol SharePasteboardTestCase: +protocol _SharePasteboardTestCase: GeneralPasteboardTestCase, ShareCommonPasteboardTestCase, ShareMediaMessagePasteboardTestCase, @@ -89,15 +89,15 @@ protocol SharePasteboardTestCase: var pbExpectation: XCTestExpectation { get } /// Test share pasteboard - func test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) + func _test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) - /// Test share pasteboard major data - func test_share_major_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) + /// Test share pasteboard dictionary + func _test_share_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) } // MARK: - Share - Completion -protocol ShareCompletionTestCase: XCTestCase { +protocol _ShareCompletionTestCase: XCTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } @@ -106,15 +106,15 @@ protocol ShareCompletionTestCase: XCTestCase { var pbExpectation: XCTestExpectation { get } /// Test share completion - func test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) + func _test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) /// Test share avoid error - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool + func _test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool } // MARK: - Share -protocol ShareTestCase: ShareURLTestCase, SharePasteboardTestCase, ShareCompletionTestCase { +protocol ShareTestCase: _ShareUniversalLinkTestCase, _SharePasteboardTestCase, _ShareCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift index 8254c8f..7f3e07a 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift @@ -19,9 +19,9 @@ extension QQHandlerBaseTests: LaunchTestCase { } } -// MARK: - Launch - URL +// MARK: - Launch - Program - UniversalLink -extension QQHandlerBaseTests: LaunchURLTestCase { +extension QQHandlerBaseTests: LaunchProgramUniversalLinkTestCase { func test_launch_ul(path: String) { XCTAssertEqual(path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") @@ -64,9 +64,9 @@ extension QQHandlerBaseTests { } } -// MARK: - Launch - Pasteboard +// MARK: - Launch - Program - Pasteboard -extension QQHandlerBaseTests: LaunchPasteboardTestCase { +extension QQHandlerBaseTests: LaunchProgramPasteboardTestCase { func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { XCTAssertTrue(true) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index 9473714..74f4490 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -19,7 +19,7 @@ extension QQHandlerBaseTests: OauthTestCase { } } -// MARK: Oauth - Platform - UniversalLink +// MARK: - Oauth - Platform - UniversalLink extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 2c45124..ff0f106 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -578,12 +578,3 @@ extension QQHandlerBaseTests { } } } - -// MARK: - Share - Completion - -extension QQHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline - } -} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift index 42dbd6b..218b969 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -19,9 +19,9 @@ extension WechatHandlerBaseTests: LaunchTestCase { } } -// MARK: - Launch - URL +// MARK: - Launch - Program - UniversalLink -extension WechatHandlerBaseTests: LaunchURLTestCase { +extension WechatHandlerBaseTests: LaunchProgramUniversalLinkTestCase { func test_launch_ul(path: String) { XCTAssertEqual(path, "/app/\(appID)/jumpWxa/") @@ -87,9 +87,9 @@ extension WechatHandlerBaseTests { } } -// MARK: - Launch - Pasteboard +// MARK: - Launch - Program - Pasteboard -extension WechatHandlerBaseTests: LaunchPasteboardTestCase { +extension WechatHandlerBaseTests: LaunchProgramPasteboardTestCase { func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { let command = dictionary.removeValue(forKey: "command") as! String diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 1a6ea84..78cb633 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -578,14 +578,3 @@ extension WechatHandlerBaseTests { } } } - -// MARK: - Share - Completion - -extension WechatHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) - } -} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift index 3b23431..6483c0d 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift @@ -19,7 +19,7 @@ extension WeiboHandlerBaseTests: OauthTestCase { } } -// MARK: - Oauth - Platform -UniversalLink +// MARK: - Oauth - Platform - UniversalLink extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index 65cbc35..2387ab5 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -305,13 +305,3 @@ extension WeiboHandlerBaseTests { } } } - -// MARK: - Share - Completion - -extension WeiboHandlerBaseTests: ShareCompletionTestCase { - - func test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) - } -} From 6df4d353d3d3d9fcb7aeb5d075d016e7f6cc5486 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 13 Apr 2022 21:48:08 +0800 Subject: [PATCH 083/123] feat: test scheme # Conflicts: # Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift # Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift --- Tests/NBusTests/Base/GeneralTestCase.swift | 8 ++++++ .../Base/HandlerBaseTests+Launch.swift | 20 +++++++++++++ .../Base/HandlerBaseTests+Oauth.swift | 20 +++++++++++++ .../Base/HandlerBaseTests+Share.swift | 20 +++++++++++++ Tests/NBusTests/Base/LaunchTestCase.swift | 24 +++++++++++++++- Tests/NBusTests/Base/OauthTestCase.swift | 24 +++++++++++++++- Tests/NBusTests/Base/ShareTestCase.swift | 24 +++++++++++++++- .../QQ/QQHandlerBaseTests+General.swift | 12 ++++++++ .../QQ/QQHandlerBaseTests+Launch.swift | 11 ++++++++ .../QQ/QQHandlerBaseTests+Oauth.swift | 11 ++++++++ .../QQ/QQHandlerBaseTests+Share.swift | 28 +++++++++++++++++++ .../WechatHandlerBaseTests+General.swift | 12 ++++++++ .../WechatHandlerBaseTests+Launch.swift | 9 ++++++ .../Wechat/WechatHandlerBaseTests+Oauth.swift | 9 ++++++ .../Wechat/WechatHandlerBaseTests+Share.swift | 21 ++++++++++++++ .../Weibo/WeiboHandlerBaseTests+General.swift | 13 +++++++++ .../Weibo/WeiboHandlerBaseTests+Oauth.swift | 9 ++++++ .../Weibo/WeiboHandlerBaseTests+Share.swift | 21 ++++++++++++++ 18 files changed, 293 insertions(+), 3 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index df454b4..6032feb 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -9,6 +9,14 @@ import Foundation import XCTest +// MARK: - General - Scheme + +protocol GeneralSchemeTestCase: XCTestCase { + + /// Report general scheme + func report_general_scheme() -> Set +} + // MARK: - General - UniversalLink protocol GeneralUniversalLinkTestCase: XCTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index 0eac563..1441e0f 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -17,6 +17,13 @@ import XCTest extension LaunchTestCase { func test_launch(_ platform: Platform, _ program: MiniProgramMessage) { + UIApplication.shared.rx + .canOpenURL() + .bind(onNext: { [unowned self] url in + self._test_launch(scheme: url, platform, program) + }) + .disposed(by: disposeBag) + UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in @@ -42,6 +49,19 @@ extension LaunchTestCase { } } +// MARK: - Launch - Scheme + +extension _LaunchSchemeTestCase { + + func _test_launch(scheme: URL, _ platform: Platform, _ program: MiniProgramMessage) { + var schemeList: Set = [] + schemeList.formUnion(report_general_scheme()) + schemeList.formUnion(report_launch_scheme(platform, program)) + + XCTAssertTrue(schemeList.contains(scheme.scheme!)) + } +} + // MARK: - Launch - UniversalLink extension _LaunchUniversalLinkTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 247f377..75baf5d 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -17,6 +17,13 @@ import XCTest extension OauthTestCase { func test_oauth(_ platform: Platform) { + UIApplication.shared.rx + .canOpenURL() + .bind(onNext: { [unowned self] url in + self._test_oauth(scheme: url, platform) + }) + .disposed(by: disposeBag) + UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in @@ -50,6 +57,19 @@ extension OauthTestCase { } } +// MARK: - Oauth - Scheme + +extension _OauthSchemeTestCase { + + func _test_oauth(scheme: URL, _ platform: Platform) { + var schemeList: Set = [] + schemeList.formUnion(report_general_scheme()) + schemeList.formUnion(report_oauth_scheme(platform)) + + XCTAssertTrue(schemeList.contains(scheme.scheme!)) + } +} + // MARK: - Oauth - UniversalLink extension _OauthUniversalLinkTestCase { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 36e8cfb..a87d7cb 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -17,6 +17,13 @@ import XCTest extension ShareTestCase { func test_share(_ message: MessageType, _ endpoint: Endpoint) { + UIApplication.shared.rx + .canOpenURL() + .bind(onNext: { [unowned self] url in + self._test_share(scheme: url, message, endpoint) + }) + .disposed(by: disposeBag) + UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in @@ -54,6 +61,19 @@ extension ShareTestCase { } } +// MARK: - Share - Scheme + +extension _ShareSchemeTestCase { + + func _test_share(scheme: URL, _ message: MessageType, _ endpoint: Endpoint) { + var schemeList: Set = [] + schemeList.formUnion(report_general_scheme()) + schemeList.formUnion(report_share_scheme(message, endpoint)) + + XCTAssertTrue(schemeList.contains(scheme.scheme!)) + } +} + // MARK: - Share - UniversalLink extension _ShareUniversalLinkTestCase { diff --git a/Tests/NBusTests/Base/LaunchTestCase.swift b/Tests/NBusTests/Base/LaunchTestCase.swift index 5704019..b5932df 100644 --- a/Tests/NBusTests/Base/LaunchTestCase.swift +++ b/Tests/NBusTests/Base/LaunchTestCase.swift @@ -11,6 +11,24 @@ import Foundation import RxSwift import XCTest +// MARK: - Launch - Program - Scheme + +protocol LaunchProgramSchemeTestCase: XCTestCase { + + /// Report launch scheme + func report_launch_scheme(_ platform: Platform, _ program: MiniProgramMessage) -> Set +} + +// MARK: - Launch - Scheme + +protocol _LaunchSchemeTestCase: + GeneralSchemeTestCase, + LaunchProgramSchemeTestCase { + + /// Test launch scheme + func _test_launch(scheme: URL, _ platform: Platform, _ program: MiniProgramMessage) +} + // MARK: - Launch - Program - UniversalLink protocol LaunchProgramUniversalLinkTestCase: XCTestCase { @@ -75,7 +93,11 @@ protocol _LaunchCompletionTestCase: XCTestCase { // MARK: - Launch -protocol LaunchTestCase: _LaunchUniversalLinkTestCase, _LaunchPasteboardTestCase, _LaunchCompletionTestCase { +protocol LaunchTestCase: + _LaunchSchemeTestCase, + _LaunchUniversalLinkTestCase, + _LaunchPasteboardTestCase, + _LaunchCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift index 309c26d..50c40ef 100644 --- a/Tests/NBusTests/Base/OauthTestCase.swift +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -11,6 +11,24 @@ import Foundation import RxSwift import XCTest +// MARK: - Oauth - Platform - Scheme + +protocol OauthPlatformSchemeTestCase: XCTestCase { + + /// Report oauth scheme + func report_oauth_scheme(_ platform: Platform) -> Set +} + +// MARK: - Oauth - Scheme + +protocol _OauthSchemeTestCase: + GeneralSchemeTestCase, + OauthPlatformSchemeTestCase { + + /// Test oauth scheme + func _test_oauth(scheme: URL, _ platform: Platform) +} + // MARK: - Oauth - Platform - UniversalLink protocol OauthPlatformUniversalLinkTestCase: XCTestCase { @@ -75,7 +93,11 @@ protocol _OauthCompletionTestCase: XCTestCase { // MARK: - Oauth -protocol OauthTestCase: _OauthUniversalLinkTestCase, _OauthPasteboardTestCase, _OauthCompletionTestCase { +protocol OauthTestCase: + _OauthSchemeTestCase, + _OauthUniversalLinkTestCase, + _OauthPasteboardTestCase, + _OauthCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index d10244a..ad55b55 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -11,6 +11,24 @@ import Foundation import RxSwift import XCTest +// MARK: - Share - Message - Scheme + +protocol ShareMessageSchemeTestCase: XCTestCase { + + /// Report share scheme + func report_share_scheme(_ message: MessageType, _ endpoint: Endpoint) -> Set +} + +// MARK: - Share - Scheme + +protocol _ShareSchemeTestCase: + GeneralSchemeTestCase, + ShareMessageSchemeTestCase { + + /// Test share scheme + func _test_share(scheme: URL, _ message: MessageType, _ endpoint: Endpoint) +} + // MARK: - Share - Common - UniversalLink protocol ShareCommonUniversalLinkTestCase: XCTestCase { @@ -114,7 +132,11 @@ protocol _ShareCompletionTestCase: XCTestCase { // MARK: - Share -protocol ShareTestCase: _ShareUniversalLinkTestCase, _SharePasteboardTestCase, _ShareCompletionTestCase { +protocol ShareTestCase: + _ShareSchemeTestCase, + _ShareUniversalLinkTestCase, + _SharePasteboardTestCase, + _ShareCompletionTestCase { var disposeBag: DisposeBag { get } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index d69edd7..aa47543 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -9,6 +9,18 @@ import Foundation import XCTest +// MARK: - General - Scheme + +extension QQHandlerBaseTests: GeneralSchemeTestCase { + + func report_general_scheme() -> Set { + [ + "mqq", + "mqqopensdkapiV2", + ] + } +} + // MARK: - General - UniversalLink extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift index 7f3e07a..c53651c 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift @@ -19,6 +19,17 @@ extension QQHandlerBaseTests: LaunchTestCase { } } +// MARK: - Launch - Program - Scheme + +extension QQHandlerBaseTests: LaunchProgramSchemeTestCase { + + func report_launch_scheme(_ platform: Platform, _ program: MiniProgramMessage) -> Set { + [ + "mqqopensdklaunchminiapp", + ] + } +} + // MARK: - Launch - Program - UniversalLink extension QQHandlerBaseTests: LaunchProgramUniversalLinkTestCase { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index 74f4490..e24d2a8 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -19,6 +19,17 @@ extension QQHandlerBaseTests: OauthTestCase { } } +// MARK: - Oauth - Platform - Scheme + +extension QQHandlerBaseTests: OauthPlatformSchemeTestCase { + + func report_oauth_scheme(_ platform: Platform) -> Set { + [ + "mqqopensdknopasteboard", + ] + } +} + // MARK: - Oauth - Platform - UniversalLink extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index ff0f106..b2359bf 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -71,6 +71,34 @@ extension QQHandlerBaseTests: ShareTestCase { } } +// MARK: - Share - Message - Scheme + +extension QQHandlerBaseTests: ShareMessageSchemeTestCase { + + func report_share_scheme(_ message: MessageType, _ endpoint: Endpoint) -> Set { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is FileMessage: + return [] + case is WebPageMessage: + return [ + "mqqopensdknopasteboard", + ] + case is MiniProgramMessage: + return [ + "mqqopensdkminiapp", + "mqqopensdknopasteboard", + ] + default: + XCTAssertTrue(false) + return [] + } + } +} + // MARK: - Share - Common - UniversalLink extension QQHandlerBaseTests: ShareCommonUniversalLinkTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index c4dd5a6..445c868 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -9,6 +9,18 @@ import Foundation import XCTest +// MARK: - General - Scheme + +extension WechatHandlerBaseTests: GeneralSchemeTestCase { + + func report_general_scheme() -> Set { + [ + "weixin", + "weixinULAPI", + ] + } +} + // MARK: - General - UniversalLink extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift index 218b969..9bf22e1 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -19,6 +19,15 @@ extension WechatHandlerBaseTests: LaunchTestCase { } } +// MARK: - Launch - Program - Scheme + +extension WechatHandlerBaseTests: LaunchProgramSchemeTestCase { + + func report_launch_scheme(_ platform: Platform, _ program: MiniProgramMessage) -> Set { + [] + } +} + // MARK: - Launch - Program - UniversalLink extension WechatHandlerBaseTests: LaunchProgramUniversalLinkTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift index 45f5d64..d95253a 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift @@ -19,6 +19,15 @@ extension WechatHandlerBaseTests: OauthTestCase { } } +// MARK: - Oauth - Platform - Scheme + +extension WechatHandlerBaseTests: OauthPlatformSchemeTestCase { + + func report_oauth_scheme(_ platform: Platform) -> Set { + [] + } +} + // MARK: - Oauth - Platform - UniversalLink extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 78cb633..e9ece63 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -99,6 +99,27 @@ extension WechatHandlerBaseTests: ShareTestCase { } } +// MARK: - Share - Message - Scheme + +extension WechatHandlerBaseTests: ShareMessageSchemeTestCase { + + func report_share_scheme(_ message: MessageType, _ endpoint: Endpoint) -> Set { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + return [] + default: + XCTAssertTrue(false) + return [] + } + } +} + // MARK: - Share - Common - UniversalLink extension WechatHandlerBaseTests: ShareCommonUniversalLinkTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index 236cc44..0df997b 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -9,6 +9,19 @@ import Foundation import XCTest +// MARK: - General - Scheme + +extension WeiboHandlerBaseTests: GeneralSchemeTestCase { + + func report_general_scheme() -> Set { + [ + "sinaweibo", + "weibosdk", + "weibosdk3.3", + ] + } +} + // MARK: - General - UniversalLink extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift index 6483c0d..79426c4 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift @@ -19,6 +19,15 @@ extension WeiboHandlerBaseTests: OauthTestCase { } } +// MARK: - Oauth - Platform - Scheme + +extension WeiboHandlerBaseTests: OauthPlatformSchemeTestCase { + + func report_oauth_scheme(_ platform: Platform) -> Set { + [] + } +} + // MARK: - Oauth - Platform - UniversalLink extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index 2387ab5..9c39b90 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -43,6 +43,27 @@ extension WeiboHandlerBaseTests: ShareTestCase { } } +// MARK: - Share - Message - Scheme + +extension WeiboHandlerBaseTests: ShareMessageSchemeTestCase { + + func report_share_scheme(_ message: MessageType, _ endpoint: Endpoint) -> Set { + switch message { + case is TextMessage, + is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + return [] + default: + XCTAssertTrue(false) + return [] + } + } +} + // MARK: - Share - Common - UniversalLink extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { From caeead8058884657cd3f6728b55e000f744e278c Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 13 Apr 2022 21:56:47 +0800 Subject: [PATCH 084/123] refactor: use exact verb --- Tests/NBusTests/Base/GeneralTestCase.swift | 4 ++-- Tests/NBusTests/Base/HandlerBaseTests+General.swift | 6 ++++-- Tests/NBusTests/Base/HandlerBaseTests+Launch.swift | 2 +- Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift | 2 +- Tests/NBusTests/Base/HandlerBaseTests+Share.swift | 6 +++--- Tests/NBusTests/Base/ShareTestCase.swift | 4 ++-- Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift | 4 ++-- .../NBusTests/Wechat/WechatHandlerBaseTests+General.swift | 4 ++-- Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift | 8 ++++---- 9 files changed, 21 insertions(+), 19 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index 6032feb..4659e37 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -35,8 +35,8 @@ protocol GeneralUniversalLinkTestCase: XCTestCase { protocol GeneralPasteboardTestCase: XCTestCase { - /// Test pasteboard extract major data - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] + /// Extract pasteboard major data + func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] /// Test general pasteboard dictionary func test_general_pb(dictionary: inout [String: Any]) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+General.swift b/Tests/NBusTests/Base/HandlerBaseTests+General.swift index b868008..da65c2b 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+General.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+General.swift @@ -12,7 +12,8 @@ import Foundation extension GeneralPasteboardTestCase { - func test_extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + /// Extract pasteboard using KeyedArchiver + func extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { let item = items.removeFirst { $0.keys.contains(key) }! precondition(item.count == 1) @@ -23,7 +24,8 @@ extension GeneralPasteboardTestCase { return dictionary } - func test_extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { + /// Extract pasteboard using PropertyList + func extract_PropertyList_pb(items: inout [[String: Data]], key: String) -> [String: Any] { let item = items.removeFirst { $0.keys.contains(key) }! precondition(item.count == 1) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index 1441e0f..9adaaa0 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -100,7 +100,7 @@ extension _LaunchPasteboardTestCase { logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_launch_pb(dictionary: test_extract_major_pb(items: &items), platform, program) + _test_launch_pb(dictionary: extract_major_pb(items: &items), platform, program) test_extra_pb(items: &items) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 75baf5d..bde99ac 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -108,7 +108,7 @@ extension _OauthPasteboardTestCase { logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_oauth_pb(dictionary: test_extract_major_pb(items: &items), platform) + _test_oauth_pb(dictionary: extract_major_pb(items: &items), platform) test_extra_pb(items: &items) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index a87d7cb..18571f5 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -120,7 +120,7 @@ extension _SharePasteboardTestCase { logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_share_pb(dictionary: test_extract_major_pb(items: &items), message, endpoint) + _test_share_pb(dictionary: extract_major_pb(items: &items), message, endpoint) test_extra_pb(items: &items) @@ -169,7 +169,7 @@ extension _ShareCompletionTestCase { case let .failure(error): logger.error("\(error)") - if _test_share_avoid_error(error, message, endpoint) { + if _avoid_share_completion_error(error, message, endpoint) { XCTAssertTrue(true) ulExpectation.fulfill() @@ -180,7 +180,7 @@ extension _ShareCompletionTestCase { } } - func _test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { + func _avoid_share_completion_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { (message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline) || (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index ad55b55..1168760 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -126,8 +126,8 @@ protocol _ShareCompletionTestCase: XCTestCase { /// Test share completion func _test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) - /// Test share avoid error - func _test_share_avoid_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool + /// Avoid share completion error + func _avoid_share_completion_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool } // MARK: - Share diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index aa47543..0f5b467 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -64,8 +64,8 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests: GeneralPasteboardTestCase { - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") + func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") } func test_general_pb(dictionary: inout [String: Any]) { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index 445c868..9f1a24c 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -57,8 +57,8 @@ extension WechatHandlerBaseTests { extension WechatHandlerBaseTests: GeneralPasteboardTestCase { - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - let plist = test_extract_PropertyList_pb(items: &items, key: "content") + func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + let plist = extract_PropertyList_pb(items: &items, key: "content") let dictionary = plist[appID] as! [String: Any] return dictionary diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index 0df997b..ad215d6 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -86,8 +86,8 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { - func test_extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - test_extract_KeyedArchiver_pb(items: &items, key: "transferObject") + func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + extract_KeyedArchiver_pb(items: &items, key: "transferObject") } func test_general_pb(dictionary: inout [String: Any]) { @@ -114,7 +114,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { func test_app(_ items: inout [[String: Data]]) { - var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "app") + var dictionary = extract_KeyedArchiver_pb(items: &items, key: "app") logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -167,7 +167,7 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { func test_userInfo(_ items: inout [[String: Data]]) { - var dictionary = test_extract_KeyedArchiver_pb(items: &items, key: "userInfo") + var dictionary = extract_KeyedArchiver_pb(items: &items, key: "userInfo") logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") From 46f25df54a6feaba79946d6bc2cd226d170ac940 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 13 Apr 2022 22:07:03 +0800 Subject: [PATCH 085/123] refactor: avoid error in share and oauth --- Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift | 6 +++++- Tests/NBusTests/Base/HandlerBaseTests+Share.swift | 11 +++++++---- Tests/NBusTests/Base/OauthTestCase.swift | 3 +++ Tests/NBusTests/Base/ShareTestCase.swift | 3 +++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index bde99ac..1ac18f6 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -34,7 +34,7 @@ extension OauthTestCase { UIPasteboard.general.rx .items() .do(onNext: { [unowned self] items in - if platform == Platforms.qq { + if self._avoid_oauth_pb_error(items, platform) { precondition(items.isEmpty) self.pbExpectation.fulfill() @@ -136,6 +136,10 @@ extension _OauthPasteboardTestCase { XCTAssertTrue(dictionary.isEmpty) } + + func _avoid_oauth_pb_error(_ items: [[String: Any]], _ platform: Platform) -> Bool { + platform == Platforms.qq + } } // MARK: - Oauth - Completion diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 18571f5..f6829fe 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -34,10 +34,7 @@ extension ShareTestCase { UIPasteboard.general.rx .items() .do(onNext: { [unowned self] items in - if - (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) - || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) { + if self._avoid_share_pb_error(items, message, endpoint) { precondition(items.isEmpty) self.pbExpectation.fulfill() @@ -156,6 +153,12 @@ extension _SharePasteboardTestCase { XCTAssertTrue(dictionary.isEmpty) } + + func _avoid_share_pb_error(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) -> Bool { + (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) + || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) + || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) + } } // MARK: - Share - Completion diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift index 50c40ef..1496381 100644 --- a/Tests/NBusTests/Base/OauthTestCase.swift +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -75,6 +75,9 @@ protocol _OauthPasteboardTestCase: /// Test oauth pasteboard dictionary func _test_oauth_pb(dictionary: [String: Any], _ platform: Platform) + + /// Avoid oauth pasteboard error + func _avoid_oauth_pb_error(_ items: [[String: Any]], _ platform: Platform) -> Bool } // MARK: - Oauth - Completion diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 1168760..04cae37 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -111,6 +111,9 @@ protocol _SharePasteboardTestCase: /// Test share pasteboard dictionary func _test_share_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) + + /// Avoid share pasteboard error + func _avoid_share_pb_error(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) -> Bool } // MARK: - Share - Completion From 34f05f3bf658247f906da151ebcec968ea773ed7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 01:08:34 +0800 Subject: [PATCH 086/123] fix: copy WeiboSDK.bundle to app --- Example/project.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Example/project.yml b/Example/project.yml index 4dfe272..1cb42e4 100644 --- a/Example/project.yml +++ b/Example/project.yml @@ -71,6 +71,9 @@ targets: - path: NBus includes: - Model/AppState+Notification.swift + postBuildScripts: + - script: | + find "${PROJECT_DIR}" -name "WeiboSDK.bundle" -exec cp -R "{}" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" \; scheme: testTargets: - BusTests From 484de2e2ab23e31211b85a421e81b78d274dd65f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 01:08:49 +0800 Subject: [PATCH 087/123] refactor: defaultPasteboardString --- Example/NBus/Model/AppState+ClearStorage.swift | 2 +- Example/NBus/Model/AppState.swift | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Example/NBus/Model/AppState+ClearStorage.swift b/Example/NBus/Model/AppState+ClearStorage.swift index 280fb2c..1d06ed2 100644 --- a/Example/NBus/Model/AppState+ClearStorage.swift +++ b/Example/NBus/Model/AppState+ClearStorage.swift @@ -35,7 +35,7 @@ extension AppState { pasteboard.items = [] if shouldSetString { - pasteboard.string = "NBus" + pasteboard.string = Self.defaultPasteboardString } } diff --git a/Example/NBus/Model/AppState.swift b/Example/NBus/Model/AppState.swift index 15ddd2e..48471fa 100644 --- a/Example/NBus/Model/AppState.swift +++ b/Example/NBus/Model/AppState.swift @@ -16,6 +16,8 @@ class AppState { static let shared = AppState() + static let defaultPasteboardString = "NBus" + private init() {} } From cf2d5cebb1b8cdf65674f7ac80f2139ebca29d0e Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 01:10:52 +0800 Subject: [PATCH 088/123] feat: test pasteboard with string --- .../Base/HandlerBaseTests+Launch.swift | 2 +- .../Base/HandlerBaseTests+Oauth.swift | 14 ++++++++--- .../Base/HandlerBaseTests+Share.swift | 14 ++++++++--- Tests/NBusTests/Base/HandlerBaseTests.swift | 8 +++++-- Tests/NBusTests/Base/LaunchTestCase.swift | 2 ++ Tests/NBusTests/Base/OauthTestCase.swift | 2 ++ Tests/NBusTests/Base/ShareTestCase.swift | 2 ++ Tests/NBusTests/Helper.swift | 23 +++++++++++++++++++ .../QQ/QQHandlerBaseTests+General.swift | 12 +++++++++- .../QQ/QQHandlerBaseTests+Share.swift | 6 +++-- .../WechatHandlerBaseTests+General.swift | 23 +++++++++++++++++-- 11 files changed, 94 insertions(+), 14 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index 9adaaa0..5158e17 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -33,7 +33,7 @@ extension LaunchTestCase { UIPasteboard.general.rx .items() - .filter { !$0.isEmpty } + .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in self._test_launch(items: items, platform, program) }) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 1ac18f6..9b9ed68 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -33,14 +33,22 @@ extension OauthTestCase { UIPasteboard.general.rx .items() - .do(onNext: { [unowned self] items in + .skip(while: { [unowned self] items in if self._avoid_oauth_pb_error(items, platform) { - precondition(items.isEmpty) + precondition(items.pasteboardString() == AppState.defaultPasteboardString) self.pbExpectation.fulfill() + + return true + } + + if self.context.setPasteboardString { + return items.pasteboardString() == AppState.defaultPasteboardString } + + return false }) - .filter { !$0.isEmpty } + .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in self._test_oauth(items: items, platform) }) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index f6829fe..5d6f391 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -33,14 +33,22 @@ extension ShareTestCase { UIPasteboard.general.rx .items() - .do(onNext: { [unowned self] items in + .skip(while: { [unowned self] items in if self._avoid_share_pb_error(items, message, endpoint) { - precondition(items.isEmpty) + precondition(items.pasteboardString() == AppState.defaultPasteboardString) self.pbExpectation.fulfill() + + return true + } + + if self.context.setPasteboardString { + return items.pasteboardString() == AppState.defaultPasteboardString } + + return false }) - .filter { !$0.isEmpty } + .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in self._test_share(items: items, message, endpoint) }) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 42e27bd..489e44b 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -53,6 +53,8 @@ class HandlerBaseTests: XCTestCase { static var disposeBag = DisposeBag() var disposeBag = DisposeBag() + var context = HandlerTestContext() + let ulExpectation = XCTestExpectation(description: "UniversalLink") let pbExpectation = XCTestExpectation(description: "Pasteboard") @@ -112,9 +114,11 @@ extension HandlerBaseTests { override func setUp() { super.setUp() - Bus.shared.handlers = [handler] + context.setPasteboardString = true - AppState.shared.clearPasteboard() + AppState.shared.clearPasteboard(shouldSetString: context.setPasteboardString) + + Bus.shared.handlers = [handler] } override func tearDown() { diff --git a/Tests/NBusTests/Base/LaunchTestCase.swift b/Tests/NBusTests/Base/LaunchTestCase.swift index b5932df..5fd12ef 100644 --- a/Tests/NBusTests/Base/LaunchTestCase.swift +++ b/Tests/NBusTests/Base/LaunchTestCase.swift @@ -100,4 +100,6 @@ protocol LaunchTestCase: _LaunchCompletionTestCase { var disposeBag: DisposeBag { get } + + var context: HandlerTestContext { get } } diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift index 1496381..3dc7758 100644 --- a/Tests/NBusTests/Base/OauthTestCase.swift +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -103,4 +103,6 @@ protocol OauthTestCase: _OauthCompletionTestCase { var disposeBag: DisposeBag { get } + + var context: HandlerTestContext { get } } diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 04cae37..028661c 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -142,4 +142,6 @@ protocol ShareTestCase: _ShareCompletionTestCase { var disposeBag: DisposeBag { get } + + var context: HandlerTestContext { get } } diff --git a/Tests/NBusTests/Helper.swift b/Tests/NBusTests/Helper.swift index 8c56aac..ff563a3 100644 --- a/Tests/NBusTests/Helper.swift +++ b/Tests/NBusTests/Helper.swift @@ -7,6 +7,7 @@ // import Foundation +import UIKit extension Array { @@ -15,3 +16,25 @@ extension Array { return remove(at: index) } } + +extension Array where Element == [String: Any] { + + func pasteboardString() -> String? { + let typeListString = UIPasteboard.typeListString as! [String] + + let strings = flatMap { dictionary in + typeListString.compactMap { key in + dictionary[key] as? String + } + } + + precondition(strings.count <= 1) + + return strings.first + } +} + +struct HandlerTestContext { + + var setPasteboardString = false +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index 0f5b467..225083c 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -69,10 +69,20 @@ extension QQHandlerBaseTests: GeneralPasteboardTestCase { } func test_general_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) + if context.setPasteboardString { + let pasted_string = dictionary.removeValue(forKey: "pasted_string") as! String + test_pasted_string(pasted_string) + } } func test_extra_pb(items: inout [[String: Data]]) { XCTAssertTrue(true) } } + +extension QQHandlerBaseTests { + + func test_pasted_string(_ value: String) { + XCTAssertEqual(value, AppState.defaultPasteboardString) + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index b2359bf..99e6d4e 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -468,8 +468,10 @@ extension QQHandlerBaseTests { func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { let thumbnail: (String) -> Data = { value in let data = Data(base64Encoded: value)! - let object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] - return object["previewimagedata"] as! Data + var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + let thumbnail = object.removeValue(forKey: "previewimagedata") as! Data + XCTAssertTrue(object.isEmpty) + return thumbnail } switch message { diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index 9f1a24c..23678f5 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -58,8 +58,20 @@ extension WechatHandlerBaseTests { extension WechatHandlerBaseTests: GeneralPasteboardTestCase { func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { - let plist = extract_PropertyList_pb(items: &items, key: "content") - let dictionary = plist[appID] as! [String: Any] + var plist = extract_PropertyList_pb(items: &items, key: "content") + + logger.debug("\(UIPasteboard.self), start, \(plist.keys.sorted())") + + let dictionary = plist.removeValue(forKey: appID) as! [String: Any] + + if context.setPasteboardString { + let old_text = plist.removeValue(forKey: "old_text") as! String + test_old_text(old_text) + } + + logger.debug("\(UIPasteboard.self), end, \(plist.keys.sorted())") + + XCTAssertTrue(plist.isEmpty) return dictionary } @@ -86,6 +98,13 @@ extension WechatHandlerBaseTests: GeneralPasteboardTestCase { } } +extension WechatHandlerBaseTests { + + func test_old_text(_ value: String) { + XCTAssertEqual(value, AppState.defaultPasteboardString) + } +} + extension WechatHandlerBaseTests { func test_isAutoResend(_ value: Bool) { From 3a5591e7bbed6c1e46bbe0013724f33979e275a5 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 01:11:09 +0800 Subject: [PATCH 089/123] feat: log url --- Tests/NBusTests/Base/HandlerBaseTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 489e44b..c677ac8 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -67,6 +67,8 @@ class HandlerBaseTests: XCTestCase { let url = notification.userInfo?[AppState.OpenURL.requestKey] as! URL let result = Bus.shared.openURL(url) + logger.debug("\(url)") + NotificationCenter.default.post( name: AppState.OpenURL.responseName, object: nil, @@ -83,6 +85,8 @@ class HandlerBaseTests: XCTestCase { let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestKey] as! NSUserActivity let result = Bus.shared.openUserActivity(userActivity) + logger.debug("\(String(describing: userActivity.webpageURL))") + NotificationCenter.default.post( name: AppState.OpenUserActivity.responseName, object: nil, From 38c7a6c2ac6a551f287f0cef8738087558031b82 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 01:12:16 +0800 Subject: [PATCH 090/123] fix: aid could be nil --- Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index ad215d6..ba66a22 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -118,7 +118,7 @@ extension WeiboHandlerBaseTests { logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - let aid = dictionary.removeValue(forKey: "aid") as! String + let aid = dictionary.removeValue(forKey: "aid") as? String test_aid(aid) let appKey = dictionary.removeValue(forKey: "appKey") as! String @@ -138,8 +138,10 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests { - func test_aid(_ value: String) { - XCTAssertEqual(value.count, 50) + func test_aid(_ value: String?) { + let isNil = value == nil + let isCountFifty = value?.count == 50 + XCTAssertTrue(isNil || isCountFifty) } func test_appKey(_ value: String) { From 46cb8ae34d2848d409729093c1070f0d210252ba Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 19:06:13 +0800 Subject: [PATCH 091/123] feat: log pasteboard keys --- Tests/NBusTests/Base/HandlerBaseTests.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index c677ac8..bfd9582 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -110,6 +110,13 @@ class HandlerBaseTests: XCTestCase { logger.debug("\(url)") }) .disposed(by: disposeBag) + + UIPasteboard.general.rx + .items() + .bind(onNext: { items in + logger.debug("\(items.map { $0.keys.sorted() })") + }) + .disposed(by: disposeBag) } } From eef9c653c8b82ffb6f8a652e2a3da117c0dab1ed Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 21:08:21 +0800 Subject: [PATCH 092/123] fix: handle response notification early --- Example/NBus/AppDelegateSDK.swift | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index eb69e4f..cfe956b 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -81,16 +81,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { let group = DispatchGroup() - group.enter() - - NotificationCenter.default.post( - name: AppState.OpenURL.requestName, - object: nil, - userInfo: [ - AppState.OpenURL.requestKey: url, - ] - ) - var result: Bool! openURLToken = NotificationCenter.default.addObserver( @@ -104,6 +94,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } ) + group.enter() + + NotificationCenter.default.post( + name: AppState.OpenURL.requestName, + object: nil, + userInfo: [ + AppState.OpenURL.requestKey: url, + ] + ) + group.wait() openURLToken = nil @@ -117,16 +117,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { let group = DispatchGroup() - group.enter() - - NotificationCenter.default.post( - name: AppState.OpenUserActivity.requestName, - object: nil, - userInfo: [ - AppState.OpenUserActivity.requestKey: userActivity, - ] - ) - var result: Bool! openUserActivityToken = NotificationCenter.default.addObserver( @@ -140,6 +130,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } ) + group.enter() + + NotificationCenter.default.post( + name: AppState.OpenUserActivity.requestName, + object: nil, + userInfo: [ + AppState.OpenUserActivity.requestKey: userActivity, + ] + ) + group.wait() openUserActivityToken = nil From dc7cccd927593c0750092753f6346e98901418d0 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 21:35:41 +0800 Subject: [PATCH 093/123] refactor: exact type --- Example/NBus/AppDelegateSDK.swift | 8 ++++---- Example/NBus/Model/AppState+Notification.swift | 8 ++++---- Tests/NBusTests/Base/HandlerBaseTests.swift | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index cfe956b..9351167 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -88,7 +88,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { object: nil, queue: nil, using: { notification in - result = notification.userInfo?[AppState.OpenURL.responseKey] as? Bool + result = notification.userInfo?[AppState.OpenURL.responseResultKey] as? Bool group.leave() } @@ -100,7 +100,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { name: AppState.OpenURL.requestName, object: nil, userInfo: [ - AppState.OpenURL.requestKey: url, + AppState.OpenURL.requestURLKey: url, ] ) @@ -124,7 +124,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { object: nil, queue: nil, using: { notification in - result = notification.userInfo?[AppState.OpenUserActivity.responseKey] as? Bool + result = notification.userInfo?[AppState.OpenUserActivity.responseResultKey] as? Bool group.leave() } @@ -136,7 +136,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { name: AppState.OpenUserActivity.requestName, object: nil, userInfo: [ - AppState.OpenUserActivity.requestKey: userActivity, + AppState.OpenUserActivity.requestUserActivityKey: userActivity, ] ) diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index 5206c1d..61ed178 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -22,14 +22,14 @@ extension AppState { enum OpenURL { static let requestName = Notification.Name("Bus.OpenURL") static let responseName = Notification.Name("Bus.OpenURL.Result") - static let requestKey = "url" - static let responseKey = "result" + static let requestURLKey = "url" + static let responseResultKey = "result" } enum OpenUserActivity { static let requestName = Notification.Name("Bus.OpenUserActivity") static let responseName = Notification.Name("Bus.OpenUserActivity.Result") - static let requestKey = "userActivity" - static let responseKey = "result" + static let requestUserActivityKey = "userActivity" + static let responseResultKey = "result" } } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index bfd9582..3636000 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -64,7 +64,7 @@ class HandlerBaseTests: XCTestCase { NotificationCenter.default.rx .notification(AppState.OpenURL.requestName) .bind(onNext: { notification in - let url = notification.userInfo?[AppState.OpenURL.requestKey] as! URL + let url = notification.userInfo?[AppState.OpenURL.requestURLKey] as! URL let result = Bus.shared.openURL(url) logger.debug("\(url)") @@ -73,7 +73,7 @@ class HandlerBaseTests: XCTestCase { name: AppState.OpenURL.responseName, object: nil, userInfo: [ - AppState.OpenURL.responseKey: result, + AppState.OpenURL.responseResultKey: result, ] ) }) @@ -82,7 +82,7 @@ class HandlerBaseTests: XCTestCase { NotificationCenter.default.rx .notification(AppState.OpenUserActivity.requestName) .bind(onNext: { notification in - let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestKey] as! NSUserActivity + let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity let result = Bus.shared.openUserActivity(userActivity) logger.debug("\(String(describing: userActivity.webpageURL))") @@ -91,7 +91,7 @@ class HandlerBaseTests: XCTestCase { name: AppState.OpenUserActivity.responseName, object: nil, userInfo: [ - AppState.OpenUserActivity.responseKey: result, + AppState.OpenUserActivity.responseResultKey: result, ] ) }) From 3c953694ec2bc4a8c26cc6b75e9279bad653b60a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 21:42:24 +0800 Subject: [PATCH 094/123] feat: get pasteboard data from SDK --- Example/NBus/AppDelegateSDK.swift | 2 ++ Example/NBus/Model/AppState+Notification.swift | 2 ++ Tests/NBusTests/Base/HandlerBaseTests.swift | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index 9351167..351970e 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -101,6 +101,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { object: nil, userInfo: [ AppState.OpenURL.requestURLKey: url, + AppState.OpenURL.requestPasteboardKey: UIPasteboard.general.items, ] ) @@ -137,6 +138,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { object: nil, userInfo: [ AppState.OpenUserActivity.requestUserActivityKey: userActivity, + AppState.OpenUserActivity.requestPasteboardKey: UIPasteboard.general.items, ] ) diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index 61ed178..8697f3d 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -23,6 +23,7 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenURL") static let responseName = Notification.Name("Bus.OpenURL.Result") static let requestURLKey = "url" + static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } @@ -30,6 +31,7 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenUserActivity") static let responseName = Notification.Name("Bus.OpenUserActivity.Result") static let requestUserActivityKey = "userActivity" + static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 3636000..724325f 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -65,9 +65,11 @@ class HandlerBaseTests: XCTestCase { .notification(AppState.OpenURL.requestName) .bind(onNext: { notification in let url = notification.userInfo?[AppState.OpenURL.requestURLKey] as! URL + let items = notification.userInfo?[AppState.OpenURL.requestPasteboardKey] as! [[String: Any]] let result = Bus.shared.openURL(url) logger.debug("\(url)") + logger.debug("\(items.map { $0.keys.sorted() })") NotificationCenter.default.post( name: AppState.OpenURL.responseName, @@ -83,9 +85,11 @@ class HandlerBaseTests: XCTestCase { .notification(AppState.OpenUserActivity.requestName) .bind(onNext: { notification in let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity + let items = notification.userInfo?[AppState.OpenUserActivity.requestPasteboardKey] as! [[String: Any]] let result = Bus.shared.openUserActivity(userActivity) logger.debug("\(String(describing: userActivity.webpageURL))") + logger.debug("\(items.map { $0.keys.sorted() })") NotificationCenter.default.post( name: AppState.OpenUserActivity.responseName, From 90fc204fbf5bf52c0d63d197ca2895cc3944dcde Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sat, 16 Apr 2022 21:43:32 +0800 Subject: [PATCH 095/123] fix: multithread --- Example/NBus/Model/Reactive.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Example/NBus/Model/Reactive.swift b/Example/NBus/Model/Reactive.swift index 1b277b9..2d6888f 100644 --- a/Example/NBus/Model/Reactive.swift +++ b/Example/NBus/Model/Reactive.swift @@ -39,6 +39,7 @@ extension Reactive where Base: UIPasteboard { func items() -> Observable<[[String: Any]]> { NotificationCenter.default.rx .notification(UIPasteboard.changedNotification) + .observe(on: MainScheduler.asyncInstance) .map { _ in base.items } } } From 49ab8e3886325ce92aa768bad1b88ce68676bfa4 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 17 Apr 2022 01:07:58 +0800 Subject: [PATCH 096/123] refactor: remove ShareCommonUniversalLinkTestCase and ShareMediaMessageUniversalLinkTestCase --- .../Base/HandlerBaseTests+Share.swift | 12 +- Tests/NBusTests/Base/ShareTestCase.swift | 28 +-- .../QQ/QQHandlerBaseTests+Share.swift | 180 ++++++++---------- .../Wechat/WechatHandlerBaseTests+Share.swift | 26 +-- .../Weibo/WeiboHandlerBaseTests+Oauth.swift | 2 +- .../Weibo/WeiboHandlerBaseTests+Share.swift | 26 +-- 6 files changed, 96 insertions(+), 178 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 5d6f391..f9b3d85 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -95,18 +95,10 @@ extension _ShareUniversalLinkTestCase { test_general_ul(host: urlComponents.host!) test_general_ul(queryItems: &queryItems) - // Share - Common - UniversalLink - - test_share_common_ul(path: urlComponents.path) - test_share_common_ul(queryItems: &queryItems) - - // Share - MediaMessage - UniversalLink - - test_share_media_ul(queryItems: &queryItems, message, endpoint) - // Share - Message - UniversalLink - test_share_message_ul(queryItems: &queryItems, message, endpoint) + test_share_ul(path: urlComponents.path) + test_share_ul(queryItems: &queryItems, message, endpoint) logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 028661c..38c2b42 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -29,39 +29,21 @@ protocol _ShareSchemeTestCase: func _test_share(scheme: URL, _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Common - UniversalLink - -protocol ShareCommonUniversalLinkTestCase: XCTestCase { - - /// Test share common universal link path - func test_share_common_ul(path: String) - - /// Test share common universal link queryItems - func test_share_common_ul(queryItems: inout [URLQueryItem]) -} - -// MARK: - Share - MediaMessage - UniversalLink - -protocol ShareMediaMessageUniversalLinkTestCase: XCTestCase { - - /// Test share media message universal link queryItems - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) -} - // MARK: - Share - Message - UniversalLink protocol ShareMessageUniversalLinkTestCase: XCTestCase { - /// Test share message universal link queryItems - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) + /// Test share universal link path + func test_share_ul(path: String) + + /// Test share universal link queryItems + func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } // MARK: - Share - UniversalLink protocol _ShareUniversalLinkTestCase: GeneralUniversalLinkTestCase, - ShareCommonUniversalLinkTestCase, - ShareMediaMessageUniversalLinkTestCase, ShareMessageUniversalLinkTestCase { /// Universal link expectation diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 99e6d4e..5bc2c4d 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -99,121 +99,27 @@ extension QQHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Common - UniversalLink +// MARK: - Share - Message - UniversalLink -extension QQHandlerBaseTests: ShareCommonUniversalLinkTestCase { +extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { - func test_share_common_ul(path: String) { + func test_share_ul(path: String) { XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") } - func test_share_common_ul(queryItems: inout [URLQueryItem]) { + func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) let callback_type = queryItems.removeFirst { $0.name == "callback_type" }! test_callback_type(callback_type) - let src_type = queryItems.removeFirst { $0.name == "src_type" }! - test_src_type(src_type) - - let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! - test_thirdAppDisplayName(thirdAppDisplayName) - - let version = queryItems.removeFirst { $0.name == "version" }! - test_version(version) - } -} - -extension QQHandlerBaseTests { - - func test_callback_name(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) - } - - func test_callback_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "scheme") - } - - func test_src_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "app") - } - - func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) - } - - func test_version(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "1") - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension QQHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { + let cflag = queryItems.removeFirst { $0.name == "cflag" }! + test_cflag(cflag, message, endpoint) - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { let description = queryItems.removeFirst { $0.name == "description" } test_description(description, message) - let title = queryItems.removeFirst { $0.name == "title" } - test_title(title, message) - } -} - -extension QQHandlerBaseTests { - - func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } - - func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(queryItem) - case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) - default: - XCTAssertTrue(false, String(describing: queryItem?.value)) - } - } -} - -// MARK: - Share - Message - UniversalLink - -extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - let cflag = queryItems.removeFirst { $0.name == "cflag" }! - test_cflag(cflag, message, endpoint) - let fileName = queryItems.removeFirst { $0.name == "fileName" } test_fileName(fileName, message) @@ -253,13 +159,33 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { let shareType = queryItems.removeFirst { $0.name == "shareType" }! test_shareType(shareType, message, endpoint) + let src_type = queryItems.removeFirst { $0.name == "src_type" }! + test_src_type(src_type) + + let thirdAppDisplayName = queryItems.removeFirst { $0.name == "thirdAppDisplayName" }! + test_thirdAppDisplayName(thirdAppDisplayName) + + let title = queryItems.removeFirst { $0.name == "title" } + test_title(title, message) + let url = queryItems.removeFirst { $0.name == "url" } test_url(url, message) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) } } extension QQHandlerBaseTests { + func test_callback_name(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, txID) + } + + func test_callback_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "scheme") + } + func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { switch endpoint { case Endpoints.QQ.friend: @@ -284,6 +210,27 @@ extension QQHandlerBaseTests { } } + func test_description(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + func test_fileName(_ queryItem: URLQueryItem?, _ message: MessageType) { switch message { case is TextMessage, @@ -522,6 +469,35 @@ extension QQHandlerBaseTests { } } + func test_src_type(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "app") + } + + func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) + } + + func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(queryItem) + case let message as ImageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as AudioMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as VideoMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as WebPageMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as FileMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + case let message as MiniProgramMessage: + XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + default: + XCTAssertTrue(false, String(describing: queryItem?.value)) + } + } + func test_url(_ queryItem: URLQueryItem?, _ message: MessageType) { switch message { case is TextMessage, @@ -540,6 +516,10 @@ extension QQHandlerBaseTests { XCTAssertTrue(false, String(describing: queryItem?.value)) } } + + func test_version(_ queryItem: URLQueryItem) { + XCTAssertEqual(queryItem.value!, "1") + } } // MARK: - Share - Common - Pasteboard diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index e9ece63..5eb61e5 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -120,33 +120,15 @@ extension WechatHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Common - UniversalLink +// MARK: - Share - Message - UniversalLink -extension WechatHandlerBaseTests: ShareCommonUniversalLinkTestCase { +extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { - func test_share_common_ul(path: String) { + func test_share_ul(path: String) { XCTAssertEqual(path, "/app/\(appID)/sendreq/") } - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension WechatHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - UniversalLink - -extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift index 79426c4..4fb34f8 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift @@ -33,7 +33,7 @@ extension WeiboHandlerBaseTests: OauthPlatformSchemeTestCase { extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { func test_oauth_ul(path: String) { - test_share_common_ul(path: path) + test_share_ul(path: path) } func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index 9c39b90..b5d24a1 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -64,33 +64,15 @@ extension WeiboHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Common - UniversalLink +// MARK: - Share - Message - UniversalLink -extension WeiboHandlerBaseTests: ShareCommonUniversalLinkTestCase { +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { - func test_share_common_ul(path: String) { + func test_share_ul(path: String) { XCTAssertEqual(path, "/weibosdk/request") } - func test_share_common_ul(queryItems: inout [URLQueryItem]) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - MediaMessage - UniversalLink - -extension WeiboHandlerBaseTests: ShareMediaMessageUniversalLinkTestCase { - - func test_share_media_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - UniversalLink - -extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { - - func test_share_message_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { XCTAssertTrue(true) } } From 585215d6f1965f8cb8b16534224d06491cae0059 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 17 Apr 2022 01:28:03 +0800 Subject: [PATCH 097/123] refactor: remove ShareCommonPasteboardTestCase and ShareMediaMessagePasteboardTestCase --- .../Base/HandlerBaseTests+Share.swift | 10 +- Tests/NBusTests/Base/ShareTestCase.swift | 22 +- .../QQ/QQHandlerBaseTests+Share.swift | 57 +-- .../Wechat/WechatHandlerBaseTests+Share.swift | 393 +++++++++--------- .../Weibo/WeiboHandlerBaseTests+Share.swift | 31 +- 5 files changed, 215 insertions(+), 298 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index f9b3d85..03d80a1 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -137,17 +137,9 @@ extension _SharePasteboardTestCase { test_general_pb(dictionary: &dictionary) - // Share - Common - Pasteboard - - test_share_common_pb(dictionary: &dictionary) - - // Share - MediaMessage - Pasteboard - - test_share_media_pb(dictionary: &dictionary, message, endpoint) - // Share - Message - Pasteboard - test_share_message_pb(dictionary: &dictionary, message, endpoint) + test_share_pb(dictionary: &dictionary, message, endpoint) logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 38c2b42..20b0e5c 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -53,36 +53,18 @@ protocol _ShareUniversalLinkTestCase: func _test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Common - Pasteboard - -protocol ShareCommonPasteboardTestCase: XCTestCase { - - /// Test share common pasteboard dictionary - func test_share_common_pb(dictionary: inout [String: Any]) -} - -// MARK: - Share - MediaMessage - Pasteboard - -protocol ShareMediaMessagePasteboardTestCase: XCTestCase { - - /// Test share media message pasteboard dictionary - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) -} - // MARK: - Share - Message - Pasteboard protocol ShareMessagePasteboardTestCase: XCTestCase { - /// Test share message pasteboard dictionary - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) + /// Test share pasteboard dictionary + func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) } // MARK: - Share - Pasteboard protocol _SharePasteboardTestCase: GeneralPasteboardTestCase, - ShareCommonPasteboardTestCase, - ShareMediaMessagePasteboardTestCase, ShareMessagePasteboardTestCase { /// Pasteboard expectation diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 5bc2c4d..7127f26 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -522,20 +522,14 @@ extension QQHandlerBaseTests { } } -// MARK: - Share - Common - Pasteboard - -extension QQHandlerBaseTests: ShareCommonPasteboardTestCase { - - func test_share_common_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) - } -} +// MARK: - Share - Message - Pasteboard -// MARK: - Share - MediaMessage - Pasteboard +extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { -extension QQHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let file_data = dictionary.removeValue(forKey: "file_data") as? Data + test_file_data(file_data, message) - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data test_previewimagedata(previewimagedata, message) } @@ -543,46 +537,33 @@ extension QQHandlerBaseTests: ShareMediaMessagePasteboardTestCase { extension QQHandlerBaseTests { - func test_previewimagedata(_ value: Data?, _ message: MessageType) { + func test_file_data(_ value: Data?, _ message: MessageType) { switch message { - case is TextMessage: + case is TextMessage, + is AudioMessage, + is VideoMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) - case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.data) case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.data) default: XCTAssertTrue(false, String(describing: value)) } } -} - -// MARK: - Share - Message - Pasteboard - -extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let file_data = dictionary.removeValue(forKey: "file_data") as? Data - test_file_data(file_data, message) - } -} - -extension QQHandlerBaseTests { - func test_file_data(_ value: Data?, _ message: MessageType) { + func test_previewimagedata(_ value: Data?, _ message: MessageType) { switch message { - case is TextMessage, - is AudioMessage, - is VideoMessage: + case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) case let message as FileMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(value!, message.thumbnail) default: XCTAssertTrue(false, String(describing: value)) } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 5eb61e5..38b249c 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -133,32 +133,47 @@ extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { } } -// MARK: - Share - Common - Pasteboard - -extension WechatHandlerBaseTests: ShareCommonPasteboardTestCase { +// MARK: - Share - Message - Pasteboard - func test_share_common_pb(dictionary: inout [String: Any]) { - XCTAssertTrue(true) - } -} +extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { -// MARK: - Share - MediaMessage - Pasteboard + func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String + test_appBrandPath(appBrandPath, message) -extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { + let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String + test_appBrandUserName(appBrandUserName, message) - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let appbrandissecrectmessage = dictionary.removeValue(forKey: "appbrandissecrectmessage") as? Bool test_appbrandissecrectmessage(appbrandissecrectmessage, message) let appbrandisupdatablemessage = dictionary.removeValue(forKey: "appbrandisupdatablemessage") as? Bool test_appbrandisupdatablemessage(appbrandisupdatablemessage, message) + let command = dictionary.removeValue(forKey: "command") as! String + test_command(command, message) + let description = dictionary.removeValue(forKey: "description") as? String test_description(description, message) let disableForward = dictionary.removeValue(forKey: "disableForward") as? Bool test_disableForward(disableForward, message) + let fileData = dictionary.removeValue(forKey: "fileData") as? Data + test_fileData(fileData, message) + + let fileExt = dictionary.removeValue(forKey: "fileExt") as? String + test_fileExt(fileExt, message) + + let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data + test_hdThumbData(hdThumbData, message) + + let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String + test_mediaDataUrl(mediaDataUrl, message) + + let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String + test_mediaUrl(mediaUrl, message) + let miniprogramType = dictionary.removeValue(forKey: "miniprogramType") as? Int test_miniprogramType(miniprogramType, message) @@ -171,9 +186,15 @@ extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { let objectType = dictionary.removeValue(forKey: "objectType") as? String test_objectType(objectType, message) + let scene = dictionary.removeValue(forKey: "scene") as! String + test_scene(scene, endpoint) + let thumbData = dictionary.removeValue(forKey: "thumbData") as? Data test_thumbData(thumbData, message) + let title = dictionary.removeValue(forKey: "title") as! String + test_title(title, message) + let weworkObjectSubType = dictionary.removeValue(forKey: "weworkObjectSubType") as? String test_weworkObjectSubType(weworkObjectSubType, message) @@ -184,92 +205,39 @@ extension WechatHandlerBaseTests: ShareMediaMessagePasteboardTestCase { extension WechatHandlerBaseTests { - func test_appbrandissecrectmessage(_ value: Bool?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_appbrandisupdatablemessage(_ value: Bool?, _ message: MessageType) { + func test_appBrandPath(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, + case is TextMessage, + is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_description(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: + is FileMessage: XCTAssertNil(value) - case let message as ImageMessage: - XCTAssertEqual(value!, message.description) - case let message as AudioMessage: - XCTAssertEqual(value!, message.description) - case let message as VideoMessage: - XCTAssertEqual(value!, message.description) - case let message as WebPageMessage: - XCTAssertEqual(value!, message.description) - case let message as FileMessage: - XCTAssertEqual(value!, message.description) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(value!, message.path) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_disableForward(_ value: Bool?, _ message: MessageType) { + func test_appBrandUserName(_ value: String?, _ message: MessageType) { switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, + case is TextMessage, + is ImageMessage, is AudioMessage, is VideoMessage, is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, false) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_miniprogramType(_ value: Int?, _ message: MessageType) { - switch message { - case is TextMessage: + is FileMessage: XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, 0) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.miniProgramID) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_musicVideoDuration(_ value: String?, _ message: MessageType) { + func test_appbrandissecrectmessage(_ value: Bool?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) @@ -279,13 +247,13 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(value!, false) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + func test_appbrandisupdatablemessage(_ value: Bool?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) @@ -295,71 +263,50 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(value!, false) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_objectType(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage: - XCTAssertEqual(value!, "2") - case is AudioMessage: - XCTAssertEqual(value!, "3") - case is VideoMessage: - XCTAssertEqual(value!, "4") - case is WebPageMessage: - XCTAssertEqual(value!, "5") - case is FileMessage: - XCTAssertEqual(value!, "6") - case is MiniProgramMessage: - XCTAssertEqual(value!, "36") + func test_command(_ value: String, _ message: MessageType) { + switch message.identifier { + case Messages.text: + XCTAssertEqual(value, "1020") + case Messages.image, + Messages.audio, + Messages.video, + Messages.webPage, + Messages.file, + Messages.miniProgram: + XCTAssertEqual(value, "1010") default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_thumbData(_ value: Data?, _ message: MessageType) { + func test_description(_ value: String?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.description) case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.description) case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.description) case let message as WebPageMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.description) case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(value!, message.description) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage: - XCTAssertNil(value) - case is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage, - is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(value!, message.description) default: XCTAssertTrue(false, "\(String(describing: value))") } } - func test_withShareTicket(_ value: Bool?, _ message: MessageType) { + func test_disableForward(_ value: Bool?, _ message: MessageType) { switch message { case is TextMessage: XCTAssertNil(value) @@ -374,94 +321,6 @@ extension WechatHandlerBaseTests { XCTAssertTrue(false, "\(String(describing: value))") } } -} - -// MARK: - Share - Message - Pasteboard - -extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String - test_appBrandPath(appBrandPath, message) - - let appBrandUserName = dictionary.removeValue(forKey: "appBrandUserName") as? String - test_appBrandUserName(appBrandUserName, message) - - let command = dictionary.removeValue(forKey: "command") as! String - test_command(command, message) - - let fileData = dictionary.removeValue(forKey: "fileData") as? Data - test_fileData(fileData, message) - - let fileExt = dictionary.removeValue(forKey: "fileExt") as? String - test_fileExt(fileExt, message) - - let hdThumbData = dictionary.removeValue(forKey: "hdThumbData") as? Data - test_hdThumbData(hdThumbData, message) - - let mediaDataUrl = dictionary.removeValue(forKey: "mediaDataUrl") as? String - test_mediaDataUrl(mediaDataUrl, message) - - let mediaUrl = dictionary.removeValue(forKey: "mediaUrl") as? String - test_mediaUrl(mediaUrl, message) - - let scene = dictionary.removeValue(forKey: "scene") as! String - test_scene(scene, endpoint) - - let title = dictionary.removeValue(forKey: "title") as! String - test_title(title, message) - } -} - -extension WechatHandlerBaseTests { - - func test_appBrandPath(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.path) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_appBrandUserName(_ value: String?, _ message: MessageType) { - switch message { - case is TextMessage, - is ImageMessage, - is AudioMessage, - is VideoMessage, - is WebPageMessage, - is FileMessage: - XCTAssertNil(value) - case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.miniProgramID) - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } - - func test_command(_ value: String, _ message: MessageType) { - switch message.identifier { - case Messages.text: - XCTAssertEqual(value, "1020") - case Messages.image, - Messages.audio, - Messages.video, - Messages.webPage, - Messages.file, - Messages.miniProgram: - XCTAssertEqual(value, "1010") - default: - XCTAssertTrue(false, "\(String(describing: value))") - } - } func test_fileData(_ value: Data?, _ message: MessageType) { switch message { @@ -547,6 +406,75 @@ extension WechatHandlerBaseTests { } } + func test_miniprogramType(_ value: Int?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, 0) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoDuration(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_musicVideoIssueData(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_objectType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage: + XCTAssertEqual(value!, "2") + case is AudioMessage: + XCTAssertEqual(value!, "3") + case is VideoMessage: + XCTAssertEqual(value!, "4") + case is WebPageMessage: + XCTAssertEqual(value!, "5") + case is FileMessage: + XCTAssertEqual(value!, "6") + case is MiniProgramMessage: + XCTAssertEqual(value!, "36") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + func test_scene(_ value: String, _ endpoint: Endpoint) { switch endpoint { case Endpoints.Wechat.friend: @@ -560,6 +488,27 @@ extension WechatHandlerBaseTests { } } + func test_thumbData(_ value: Data?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case let message as ImageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as AudioMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as VideoMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as FileMessage: + XCTAssertEqual(value!, message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(value!, message.thumbnail) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + func test_title(_ value: String, _ message: MessageType) { switch message { case let message as TextMessage: @@ -580,4 +529,36 @@ extension WechatHandlerBaseTests { XCTAssertTrue(false, "\(String(describing: value))") } } + + func test_weworkObjectSubType(_ value: String?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, "0") + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } + + func test_withShareTicket(_ value: Bool?, _ message: MessageType) { + switch message { + case is TextMessage: + XCTAssertNil(value) + case is ImageMessage, + is AudioMessage, + is VideoMessage, + is WebPageMessage, + is FileMessage, + is MiniProgramMessage: + XCTAssertEqual(value!, false) + default: + XCTAssertTrue(false, "\(String(describing: value))") + } + } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index b5d24a1..f66906c 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -77,13 +77,16 @@ extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { } } -// MARK: - Share - Common - Pasteboard +// MARK: - Share - Message - Pasteboard -extension WeiboHandlerBaseTests: ShareCommonPasteboardTestCase { +extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { - func test_share_common_pb(dictionary: inout [String: Any]) { + func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_share(`class`) + + let _message = dictionary.removeValue(forKey: "message") as! [String: Any] + test_message(_message, message, endpoint) } } @@ -92,28 +95,6 @@ extension WeiboHandlerBaseTests { func test_class_share(_ value: String) { XCTAssertEqual(value, "WBSendMessageToWeiboRequest") } -} - -// MARK: - Share - MediaMessage - Pasteboard - -extension WeiboHandlerBaseTests: ShareMediaMessagePasteboardTestCase { - - func test_share_media_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) - } -} - -// MARK: - Share - Message - Pasteboard - -extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { - - func test_share_message_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let _message = dictionary.removeValue(forKey: "message") as! [String: Any] - test_message(_message, message, endpoint) - } -} - -extension WeiboHandlerBaseTests { func test_message(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = value From f58a6adaeae613d07864b7408f5ff534e1b173d7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 17 Apr 2022 01:47:05 +0800 Subject: [PATCH 098/123] refactor: test function --- .../QQ/QQHandlerBaseTests+Oauth.swift | 86 ++++++++++++++++--- 1 file changed, 72 insertions(+), 14 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index e24d2a8..9e4a415 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -57,50 +57,108 @@ extension QQHandlerBaseTests { let data = Data(base64Encoded: queryItem.value!)! var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] + logger.debug("\(URLComponents.self), start, \(object.keys.sorted())") + let appsign_token = object.removeValue(forKey: "appsign_token") as! String - XCTAssertEqual(appsign_token, "") + test_appsign_token(appsign_token) let app_id = object.removeValue(forKey: "app_id") as! String - XCTAssertEqual(app_id, appNumber) + test_app_id(app_id) let app_name = object.removeValue(forKey: "app_name") as! String - XCTAssertEqual(app_name, displayName) + test_app_name(app_name) let bundleid = object.removeValue(forKey: "bundleid") as! String - XCTAssertEqual(bundleid, bundleID) + test_bundleid(bundleid) let client_id = object.removeValue(forKey: "client_id") as! String - XCTAssertEqual(client_id, appNumber) + test_client_id(client_id) let refUniversallink = object.removeValue(forKey: "refUniversallink") as! String - XCTAssertEqual(refUniversallink, universalLink.absoluteString) + test_refUniversallink(refUniversallink) let response_type = object.removeValue(forKey: "response_type") as! String - XCTAssertEqual(response_type, "token") + test_response_type(response_type) let scope = object.removeValue(forKey: "scope") as! String - XCTAssertEqual(scope, "get_user_info") + test_scope(scope) let sdkp = object.removeValue(forKey: "sdkp") as! String - XCTAssertEqual(sdkp, "i") + test_sdkp(sdkp) let sdkv = object.removeValue(forKey: "sdkv") as! String - XCTAssertEqual(sdkv, sdkVersion) + test_sdkv(sdkv) let status_machine = object.removeValue(forKey: "status_machine") as! String - XCTAssertEqual(status_machine, statusMachine) + test_status_machine(status_machine) let status_os = object.removeValue(forKey: "status_os") as! String - XCTAssertEqual(status_os, statusOS) + test_status_os(status_os) let status_version = object.removeValue(forKey: "status_version") as! String - XCTAssertEqual(status_version, statusVersion) + test_status_version(status_version) + + logger.debug("\(URLComponents.self), end, \(object.keys.sorted())") - logger.debug("\(URLComponents.self), \(object.keys.sorted())") XCTAssertTrue(object.isEmpty) } } +extension QQHandlerBaseTests { + + func test_appsign_token(_ value: String) { + XCTAssertEqual(value, "") + } + + func test_app_id(_ value: String) { + XCTAssertEqual(value, appNumber) + } + + func test_app_name(_ value: String) { + XCTAssertEqual(value, displayName) + } + + func test_bundleid(_ value: String) { + XCTAssertEqual(value, bundleID) + } + + func test_client_id(_ value: String) { + test_app_id(value) + } + + func test_refUniversallink(_ value: String) { + XCTAssertEqual(value, universalLink.absoluteString) + } + + func test_response_type(_ value: String) { + XCTAssertEqual(value, "token") + } + + func test_scope(_ value: String) { + XCTAssertEqual(value, "get_user_info") + } + + func test_sdkp(_ value: String) { + XCTAssertEqual(value, "i") + } + + func test_sdkv(_ value: String) { + XCTAssertEqual(value, sdkVersion) + } + + func test_status_machine(_ value: String) { + XCTAssertEqual(value, statusMachine) + } + + func test_status_os(_ value: String) { + XCTAssertEqual(value, statusOS) + } + + func test_status_version(_ value: String) { + XCTAssertEqual(value, statusVersion) + } +} + // MARK: - Oauth - Platform - Pasteboard extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { From b8a0fce99f2ed8fba85deb0015373fcb243a998b Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 19 Apr 2022 23:42:27 +0800 Subject: [PATCH 099/123] refactor: rename to BusMockTestSDK --- Example/NBus/AppDelegateSDK.swift | 6 +++--- Example/NBus/Model/AppState+Notification.swift | 2 +- Example/project.yml | 8 +++----- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index 351970e..b581f27 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -21,7 +21,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - #if BusTestsTarget + #if BusMockTestSDK var openURLToken: NSObjectProtocol? var openUserActivityToken: NSObjectProtocol? #endif @@ -49,7 +49,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { #elseif BusMockWeiboSDK let title = "isWeiboAppInstalled" let message = "\(WeiboSDK.isWeiboAppInstalled())" - #elseif BusTestsTarget + #elseif BusMockTestSDK let title = "Empty" let message = "Empty" #else @@ -73,7 +73,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } - #if BusTestsTarget + #if BusMockTestSDK func application( _ app: UIApplication, open url: URL, diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index 8697f3d..d184f0c 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -8,7 +8,7 @@ import Foundation -#if BusTestsTarget +#if BusMockTestSDK class AppState { static let shared = AppState() diff --git a/Example/project.yml b/Example/project.yml index 1cb42e4..3d55290 100644 --- a/Example/project.yml +++ b/Example/project.yml @@ -64,13 +64,11 @@ targets: BusMockWeiboSDK: templates: - BusMockSDKTemplate - BusTestsTarget: + BusMockTestSDK: templates: - BusMockSDKTemplate sources: - - path: NBus - includes: - - Model/AppState+Notification.swift + - path: NBus/Model/AppState+Notification.swift postBuildScripts: - script: | find "${PROJECT_DIR}" -name "WeiboSDK.bundle" -exec cp -R "{}" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" \; @@ -87,5 +85,5 @@ targets: excludes: - AppState+Setup.swift dependencies: - - target: BusTestsTarget + - target: BusMockTestSDK - package: Logging From 5e965c629ec1e827169a85b3ddf7b65e43dad0e4 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:02:50 +0800 Subject: [PATCH 100/123] refactor: AppState+PlatformItem --- .../NBus/Model/AppState+Notification.swift | 9 --- .../NBus/Model/AppState+PlatformItem.swift | 59 +++++++++++++++++++ Example/NBus/Model/AppState.swift | 57 ++---------------- 3 files changed, 65 insertions(+), 60 deletions(-) create mode 100644 Example/NBus/Model/AppState+PlatformItem.swift diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index d184f0c..4dcf403 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -8,15 +8,6 @@ import Foundation -#if BusMockTestSDK -class AppState { - - static let shared = AppState() - - private init() {} -} -#endif - extension AppState { enum OpenURL { diff --git a/Example/NBus/Model/AppState+PlatformItem.swift b/Example/NBus/Model/AppState+PlatformItem.swift new file mode 100644 index 0000000..504c055 --- /dev/null +++ b/Example/NBus/Model/AppState+PlatformItem.swift @@ -0,0 +1,59 @@ +// +// AppState+PlatformItem.swift +// NBus +// +// Created by nuomi1 on 2022/4/20. +// Copyright © 2022 nuomi1. All rights reserved. +// + +import Foundation +import NBus +import UIKit + +extension AppState { + + struct PlatformItem { + let platform: Platform + let category: Category + let handlers: [Category: HandlerType] + let viewController: () -> UIViewController + } +} + +extension AppState.PlatformItem { + + enum Category: Hashable { + case bus + case sdk + } +} + +extension AppState.PlatformItem.Category: CustomStringConvertible { + + var description: String { + switch self { + case .bus: + return "开源" + case .sdk: + return "官方" + } + } +} + +extension AppState.PlatformItem.Category { + + mutating func toggle() { + switch self { + case .bus: + self = .sdk + case .sdk: + self = .bus + } + } + + func toggled() -> Self { + var copy = self + copy.toggle() + return copy + } +} diff --git a/Example/NBus/Model/AppState.swift b/Example/NBus/Model/AppState.swift index 48471fa..a47f5d8 100644 --- a/Example/NBus/Model/AppState.swift +++ b/Example/NBus/Model/AppState.swift @@ -6,13 +6,16 @@ // Copyright © 2020 nuomi1. All rights reserved. // -import NBus -import RxRelay -import UIKit +import Foundation +#if BusMockQQSDK || BusMockWechatSDK || BusMockWeiboSDK +import RxSwift +#endif class AppState { + #if BusMockQQSDK || BusMockWechatSDK || BusMockWeiboSDK let platformItems = BehaviorRelay<[PlatformItem]>(value: []) + #endif static let shared = AppState() @@ -20,51 +23,3 @@ class AppState { private init() {} } - -extension AppState { - - struct PlatformItem { - let platform: Platform - let category: Category - let handlers: [Category: HandlerType] - let viewController: () -> UIViewController - } -} - -extension AppState.PlatformItem { - - enum Category: Hashable { - case bus - case sdk - } -} - -extension AppState.PlatformItem.Category: CustomStringConvertible { - - var description: String { - switch self { - case .bus: - return "开源" - case .sdk: - return "官方" - } - } -} - -extension AppState.PlatformItem.Category { - - mutating func toggle() { - switch self { - case .bus: - self = .sdk - case .sdk: - self = .bus - } - } - - func toggled() -> Self { - var copy = self - copy.toggle() - return copy - } -} From 96ff4d843ef90456c31623e0f3a2bcee6497322a Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:03:18 +0800 Subject: [PATCH 101/123] fix: BusMockTestSDK includes AppState.swift --- Example/project.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Example/project.yml b/Example/project.yml index 3d55290..33fc191 100644 --- a/Example/project.yml +++ b/Example/project.yml @@ -68,7 +68,11 @@ targets: templates: - BusMockSDKTemplate sources: - - path: NBus/Model/AppState+Notification.swift + - path: NBus + includes: + - Model/AppState.swift + - Model/AppState+ClearStorage.swift + - Model/AppState+Notification.swift postBuildScripts: - script: | find "${PROJECT_DIR}" -name "WeiboSDK.bundle" -exec cp -R "{}" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" \; From 126677b85cf52a9dc93a4d185bdd4147be91ff5b Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:03:59 +0800 Subject: [PATCH 102/123] refactor: set again pasteboard --- Example/NBus/AppDelegateSDK.swift | 6 ++++-- Example/NBus/Model/AppState+ClearStorage.swift | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index b581f27..f80b579 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -96,12 +96,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { group.enter() + AppState.shared.setAgainPasteboard() + NotificationCenter.default.post( name: AppState.OpenURL.requestName, object: nil, userInfo: [ AppState.OpenURL.requestURLKey: url, - AppState.OpenURL.requestPasteboardKey: UIPasteboard.general.items, ] ) @@ -133,12 +134,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { group.enter() + AppState.shared.setAgainPasteboard() + NotificationCenter.default.post( name: AppState.OpenUserActivity.requestName, object: nil, userInfo: [ AppState.OpenUserActivity.requestUserActivityKey: userActivity, - AppState.OpenUserActivity.requestPasteboardKey: UIPasteboard.general.items, ] ) diff --git a/Example/NBus/Model/AppState+ClearStorage.swift b/Example/NBus/Model/AppState+ClearStorage.swift index 1d06ed2..14a4a80 100644 --- a/Example/NBus/Model/AppState+ClearStorage.swift +++ b/Example/NBus/Model/AppState+ClearStorage.swift @@ -46,4 +46,13 @@ extension AppState { defaults.removeObject(forKey: key) } } + + func setAgainPasteboard() { + let pasteboard = UIPasteboard.general + + let items = pasteboard.items + + pasteboard.items = [] + pasteboard.items = items + } } From 1ff15d934503cb76af7465bc074724bc7c6580b2 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:04:27 +0800 Subject: [PATCH 103/123] fix: remove observer after notification --- Example/NBus/AppDelegateSDK.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index f80b579..c0234d3 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -107,7 +107,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) group.wait() - openURLToken = nil + + NotificationCenter.default.removeObserver(openURLToken!) return result } @@ -145,7 +146,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) group.wait() - openUserActivityToken = nil + + NotificationCenter.default.removeObserver(openUserActivityToken!) return result } From 4735e760f2bc326444b3c5da1ed9d4188e551d35 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:26:27 +0800 Subject: [PATCH 104/123] refactor: notification Response --- .../NBus/Model/AppState+Notification.swift | 2 -- Example/NBus/Model/Reactive.swift | 13 +++++++++++ Tests/NBusTests/Base/HandlerBaseTests.swift | 22 +++++++------------ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index 4dcf403..f354b28 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -14,7 +14,6 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenURL") static let responseName = Notification.Name("Bus.OpenURL.Result") static let requestURLKey = "url" - static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } @@ -22,7 +21,6 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenUserActivity") static let responseName = Notification.Name("Bus.OpenUserActivity.Result") static let requestUserActivityKey = "userActivity" - static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } } diff --git a/Example/NBus/Model/Reactive.swift b/Example/NBus/Model/Reactive.swift index 2d6888f..8c7d571 100644 --- a/Example/NBus/Model/Reactive.swift +++ b/Example/NBus/Model/Reactive.swift @@ -43,3 +43,16 @@ extension Reactive where Base: UIPasteboard { .map { _ in base.items } } } + +extension Reactive where Base: NotificationCenter { + + func openURL() -> Observable { + notification(AppState.OpenURL.requestName) + .map { $0.userInfo?[AppState.OpenURL.requestURLKey] as! URL } + } + + func openUserActivity() -> Observable { + notification(AppState.OpenUserActivity.requestName) + .map { $0.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity } + } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 724325f..41c7d8e 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -62,14 +62,11 @@ class HandlerBaseTests: XCTestCase { super.setUp() NotificationCenter.default.rx - .notification(AppState.OpenURL.requestName) - .bind(onNext: { notification in - let url = notification.userInfo?[AppState.OpenURL.requestURLKey] as! URL - let items = notification.userInfo?[AppState.OpenURL.requestPasteboardKey] as! [[String: Any]] - let result = Bus.shared.openURL(url) - + .openURL() + .bind(onNext: { url in logger.debug("\(url)") - logger.debug("\(items.map { $0.keys.sorted() })") + + let result = Bus.shared.openURL(url) NotificationCenter.default.post( name: AppState.OpenURL.responseName, @@ -82,14 +79,11 @@ class HandlerBaseTests: XCTestCase { .disposed(by: disposeBag) NotificationCenter.default.rx - .notification(AppState.OpenUserActivity.requestName) - .bind(onNext: { notification in - let userActivity = notification.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity - let items = notification.userInfo?[AppState.OpenUserActivity.requestPasteboardKey] as! [[String: Any]] - let result = Bus.shared.openUserActivity(userActivity) + .openUserActivity() + .bind(onNext: { userActivity in + logger.debug("\(userActivity.webpageURL!)") - logger.debug("\(String(describing: userActivity.webpageURL))") - logger.debug("\(items.map { $0.keys.sorted() })") + let result = Bus.shared.openUserActivity(userActivity) NotificationCenter.default.post( name: AppState.OpenUserActivity.responseName, From 847f1268817cf14e1c7f06caff50f8395f026853 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 21:41:57 +0800 Subject: [PATCH 105/123] feat: BusMockTestSDK adds WoodPeckeriOS --- Example/Podfile | 4 ++++ Example/Podfile.lock | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Example/Podfile b/Example/Podfile index 17387e5..c788cb2 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -28,6 +28,10 @@ target "BusMockWeiboSDK" do pod "NBusWeiboSDK" end +target "BusMockTestSDK" do + pod "WoodPeckeriOS" +end + target "BusTests" do pod "NBus/BusHandlers", :path => "../" pod "NBus/SDKHandlers", :path => "../" diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 50cc4b3..68f5329 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -38,7 +38,7 @@ PODS: - RxSwift (= 6.5.0) - RxSwift (6.5.0) - SwiftTrace (6.6.0) - - WoodPeckeriOS (1.2.93) + - WoodPeckeriOS (1.3.0) DEPENDENCIES: - NBus/BusHandlers (from `../`) @@ -77,8 +77,8 @@ SPEC CHECKSUMS: RxRelay: 1de1523e604c72b6c68feadedd1af3b1b4d0ecbd RxSwift: 5710a9e6b17f3c3d6e40d6e559b9fa1e813b2ef8 SwiftTrace: affc6601a316add7c299a3916d9f43c286a583ef - WoodPeckeriOS: 12ec7f38c695e51cd94a476228888dfe85d9d916 + WoodPeckeriOS: 39e2bc92d88460dfd0c9429580ef71748d0ecf5e -PODFILE CHECKSUM: 6385c66dd89179f87fb8def06a91dea9ccde0d51 +PODFILE CHECKSUM: 02653ac45a0ec833b1ea1151b71b2ce38660fe07 COCOAPODS: 1.11.2 From 781a177c07e4052986616f4f9cb85cb2d011c07b Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 22:13:34 +0800 Subject: [PATCH 106/123] fix: declaration --- Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index 9e4a415..1dd7964 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -69,7 +69,7 @@ extension QQHandlerBaseTests { test_app_name(app_name) let bundleid = object.removeValue(forKey: "bundleid") as! String - test_bundleid(bundleid) + test_bundleid_oauth(bundleid) let client_id = object.removeValue(forKey: "client_id") as! String test_client_id(client_id) @@ -87,7 +87,7 @@ extension QQHandlerBaseTests { test_sdkp(sdkp) let sdkv = object.removeValue(forKey: "sdkv") as! String - test_sdkv(sdkv) + test_sdkv_oauth(sdkv) let status_machine = object.removeValue(forKey: "status_machine") as! String test_status_machine(status_machine) @@ -118,7 +118,7 @@ extension QQHandlerBaseTests { XCTAssertEqual(value, displayName) } - func test_bundleid(_ value: String) { + func test_bundleid_oauth(_ value: String) { XCTAssertEqual(value, bundleID) } @@ -142,7 +142,7 @@ extension QQHandlerBaseTests { XCTAssertEqual(value, "i") } - func test_sdkv(_ value: String) { + func test_sdkv_oauth(_ value: String) { XCTAssertEqual(value, sdkVersion) } From e2744bacc217b8c2e2d2c4782c77062dd636915f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 22:18:58 +0800 Subject: [PATCH 107/123] refactor: change XCTAssertTrue(false) to fatalError() --- .../QQ/QQHandlerBaseTests+Share.swift | 45 +++++++++---------- .../WechatHandlerBaseTests+Launch.swift | 6 +-- .../Wechat/WechatHandlerBaseTests+Share.swift | 45 +++++++++---------- .../Weibo/WeiboHandlerBaseTests+Share.swift | 19 ++++---- 4 files changed, 56 insertions(+), 59 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 7127f26..a811ebf 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -93,8 +93,7 @@ extension QQHandlerBaseTests: ShareMessageSchemeTestCase { "mqqopensdknopasteboard", ] default: - XCTAssertTrue(false) - return [] + fatalError() } } } @@ -201,12 +200,12 @@ extension QQHandlerBaseTests { case Messages.miniProgram: XCTAssertEqual(queryItem.value!, "64") default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } case Endpoints.QQ.timeline: XCTAssertEqual(queryItem.value!, "0") default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } } @@ -227,7 +226,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -243,7 +242,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(queryItem!.value!, message.fullName) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -259,7 +258,7 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(queryItem) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -280,7 +279,7 @@ extension QQHandlerBaseTests { case Messages.miniProgram: XCTAssertEqual(queryItem.value!, "news") default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } } @@ -296,7 +295,7 @@ extension QQHandlerBaseTests { case let message as AudioMessage: XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -316,7 +315,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.miniProgramID) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -332,7 +331,7 @@ extension QQHandlerBaseTests { case is MiniProgramMessage: XCTAssertEqual(queryItem!.value!, "1") default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -348,7 +347,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -375,7 +374,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -391,7 +390,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -408,7 +407,7 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(queryItem!.value!, "url") default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -433,7 +432,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -450,7 +449,7 @@ extension QQHandlerBaseTests { Messages.miniProgram: XCTAssertEqual(queryItem.value!, "0") default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } case Endpoints.QQ.timeline: switch message.identifier { @@ -462,10 +461,10 @@ extension QQHandlerBaseTests { Messages.webPage: XCTAssertEqual(queryItem.value!, "1") default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } default: - XCTAssertTrue(false, String(describing: queryItem.value)) + fatalError() } } @@ -494,7 +493,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -513,7 +512,7 @@ extension QQHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) default: - XCTAssertTrue(false, String(describing: queryItem?.value)) + fatalError() } } @@ -548,7 +547,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value!, message.data) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -565,7 +564,7 @@ extension QQHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value!, message.thumbnail) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift index 9bf22e1..2e11819 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -73,7 +73,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem.value!, miniProgramType(message.miniProgramType)) default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") + fatalError() } } @@ -82,7 +82,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem.value!, message.path) default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") + fatalError() } } @@ -91,7 +91,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(queryItem.value!, message.miniProgramID) default: - XCTAssertTrue(false, "\(String(describing: queryItem.value))") + fatalError() } } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 38b249c..b57dfa0 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -114,8 +114,7 @@ extension WechatHandlerBaseTests: ShareMessageSchemeTestCase { is MiniProgramMessage: return [] default: - XCTAssertTrue(false) - return [] + fatalError() } } } @@ -217,7 +216,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.path) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -233,7 +232,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.miniProgramID) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -249,7 +248,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, false) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -265,7 +264,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, false) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -281,7 +280,7 @@ extension WechatHandlerBaseTests { Messages.miniProgram: XCTAssertEqual(value, "1010") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -302,7 +301,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.description) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -318,7 +317,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, false) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -335,7 +334,7 @@ extension WechatHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value, message.data) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -351,7 +350,7 @@ extension WechatHandlerBaseTests { case let message as FileMessage: XCTAssertEqual(value, message.fileExtension) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -367,7 +366,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.thumbnail) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -383,7 +382,7 @@ extension WechatHandlerBaseTests { case let message as AudioMessage: XCTAssertEqual(value!, message.dataLink?.absoluteString) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -402,7 +401,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.link.absoluteString) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -418,7 +417,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, 0) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -434,7 +433,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, "0") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -450,7 +449,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, "0") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -471,7 +470,7 @@ extension WechatHandlerBaseTests { case is MiniProgramMessage: XCTAssertEqual(value!, "36") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -484,7 +483,7 @@ extension WechatHandlerBaseTests { case Endpoints.Wechat.favorite: XCTAssertEqual(value, "2") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -505,7 +504,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value!, message.thumbnail) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -526,7 +525,7 @@ extension WechatHandlerBaseTests { case let message as MiniProgramMessage: XCTAssertEqual(value, message.title) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -542,7 +541,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, "0") default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } @@ -558,7 +557,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertEqual(value!, false) default: - XCTAssertTrue(false, "\(String(describing: value))") + fatalError() } } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index f66906c..07ecf1e 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -58,8 +58,7 @@ extension WeiboHandlerBaseTests: ShareMessageSchemeTestCase { is MiniProgramMessage: return [] default: - XCTAssertTrue(false) - return [] + fatalError() } } } @@ -135,7 +134,7 @@ extension WeiboHandlerBaseTests { case is ImageMessage: test_image(value!, message, endpoint) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -149,7 +148,7 @@ extension WeiboHandlerBaseTests { is WebPageMessage: test_media(value!, message, endpoint) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -163,7 +162,7 @@ extension WeiboHandlerBaseTests { is WebPageMessage: XCTAssertNil(value) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } } @@ -191,7 +190,7 @@ extension WeiboHandlerBaseTests { case let message as ImageMessage: XCTAssertEqual(value, message.data) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } } @@ -242,7 +241,7 @@ extension WeiboHandlerBaseTests { case let message as WebPageMessage: XCTAssertEqual(value, message.description) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -259,7 +258,7 @@ extension WeiboHandlerBaseTests { case let message as WebPageMessage: XCTAssertEqual(value, message.thumbnail) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -272,7 +271,7 @@ extension WeiboHandlerBaseTests { case let message as WebPageMessage: XCTAssertEqual(value, message.title) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } @@ -285,7 +284,7 @@ extension WeiboHandlerBaseTests { case let message as WebPageMessage: XCTAssertEqual(value, message.link.absoluteString) default: - XCTAssertTrue(false, String(describing: value)) + fatalError() } } } From 8683c4f8f7802ac8d68e7f8398ce2b6b5579d7e5 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Wed, 20 Apr 2022 22:39:31 +0800 Subject: [PATCH 108/123] refactor: use XCTUnwrap --- Tests/NBusTests/Base/GeneralTestCase.swift | 4 +- .../Base/HandlerBaseTests+Launch.swift | 6 +- .../Base/HandlerBaseTests+Oauth.swift | 6 +- .../Base/HandlerBaseTests+Share.swift | 6 +- .../QQ/QQHandlerBaseTests+General.swift | 14 +-- .../QQ/QQHandlerBaseTests+Launch.swift | 2 +- .../QQ/QQHandlerBaseTests+Oauth.swift | 4 +- .../QQ/QQHandlerBaseTests+Share.swift | 112 +++++++++--------- .../WechatHandlerBaseTests+General.swift | 12 +- .../WechatHandlerBaseTests+Launch.swift | 8 +- .../Wechat/WechatHandlerBaseTests+Oauth.swift | 4 +- .../Wechat/WechatHandlerBaseTests+Share.swift | 74 ++++++------ .../Weibo/WeiboHandlerBaseTests+General.swift | 20 ++-- .../Weibo/WeiboHandlerBaseTests+Share.swift | 6 +- 14 files changed, 139 insertions(+), 139 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index 4659e37..c81c4c3 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -22,10 +22,10 @@ protocol GeneralSchemeTestCase: XCTestCase { protocol GeneralUniversalLinkTestCase: XCTestCase { /// Test general universal link scheme - func test_general_ul(scheme: String) + func test_general_ul(scheme: @autoclosure () throws -> String) /// Test general universal link host - func test_general_ul(host: String) + func test_general_ul(host: @autoclosure () throws -> String) /// Test general universal link queryItems func test_general_ul(queryItems: inout [URLQueryItem]) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index 5158e17..f4a4389 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -58,7 +58,7 @@ extension _LaunchSchemeTestCase { schemeList.formUnion(report_general_scheme()) schemeList.formUnion(report_launch_scheme(platform, program)) - XCTAssertTrue(schemeList.contains(scheme.scheme!)) + XCTAssertTrue(schemeList.contains(try XCTUnwrap(scheme.scheme))) } } @@ -74,8 +74,8 @@ extension _LaunchUniversalLinkTestCase { // General - UniversalLink - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) + test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul(host: try XCTUnwrap(urlComponents.host)) test_general_ul(queryItems: &queryItems) // Launch - Program - UniversalLink diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 9b9ed68..5f1d953 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -74,7 +74,7 @@ extension _OauthSchemeTestCase { schemeList.formUnion(report_general_scheme()) schemeList.formUnion(report_oauth_scheme(platform)) - XCTAssertTrue(schemeList.contains(scheme.scheme!)) + XCTAssertTrue(schemeList.contains(try XCTUnwrap(scheme.scheme))) } } @@ -90,8 +90,8 @@ extension _OauthUniversalLinkTestCase { // General - UniversalLink - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) + test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul(host: try XCTUnwrap(urlComponents.host)) test_general_ul(queryItems: &queryItems) // Oauth - Platform - UniversalLink diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 03d80a1..730b6c1 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -75,7 +75,7 @@ extension _ShareSchemeTestCase { schemeList.formUnion(report_general_scheme()) schemeList.formUnion(report_share_scheme(message, endpoint)) - XCTAssertTrue(schemeList.contains(scheme.scheme!)) + XCTAssertTrue(schemeList.contains(try XCTUnwrap(scheme.scheme))) } } @@ -91,8 +91,8 @@ extension _ShareUniversalLinkTestCase { // General - UniversalLink - test_general_ul(scheme: urlComponents.scheme!) - test_general_ul(host: urlComponents.host!) + test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul(host: try XCTUnwrap(urlComponents.host)) test_general_ul(queryItems: &queryItems) // Share - Message - UniversalLink diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index 225083c..45d724a 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -25,12 +25,12 @@ extension QQHandlerBaseTests: GeneralSchemeTestCase { extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") + func test_general_ul(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: String) { - XCTAssertEqual(host, "qm.qq.com") + func test_general_ul(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), "qm.qq.com") } func test_general_ul(queryItems: inout [URLQueryItem]) { @@ -48,15 +48,15 @@ extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { extension QQHandlerBaseTests { func test_appsign_txid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) + XCTAssertEqual(try XCTUnwrap(queryItem.value), txID) } func test_bundleid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem.value), bundleID.bus.base64EncodedString) } func test_sdkv(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkShortVersion) + XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkShortVersion) } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift index c53651c..033044a 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift @@ -71,7 +71,7 @@ extension QQHandlerBaseTests: LaunchProgramUniversalLinkTestCase { extension QQHandlerBaseTests { func test_appid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, appNumber) + XCTAssertEqual(try XCTUnwrap(queryItem.value), appNumber) } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index 1dd7964..9d4e9b2 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -50,11 +50,11 @@ extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { extension QQHandlerBaseTests { func test_objectlocation(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value, "url") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "url") } func test_pasteboard(_ queryItem: URLQueryItem) { - let data = Data(base64Encoded: queryItem.value!)! + let data = try! XCTUnwrap(Data(base64Encoded: XCTUnwrap(queryItem.value))) var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] logger.debug("\(URLComponents.self), start, \(object.keys.sorted())") diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index a811ebf..3316f7f 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -178,11 +178,11 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { extension QQHandlerBaseTests { func test_callback_name(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, txID) + XCTAssertEqual(try XCTUnwrap(queryItem.value), txID) } func test_callback_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "scheme") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "scheme") } func test_cflag(_ queryItem: URLQueryItem, _ message: MessageType, _ endpoint: Endpoint) { @@ -194,16 +194,16 @@ extension QQHandlerBaseTests { Messages.audio, Messages.video, Messages.webPage: - XCTAssertEqual(queryItem.value!, "2") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "2") case Messages.file: - XCTAssertEqual(queryItem.value!, "18") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "18") case Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "64") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "64") default: fatalError() } case Endpoints.QQ.timeline: - XCTAssertEqual(queryItem.value!, "0") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "0") default: fatalError() } @@ -214,17 +214,17 @@ extension QQHandlerBaseTests { case is TextMessage: XCTAssertNil(queryItem) case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.description?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.description?.bus.base64EncodedString) default: fatalError() } @@ -240,7 +240,7 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(queryItem) case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.fullName) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.fullName) default: fatalError() } @@ -249,7 +249,7 @@ extension QQHandlerBaseTests { func test_file_data(_ queryItem: URLQueryItem?, _ message: MessageType) { switch message { case let message as TextMessage: - XCTAssertEqual(queryItem!.value!, message.text.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.text.bus.base64EncodedString) case is ImageMessage, is AudioMessage, is VideoMessage, @@ -265,19 +265,19 @@ extension QQHandlerBaseTests { func test_file_type(_ queryItem: URLQueryItem, _ message: MessageType) { switch message.identifier { case Messages.text: - XCTAssertEqual(queryItem.value!, "text") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "text") case Messages.image: - XCTAssertEqual(queryItem.value!, "img") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "img") case Messages.audio: - XCTAssertEqual(queryItem.value!, "audio") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "audio") case Messages.video: - XCTAssertEqual(queryItem.value!, "video") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "video") case Messages.webPage: - XCTAssertEqual(queryItem.value!, "news") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "news") case Messages.file: - XCTAssertEqual(queryItem.value!, "localFile") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "localFile") case Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "news") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "news") default: fatalError() } @@ -293,14 +293,14 @@ extension QQHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(queryItem) case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.dataLink?.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.dataLink?.absoluteString.bus.base64EncodedString) default: fatalError() } } func test_generalpastboard(_ queryItem: URLQueryItem?) { - XCTAssertEqual(queryItem!.value!, "1") + XCTAssertEqual(try XCTUnwrap(queryItem?.value), "1") } func test_mini_appid(_ queryItem: URLQueryItem?, _ message: MessageType) { @@ -313,7 +313,7 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.miniProgramID) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.miniProgramID) default: fatalError() } @@ -329,7 +329,7 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case is MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, "1") + XCTAssertEqual(try XCTUnwrap(queryItem?.value), "1") default: fatalError() } @@ -345,7 +345,7 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.path.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.path.bus.base64EncodedString) default: fatalError() } @@ -372,7 +372,7 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, miniProgramType(message.miniProgramType)) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), miniProgramType(message.miniProgramType)) default: fatalError() } @@ -388,7 +388,7 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.link.absoluteString.bus.base64EncodedString) default: fatalError() } @@ -402,18 +402,18 @@ extension QQHandlerBaseTests { is AudioMessage, is VideoMessage, is FileMessage: - XCTAssertEqual(queryItem!.value!, "pasteboard") + XCTAssertEqual(try XCTUnwrap(queryItem?.value), "pasteboard") case is WebPageMessage, is MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, "url") + XCTAssertEqual(try XCTUnwrap(queryItem?.value), "url") default: fatalError() } } func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { - let thumbnail: (String) -> Data = { value in - let data = Data(base64Encoded: value)! + let thumbnail: (String) throws -> Data = { value in + let data = try XCTUnwrap(Data(base64Encoded: value)) var object = NSKeyedUnarchiver.unarchiveObject(with: data) as! [String: Any] let thumbnail = object.removeValue(forKey: "previewimagedata") as! Data XCTAssertTrue(object.isEmpty) @@ -428,9 +428,9 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as WebPageMessage: - XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + XCTAssertEqual(try thumbnail(XCTUnwrap(queryItem?.value)), message.thumbnail) case let message as MiniProgramMessage: - XCTAssertEqual(thumbnail(queryItem!.value!), message.thumbnail) + XCTAssertEqual(try thumbnail(XCTUnwrap(queryItem?.value)), message.thumbnail) default: fatalError() } @@ -447,7 +447,7 @@ extension QQHandlerBaseTests { Messages.webPage, Messages.file, Messages.miniProgram: - XCTAssertEqual(queryItem.value!, "0") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "0") default: fatalError() } @@ -455,11 +455,11 @@ extension QQHandlerBaseTests { switch message.identifier { case Messages.text, Messages.image: - XCTAssertEqual(queryItem.value!, "0") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "0") case Messages.audio, Messages.video, Messages.webPage: - XCTAssertEqual(queryItem.value!, "1") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "1") default: fatalError() } @@ -469,11 +469,11 @@ extension QQHandlerBaseTests { } func test_src_type(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "app") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "app") } func test_thirdAppDisplayName(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, displayName.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem.value), displayName.bus.base64EncodedString) } func test_title(_ queryItem: URLQueryItem?, _ message: MessageType) { @@ -481,17 +481,17 @@ extension QQHandlerBaseTests { case is TextMessage: XCTAssertNil(queryItem) case let message as ImageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) case let message as FileMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.title?.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.title?.bus.base64EncodedString) default: fatalError() } @@ -504,20 +504,20 @@ extension QQHandlerBaseTests { is FileMessage: XCTAssertNil(queryItem) case let message as AudioMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.link.absoluteString.bus.base64EncodedString) case let message as VideoMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.link.absoluteString.bus.base64EncodedString) case let message as WebPageMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.link.absoluteString.bus.base64EncodedString) case let message as MiniProgramMessage: - XCTAssertEqual(queryItem!.value!, message.link.absoluteString.bus.base64EncodedString) + XCTAssertEqual(try XCTUnwrap(queryItem?.value), message.link.absoluteString.bus.base64EncodedString) default: fatalError() } } func test_version(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "1") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "1") } } @@ -543,9 +543,9 @@ extension QQHandlerBaseTests { is VideoMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(try XCTUnwrap(value), message.data) case let message as FileMessage: - XCTAssertEqual(value!, message.data) + XCTAssertEqual(try XCTUnwrap(value), message.data) default: fatalError() } @@ -556,13 +556,13 @@ extension QQHandlerBaseTests { case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) default: fatalError() } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index 23678f5..bb55467 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -25,12 +25,12 @@ extension WechatHandlerBaseTests: GeneralSchemeTestCase { extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") + func test_general_ul(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: String) { - XCTAssertEqual(host, "help.wechat.com") + func test_general_ul(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), "help.wechat.com") } func test_general_ul(queryItems: inout [URLQueryItem]) { @@ -45,11 +45,11 @@ extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { extension WechatHandlerBaseTests { func test_wechat_app_bundleId(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID) + XCTAssertEqual(try XCTUnwrap(queryItem.value), bundleID) } func test_wechat_auth_context_id(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!.count, 64) + XCTAssertEqual(try XCTUnwrap(queryItem.value).count, 64) } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift index 2e11819..cf4e43e 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -54,7 +54,7 @@ extension WechatHandlerBaseTests: LaunchProgramUniversalLinkTestCase { extension WechatHandlerBaseTests { func test_extMsg(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "") } func test_miniProgramType(_ queryItem: URLQueryItem, _ message: MessageType) { @@ -71,7 +71,7 @@ extension WechatHandlerBaseTests { switch message { case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, miniProgramType(message.miniProgramType)) + XCTAssertEqual(try XCTUnwrap(queryItem.value), miniProgramType(message.miniProgramType)) default: fatalError() } @@ -80,7 +80,7 @@ extension WechatHandlerBaseTests { func test_path(_ queryItem: URLQueryItem, _ message: MessageType) { switch message { case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, message.path) + XCTAssertEqual(try XCTUnwrap(queryItem.value), message.path) default: fatalError() } @@ -89,7 +89,7 @@ extension WechatHandlerBaseTests { func test_userName(_ queryItem: URLQueryItem, _ message: MessageType) { switch message { case let message as MiniProgramMessage: - XCTAssertEqual(queryItem.value!, message.miniProgramID) + XCTAssertEqual(try XCTUnwrap(queryItem.value), message.miniProgramID) default: fatalError() } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift index d95253a..3085008 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift @@ -48,11 +48,11 @@ extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { extension WechatHandlerBaseTests { func test_scope(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "snsapi_userinfo") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "snsapi_userinfo") } func test_state(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "") } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index b57dfa0..43a2283 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -214,7 +214,7 @@ extension WechatHandlerBaseTests { is FileMessage: XCTAssertNil(value) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.path) + XCTAssertEqual(try XCTUnwrap(value), message.path) default: fatalError() } @@ -230,7 +230,7 @@ extension WechatHandlerBaseTests { is FileMessage: XCTAssertNil(value) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.miniProgramID) + XCTAssertEqual(try XCTUnwrap(value), message.miniProgramID) default: fatalError() } @@ -246,7 +246,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, false) + XCTAssertEqual(try XCTUnwrap(value), false) default: fatalError() } @@ -262,7 +262,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, false) + XCTAssertEqual(try XCTUnwrap(value), false) default: fatalError() } @@ -289,17 +289,17 @@ extension WechatHandlerBaseTests { case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) case let message as AudioMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) case let message as VideoMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) case let message as WebPageMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) case let message as FileMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.description) + XCTAssertEqual(try XCTUnwrap(value), message.description) default: fatalError() } @@ -315,7 +315,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, false) + XCTAssertEqual(try XCTUnwrap(value), false) default: fatalError() } @@ -330,9 +330,9 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value, message.data) + XCTAssertEqual(try XCTUnwrap(value), message.data) case let message as FileMessage: - XCTAssertEqual(value, message.data) + XCTAssertEqual(try XCTUnwrap(value), message.data) default: fatalError() } @@ -348,7 +348,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(value) case let message as FileMessage: - XCTAssertEqual(value, message.fileExtension) + XCTAssertEqual(try XCTUnwrap(value), message.fileExtension) default: fatalError() } @@ -364,7 +364,7 @@ extension WechatHandlerBaseTests { is FileMessage: XCTAssertNil(value) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) default: fatalError() } @@ -380,7 +380,7 @@ extension WechatHandlerBaseTests { is MiniProgramMessage: XCTAssertNil(value) case let message as AudioMessage: - XCTAssertEqual(value!, message.dataLink?.absoluteString) + XCTAssertEqual(try XCTUnwrap(value), message.dataLink?.absoluteString) default: fatalError() } @@ -393,13 +393,13 @@ extension WechatHandlerBaseTests { is FileMessage: XCTAssertNil(value) case let message as AudioMessage: - XCTAssertEqual(value!, message.link.absoluteString) + XCTAssertEqual(try XCTUnwrap(value), message.link.absoluteString) case let message as VideoMessage: - XCTAssertEqual(value!, message.link.absoluteString) + XCTAssertEqual(try XCTUnwrap(value), message.link.absoluteString) case let message as WebPageMessage: - XCTAssertEqual(value!, message.link.absoluteString) + XCTAssertEqual(try XCTUnwrap(value), message.link.absoluteString) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.link.absoluteString) + XCTAssertEqual(try XCTUnwrap(value), message.link.absoluteString) default: fatalError() } @@ -415,7 +415,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, 0) + XCTAssertEqual(try XCTUnwrap(value), 0) default: fatalError() } @@ -431,7 +431,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(try XCTUnwrap(value), "0") default: fatalError() } @@ -447,7 +447,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(try XCTUnwrap(value), "0") default: fatalError() } @@ -458,17 +458,17 @@ extension WechatHandlerBaseTests { case is TextMessage: XCTAssertNil(value) case is ImageMessage: - XCTAssertEqual(value!, "2") + XCTAssertEqual(try XCTUnwrap(value), "2") case is AudioMessage: - XCTAssertEqual(value!, "3") + XCTAssertEqual(try XCTUnwrap(value), "3") case is VideoMessage: - XCTAssertEqual(value!, "4") + XCTAssertEqual(try XCTUnwrap(value), "4") case is WebPageMessage: - XCTAssertEqual(value!, "5") + XCTAssertEqual(try XCTUnwrap(value), "5") case is FileMessage: - XCTAssertEqual(value!, "6") + XCTAssertEqual(try XCTUnwrap(value), "6") case is MiniProgramMessage: - XCTAssertEqual(value!, "36") + XCTAssertEqual(try XCTUnwrap(value), "36") default: fatalError() } @@ -492,17 +492,17 @@ extension WechatHandlerBaseTests { case is TextMessage: XCTAssertNil(value) case let message as ImageMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as AudioMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as VideoMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as WebPageMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as FileMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as MiniProgramMessage: - XCTAssertEqual(value!, message.thumbnail) + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) default: fatalError() } @@ -539,7 +539,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, "0") + XCTAssertEqual(try XCTUnwrap(value), "0") default: fatalError() } @@ -555,7 +555,7 @@ extension WechatHandlerBaseTests { is WebPageMessage, is FileMessage, is MiniProgramMessage: - XCTAssertEqual(value!, false) + XCTAssertEqual(try XCTUnwrap(value), false) default: fatalError() } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index ba66a22..e8cc77f 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -26,12 +26,12 @@ extension WeiboHandlerBaseTests: GeneralSchemeTestCase { extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { - func test_general_ul(scheme: String) { - XCTAssertEqual(scheme, "https") + func test_general_ul(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: String) { - XCTAssertEqual(host, "open.weibo.com") + func test_general_ul(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), "open.weibo.com") } func test_general_ul(queryItems: inout [URLQueryItem]) { @@ -58,27 +58,27 @@ extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { extension WeiboHandlerBaseTests { func test_lfid(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, bundleID) + XCTAssertEqual(try XCTUnwrap(queryItem.value), bundleID) } func test_luicode(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "10000360") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "10000360") } func test_newVersion(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkShortVersion) + XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkShortVersion) } func test_objId(_ queryItem: URLQueryItem) { - XCTAssertNotNil(UUID(uuidString: queryItem.value!)) + XCTAssertNotNil(try UUID(uuidString: XCTUnwrap(queryItem.value))) } func test_sdkversion(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, sdkVersion) + XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkVersion) } func test_urltype(_ queryItem: URLQueryItem) { - XCTAssertEqual(queryItem.value!, "link") + XCTAssertEqual(try XCTUnwrap(queryItem.value), "link") } } diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index 07ecf1e..99fc082 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -132,7 +132,7 @@ extension WeiboHandlerBaseTests { is WebPageMessage: XCTAssertNil(value) case is ImageMessage: - test_image(value!, message, endpoint) + test_image(try! XCTUnwrap(value), message, endpoint) default: fatalError() } @@ -146,7 +146,7 @@ extension WeiboHandlerBaseTests { case is AudioMessage, is VideoMessage, is WebPageMessage: - test_media(value!, message, endpoint) + test_media(try! XCTUnwrap(value), message, endpoint) default: fatalError() } @@ -155,7 +155,7 @@ extension WeiboHandlerBaseTests { func test_text(_ value: String?, _ message: MessageType) { switch message { case let message as TextMessage: - XCTAssertEqual(value!, message.text) + XCTAssertEqual(try XCTUnwrap(value), message.text) case is ImageMessage, is AudioMessage, is VideoMessage, From 70666b36ddbe72ded6e7a3b5173da46f2ba7f600 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Thu, 21 Apr 2022 00:27:15 +0800 Subject: [PATCH 109/123] refactor: Request State --- Tests/NBusTests/Base/GeneralTestCase.swift | 32 ++++++------ .../Base/HandlerBaseTests+General.swift | 4 +- .../Base/HandlerBaseTests+Launch.swift | 44 ++++++++-------- .../Base/HandlerBaseTests+Oauth.swift | 44 ++++++++-------- .../Base/HandlerBaseTests+Share.swift | 44 ++++++++-------- Tests/NBusTests/Base/LaunchTestCase.swift | 52 +++++++++---------- Tests/NBusTests/Base/OauthTestCase.swift | 52 +++++++++---------- Tests/NBusTests/Base/ShareTestCase.swift | 52 +++++++++---------- .../QQ/QQHandlerBaseTests+General.swift | 20 +++---- .../QQ/QQHandlerBaseTests+Launch.swift | 14 ++--- .../QQ/QQHandlerBaseTests+Oauth.swift | 14 ++--- .../QQ/QQHandlerBaseTests+Share.swift | 14 ++--- .../WechatHandlerBaseTests+General.swift | 20 +++---- .../WechatHandlerBaseTests+Launch.swift | 14 ++--- .../Wechat/WechatHandlerBaseTests+Oauth.swift | 14 ++--- .../Wechat/WechatHandlerBaseTests+Share.swift | 14 ++--- .../Weibo/WeiboHandlerBaseTests+General.swift | 20 +++---- .../Weibo/WeiboHandlerBaseTests+Oauth.swift | 16 +++--- .../Weibo/WeiboHandlerBaseTests+Share.swift | 14 ++--- 19 files changed, 249 insertions(+), 249 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index c81c4c3..c84ed2f 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -17,30 +17,30 @@ protocol GeneralSchemeTestCase: XCTestCase { func report_general_scheme() -> Set } -// MARK: - General - UniversalLink +// MARK: - General - UniversalLink - Request -protocol GeneralUniversalLinkTestCase: XCTestCase { +protocol GeneralUniversalLinkRequestTestCase: XCTestCase { - /// Test general universal link scheme - func test_general_ul(scheme: @autoclosure () throws -> String) + /// Test general universal link request scheme + func test_general_ul_request(scheme: @autoclosure () throws -> String) - /// Test general universal link host - func test_general_ul(host: @autoclosure () throws -> String) + /// Test general universal link request host + func test_general_ul_request(host: @autoclosure () throws -> String) - /// Test general universal link queryItems - func test_general_ul(queryItems: inout [URLQueryItem]) + /// Test general universal link request queryItems + func test_general_ul_request(queryItems: inout [URLQueryItem]) } -// MARK: - General - Pasteboard +// MARK: - General - Pasteboard - Request -protocol GeneralPasteboardTestCase: XCTestCase { +protocol GeneralPasteboardRequestTestCase: XCTestCase { - /// Extract pasteboard major data - func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] + /// Extract pasteboard request major data + func extract_major_pb_request(items: inout [[String: Data]]) -> [String: Any] - /// Test general pasteboard dictionary - func test_general_pb(dictionary: inout [String: Any]) + /// Test general pasteboard request dictionary + func test_general_pb_request(dictionary: inout [String: Any]) - /// Test pasteboard extra data - func test_extra_pb(items: inout [[String: Data]]) + /// Test pasteboard request extra data + func test_extra_pb_request(items: inout [[String: Data]]) } diff --git a/Tests/NBusTests/Base/HandlerBaseTests+General.swift b/Tests/NBusTests/Base/HandlerBaseTests+General.swift index da65c2b..df8f0b3 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+General.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+General.swift @@ -8,9 +8,9 @@ import Foundation -// MARK: - General - Pasteboard +// MARK: - General - Pasteboard - Request -extension GeneralPasteboardTestCase { +extension GeneralPasteboardRequestTestCase { /// Extract pasteboard using KeyedArchiver func extract_KeyedArchiver_pb(items: inout [[String: Data]], key: String) -> [String: Any] { diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift index f4a4389..3b4c03b 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Launch.swift @@ -27,7 +27,7 @@ extension LaunchTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self._test_launch(url: url, platform, program) + self._test_launch_request(url: url, platform, program) }) .disposed(by: disposeBag) @@ -35,7 +35,7 @@ extension LaunchTestCase { .items() .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in - self._test_launch(items: items, platform, program) + self._test_launch_request(items: items, platform, program) }) .disposed(by: disposeBag) @@ -62,26 +62,26 @@ extension _LaunchSchemeTestCase { } } -// MARK: - Launch - UniversalLink +// MARK: - Launch - UniversalLink - Request -extension _LaunchUniversalLinkTestCase { +extension _LaunchUniversalLinkRequestTestCase { - func _test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch_request(url: URL, _ platform: Platform, _ program: MiniProgramMessage) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - // General - UniversalLink + // General - UniversalLink - Request - test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) - test_general_ul(host: try XCTUnwrap(urlComponents.host)) - test_general_ul(queryItems: &queryItems) + test_general_ul_request(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul_request(host: try XCTUnwrap(urlComponents.host)) + test_general_ul_request(queryItems: &queryItems) - // Launch - Program - UniversalLink + // Launch - Program - UniversalLink - Request - test_launch_ul(path: urlComponents.path) - test_launch_ul(queryItems: &queryItems, platform, program) + test_launch_ul_request(path: urlComponents.path) + test_launch_ul_request(queryItems: &queryItems, platform, program) logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") @@ -91,18 +91,18 @@ extension _LaunchUniversalLinkTestCase { } } -// MARK: - Launch - Pasteboard +// MARK: - Launch - Pasteboard - Request -extension _LaunchPasteboardTestCase { +extension _LaunchPasteboardRequestTestCase { - func _test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch_request(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_launch_pb(dictionary: extract_major_pb(items: &items), platform, program) + _test_launch_pb_request(dictionary: extract_major_pb_request(items: &items), platform, program) - test_extra_pb(items: &items) + test_extra_pb_request(items: &items) logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") @@ -111,18 +111,18 @@ extension _LaunchPasteboardTestCase { pbExpectation.fulfill() } - func _test_launch_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + func _test_launch_pb_request(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - // General - Pasteboard + // General - Pasteboard - Request - test_general_pb(dictionary: &dictionary) + test_general_pb_request(dictionary: &dictionary) - // Launch - Program - Pasteboard + // Launch - Program - Pasteboard - Request - test_launch_pb(dictionary: &dictionary, platform, program) + test_launch_pb_request(dictionary: &dictionary, platform, program) logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift index 5f1d953..ca60622 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Oauth.swift @@ -27,7 +27,7 @@ extension OauthTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self._test_oauth(url: url, platform) + self._test_oauth_request(url: url, platform) }) .disposed(by: disposeBag) @@ -50,7 +50,7 @@ extension OauthTestCase { }) .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in - self._test_oauth(items: items, platform) + self._test_oauth_request(items: items, platform) }) .disposed(by: disposeBag) @@ -78,26 +78,26 @@ extension _OauthSchemeTestCase { } } -// MARK: - Oauth - UniversalLink +// MARK: - Oauth - UniversalLink - Request -extension _OauthUniversalLinkTestCase { +extension _OauthUniversalLinkRequestTestCase { - func _test_oauth(url: URL, _ platform: Platform) { + func _test_oauth_request(url: URL, _ platform: Platform) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - // General - UniversalLink + // General - UniversalLink - Request - test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) - test_general_ul(host: try XCTUnwrap(urlComponents.host)) - test_general_ul(queryItems: &queryItems) + test_general_ul_request(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul_request(host: try XCTUnwrap(urlComponents.host)) + test_general_ul_request(queryItems: &queryItems) - // Oauth - Platform - UniversalLink + // Oauth - Platform - UniversalLink - Request - test_oauth_ul(path: urlComponents.path) - test_oauth_ul(queryItems: &queryItems, platform) + test_oauth_ul_request(path: urlComponents.path) + test_oauth_ul_request(queryItems: &queryItems, platform) logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") @@ -107,18 +107,18 @@ extension _OauthUniversalLinkTestCase { } } -// MARK: - Oauth - Pasteboard +// MARK: - Oauth - Pasteboard - Request -extension _OauthPasteboardTestCase { +extension _OauthPasteboardRequestTestCase { - func _test_oauth(items: [[String: Any]], _ platform: Platform) { + func _test_oauth_request(items: [[String: Any]], _ platform: Platform) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_oauth_pb(dictionary: extract_major_pb(items: &items), platform) + _test_oauth_pb_request(dictionary: extract_major_pb_request(items: &items), platform) - test_extra_pb(items: &items) + test_extra_pb_request(items: &items) logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") @@ -127,18 +127,18 @@ extension _OauthPasteboardTestCase { pbExpectation.fulfill() } - func _test_oauth_pb(dictionary: [String: Any], _ platform: Platform) { + func _test_oauth_pb_request(dictionary: [String: Any], _ platform: Platform) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - // General - Pasteboard + // General - Pasteboard - Request - test_general_pb(dictionary: &dictionary) + test_general_pb_request(dictionary: &dictionary) - // Oauth - Platform - Pasteboard + // Oauth - Platform - Pasteboard - Request - test_oauth_pb(dictionary: &dictionary, platform) + test_oauth_pb_request(dictionary: &dictionary, platform) logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 730b6c1..9410f47 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -27,7 +27,7 @@ extension ShareTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - self._test_share(url: url, message, endpoint) + self._test_share_request(url: url, message, endpoint) }) .disposed(by: disposeBag) @@ -50,7 +50,7 @@ extension ShareTestCase { }) .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in - self._test_share(items: items, message, endpoint) + self._test_share_request(items: items, message, endpoint) }) .disposed(by: disposeBag) @@ -79,26 +79,26 @@ extension _ShareSchemeTestCase { } } -// MARK: - Share - UniversalLink +// MARK: - Share - UniversalLink - Request -extension _ShareUniversalLinkTestCase { +extension _ShareUniversalLinkRequestTestCase { - func _test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + func _test_share_request(url: URL, _ message: MessageType, _ endpoint: Endpoint) { let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! var queryItems = urlComponents.queryItems ?? [] logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") - // General - UniversalLink + // General - UniversalLink - Request - test_general_ul(scheme: try XCTUnwrap(urlComponents.scheme)) - test_general_ul(host: try XCTUnwrap(urlComponents.host)) - test_general_ul(queryItems: &queryItems) + test_general_ul_request(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul_request(host: try XCTUnwrap(urlComponents.host)) + test_general_ul_request(queryItems: &queryItems) - // Share - Message - UniversalLink + // Share - Message - UniversalLink - Request - test_share_ul(path: urlComponents.path) - test_share_ul(queryItems: &queryItems, message, endpoint) + test_share_ul_request(path: urlComponents.path) + test_share_ul_request(queryItems: &queryItems, message, endpoint) logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") @@ -108,18 +108,18 @@ extension _ShareUniversalLinkTestCase { } } -// MARK: - Share - Pasteboard +// MARK: - Share - Pasteboard - Request -extension _SharePasteboardTestCase { +extension _SharePasteboardRequestTestCase { - func _test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + func _test_share_request(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { var items = items as! [[String: Data]] logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") - _test_share_pb(dictionary: extract_major_pb(items: &items), message, endpoint) + _test_share_pb_request(dictionary: extract_major_pb_request(items: &items), message, endpoint) - test_extra_pb(items: &items) + test_extra_pb_request(items: &items) logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") @@ -128,18 +128,18 @@ extension _SharePasteboardTestCase { pbExpectation.fulfill() } - func _test_share_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + func _test_share_pb_request(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { var dictionary = dictionary logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") - // General - Pasteboard + // General - Pasteboard - Request - test_general_pb(dictionary: &dictionary) + test_general_pb_request(dictionary: &dictionary) - // Share - Message - Pasteboard + // Share - Message - Pasteboard - Request - test_share_pb(dictionary: &dictionary, message, endpoint) + test_share_pb_request(dictionary: &dictionary, message, endpoint) logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") diff --git a/Tests/NBusTests/Base/LaunchTestCase.swift b/Tests/NBusTests/Base/LaunchTestCase.swift index 5fd12ef..b28d584 100644 --- a/Tests/NBusTests/Base/LaunchTestCase.swift +++ b/Tests/NBusTests/Base/LaunchTestCase.swift @@ -29,52 +29,52 @@ protocol _LaunchSchemeTestCase: func _test_launch(scheme: URL, _ platform: Platform, _ program: MiniProgramMessage) } -// MARK: - Launch - Program - UniversalLink +// MARK: - Launch - Program - UniversalLink - Request -protocol LaunchProgramUniversalLinkTestCase: XCTestCase { +protocol LaunchProgramUniversalLinkRequestTestCase: XCTestCase { - /// Test launch universal link path - func test_launch_ul(path: String) + /// Test launch universal link request path + func test_launch_ul_request(path: String) - /// Test launch universal link queryItems - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch universal link request queryItems + func test_launch_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) } -// MARK: - Launch - UniversalLink +// MARK: - Launch - UniversalLink - Request -protocol _LaunchUniversalLinkTestCase: - GeneralUniversalLinkTestCase, - LaunchProgramUniversalLinkTestCase { +protocol _LaunchUniversalLinkRequestTestCase: + GeneralUniversalLinkRequestTestCase, + LaunchProgramUniversalLinkRequestTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } - /// Test launch universal link - func _test_launch(url: URL, _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch universal link request + func _test_launch_request(url: URL, _ platform: Platform, _ program: MiniProgramMessage) } -// MARK: - Launch - Platform - Pasteboard +// MARK: - Launch - Platform - Pasteboard - Request -protocol LaunchProgramPasteboardTestCase: XCTestCase { +protocol LaunchProgramPasteboardRequestTestCase: XCTestCase { - /// Test launch pasteboard dictionary - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch pasteboard request dictionary + func test_launch_pb_request(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) } -// MARK: - Launch - Pasteboard +// MARK: - Launch - Pasteboard - Request -protocol _LaunchPasteboardTestCase: - GeneralPasteboardTestCase, - LaunchProgramPasteboardTestCase { +protocol _LaunchPasteboardRequestTestCase: + GeneralPasteboardRequestTestCase, + LaunchProgramPasteboardRequestTestCase { /// Pasteboard expectation var pbExpectation: XCTestExpectation { get } - /// Test launch pasteboard - func _test_launch(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch pasteboard request + func _test_launch_request(items: [[String: Any]], _ platform: Platform, _ program: MiniProgramMessage) - /// Test launch pasteboard dictionary - func _test_launch_pb(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) + /// Test launch pasteboard request dictionary + func _test_launch_pb_request(dictionary: [String: Any], _ platform: Platform, _ program: MiniProgramMessage) } // MARK: - Launch - Completion @@ -95,8 +95,8 @@ protocol _LaunchCompletionTestCase: XCTestCase { protocol LaunchTestCase: _LaunchSchemeTestCase, - _LaunchUniversalLinkTestCase, - _LaunchPasteboardTestCase, + _LaunchUniversalLinkRequestTestCase, + _LaunchPasteboardRequestTestCase, _LaunchCompletionTestCase { var disposeBag: DisposeBag { get } diff --git a/Tests/NBusTests/Base/OauthTestCase.swift b/Tests/NBusTests/Base/OauthTestCase.swift index 3dc7758..a8d2fcd 100644 --- a/Tests/NBusTests/Base/OauthTestCase.swift +++ b/Tests/NBusTests/Base/OauthTestCase.swift @@ -29,52 +29,52 @@ protocol _OauthSchemeTestCase: func _test_oauth(scheme: URL, _ platform: Platform) } -// MARK: - Oauth - Platform - UniversalLink +// MARK: - Oauth - Platform - UniversalLink - Request -protocol OauthPlatformUniversalLinkTestCase: XCTestCase { +protocol OauthPlatformUniversalRequestLinkTestCase: XCTestCase { - /// Test oauth universal link path - func test_oauth_ul(path: String) + /// Test oauth universal link request path + func test_oauth_ul_request(path: String) - /// Test oauth universal link queryItems - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) + /// Test oauth universal link request queryItems + func test_oauth_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform) } -// MARK: - Oauth - UniversalLink +// MARK: - Oauth - UniversalLink - Request -protocol _OauthUniversalLinkTestCase: - GeneralUniversalLinkTestCase, - OauthPlatformUniversalLinkTestCase { +protocol _OauthUniversalLinkRequestTestCase: + GeneralUniversalLinkRequestTestCase, + OauthPlatformUniversalRequestLinkTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } - /// Test oauth universal link - func _test_oauth(url: URL, _ platform: Platform) + /// Test oauth universal link request + func _test_oauth_request(url: URL, _ platform: Platform) } -// MARK: - Oauth - Platform - Pasteboard +// MARK: - Oauth - Platform - Pasteboard - Request -protocol OauthPlatformPasteboardTestCase: XCTestCase { +protocol OauthPlatformPasteboardRequestTestCase: XCTestCase { - /// Test oauth pasteboard dictionary - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) + /// Test oauth pasteboard request dictionary + func test_oauth_pb_request(dictionary: inout [String: Any], _ platform: Platform) } -// MARK: - Oauth - Pasteboard +// MARK: - Oauth - Pasteboard - Request -protocol _OauthPasteboardTestCase: - GeneralPasteboardTestCase, - OauthPlatformPasteboardTestCase { +protocol _OauthPasteboardRequestTestCase: + GeneralPasteboardRequestTestCase, + OauthPlatformPasteboardRequestTestCase { /// Pasteboard expectation var pbExpectation: XCTestExpectation { get } - /// Test oauth pasteboard - func _test_oauth(items: [[String: Any]], _ platform: Platform) + /// Test oauth pasteboard request + func _test_oauth_request(items: [[String: Any]], _ platform: Platform) - /// Test oauth pasteboard dictionary - func _test_oauth_pb(dictionary: [String: Any], _ platform: Platform) + /// Test oauth pasteboard request dictionary + func _test_oauth_pb_request(dictionary: [String: Any], _ platform: Platform) /// Avoid oauth pasteboard error func _avoid_oauth_pb_error(_ items: [[String: Any]], _ platform: Platform) -> Bool @@ -98,8 +98,8 @@ protocol _OauthCompletionTestCase: XCTestCase { protocol OauthTestCase: _OauthSchemeTestCase, - _OauthUniversalLinkTestCase, - _OauthPasteboardTestCase, + _OauthUniversalLinkRequestTestCase, + _OauthPasteboardRequestTestCase, _OauthCompletionTestCase { var disposeBag: DisposeBag { get } diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 20b0e5c..83216a1 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -29,52 +29,52 @@ protocol _ShareSchemeTestCase: func _test_share(scheme: URL, _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Message - UniversalLink +// MARK: - Share - Message - UniversalLink - Request -protocol ShareMessageUniversalLinkTestCase: XCTestCase { +protocol ShareMessageUniversalLinkRequestTestCase: XCTestCase { - /// Test share universal link path - func test_share_ul(path: String) + /// Test share universal link request path + func test_share_ul_request(path: String) - /// Test share universal link queryItems - func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) + /// Test share universal link request queryItems + func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - UniversalLink +// MARK: - Share - UniversalLink - Request -protocol _ShareUniversalLinkTestCase: - GeneralUniversalLinkTestCase, - ShareMessageUniversalLinkTestCase { +protocol _ShareUniversalLinkRequestTestCase: + GeneralUniversalLinkRequestTestCase, + ShareMessageUniversalLinkRequestTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } - /// Test share universal link - func _test_share(url: URL, _ message: MessageType, _ endpoint: Endpoint) + /// Test share universal link request + func _test_share_request(url: URL, _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Message - Pasteboard +// MARK: - Share - Message - Pasteboard - Request -protocol ShareMessagePasteboardTestCase: XCTestCase { +protocol ShareMessagePasteboardRequestTestCase: XCTestCase { - /// Test share pasteboard dictionary - func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) + /// Test share pasteboard request dictionary + func test_share_pb_request(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) } -// MARK: - Share - Pasteboard +// MARK: - Share - Pasteboard - Request -protocol _SharePasteboardTestCase: - GeneralPasteboardTestCase, - ShareMessagePasteboardTestCase { +protocol _SharePasteboardRequestTestCase: + GeneralPasteboardRequestTestCase, + ShareMessagePasteboardRequestTestCase { /// Pasteboard expectation var pbExpectation: XCTestExpectation { get } - /// Test share pasteboard - func _test_share(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) + /// Test share pasteboard request + func _test_share_request(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) - /// Test share pasteboard dictionary - func _test_share_pb(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) + /// Test share pasteboard request dictionary + func _test_share_pb_request(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) /// Avoid share pasteboard error func _avoid_share_pb_error(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) -> Bool @@ -101,8 +101,8 @@ protocol _ShareCompletionTestCase: XCTestCase { protocol ShareTestCase: _ShareSchemeTestCase, - _ShareUniversalLinkTestCase, - _SharePasteboardTestCase, + _ShareUniversalLinkRequestTestCase, + _SharePasteboardRequestTestCase, _ShareCompletionTestCase { var disposeBag: DisposeBag { get } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index 45d724a..257c2fd 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -21,19 +21,19 @@ extension QQHandlerBaseTests: GeneralSchemeTestCase { } } -// MARK: - General - UniversalLink +// MARK: - General - UniversalLink - Request -extension QQHandlerBaseTests: GeneralUniversalLinkTestCase { +extension QQHandlerBaseTests: GeneralUniversalLinkRequestTestCase { - func test_general_ul(scheme: @autoclosure () throws -> String) { + func test_general_ul_request(scheme: @autoclosure () throws -> String) { XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: @autoclosure () throws -> String) { + func test_general_ul_request(host: @autoclosure () throws -> String) { XCTAssertEqual(try host(), "qm.qq.com") } - func test_general_ul(queryItems: inout [URLQueryItem]) { + func test_general_ul_request(queryItems: inout [URLQueryItem]) { let appsign_txid = queryItems.removeFirst { $0.name == "appsign_txid" }! test_appsign_txid(appsign_txid) @@ -60,22 +60,22 @@ extension QQHandlerBaseTests { } } -// MARK: - General - Pasteboard +// MARK: - General - Pasteboard - Request -extension QQHandlerBaseTests: GeneralPasteboardTestCase { +extension QQHandlerBaseTests: GeneralPasteboardRequestTestCase { - func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + func extract_major_pb_request(items: inout [[String: Data]]) -> [String: Any] { extract_KeyedArchiver_pb(items: &items, key: "com.tencent.mqq.api.apiLargeData") } - func test_general_pb(dictionary: inout [String: Any]) { + func test_general_pb_request(dictionary: inout [String: Any]) { if context.setPasteboardString { let pasted_string = dictionary.removeValue(forKey: "pasted_string") as! String test_pasted_string(pasted_string) } } - func test_extra_pb(items: inout [[String: Data]]) { + func test_extra_pb_request(items: inout [[String: Data]]) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift index 033044a..6c9780a 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Launch.swift @@ -30,15 +30,15 @@ extension QQHandlerBaseTests: LaunchProgramSchemeTestCase { } } -// MARK: - Launch - Program - UniversalLink +// MARK: - Launch - Program - UniversalLink - Request -extension QQHandlerBaseTests: LaunchProgramUniversalLinkTestCase { +extension QQHandlerBaseTests: LaunchProgramUniversalLinkRequestTestCase { - func test_launch_ul(path: String) { + func test_launch_ul_request(path: String) { XCTAssertEqual(path, "/opensdkul/mqqapi/profile/sdk_launch_mini_app") } - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { + func test_launch_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { let appid = queryItems.removeFirst { $0.name == "appid" }! test_appid(appid) @@ -75,11 +75,11 @@ extension QQHandlerBaseTests { } } -// MARK: - Launch - Program - Pasteboard +// MARK: - Launch - Program - Pasteboard - Request -extension QQHandlerBaseTests: LaunchProgramPasteboardTestCase { +extension QQHandlerBaseTests: LaunchProgramPasteboardRequestTestCase { - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + func test_launch_pb_request(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift index 9d4e9b2..590c384 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Oauth.swift @@ -30,15 +30,15 @@ extension QQHandlerBaseTests: OauthPlatformSchemeTestCase { } } -// MARK: - Oauth - Platform - UniversalLink +// MARK: - Oauth - Platform - UniversalLink - Request -extension QQHandlerBaseTests: OauthPlatformUniversalLinkTestCase { +extension QQHandlerBaseTests: OauthPlatformUniversalRequestLinkTestCase { - func test_oauth_ul(path: String) { + func test_oauth_ul_request(path: String) { XCTAssertEqual(path, "/opensdkul/mqqOpensdkSSoLogin/SSoLogin/\(appID)") } - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + func test_oauth_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform) { let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" }! test_objectlocation(objectlocation) @@ -159,11 +159,11 @@ extension QQHandlerBaseTests { } } -// MARK: - Oauth - Platform - Pasteboard +// MARK: - Oauth - Platform - Pasteboard - Request -extension QQHandlerBaseTests: OauthPlatformPasteboardTestCase { +extension QQHandlerBaseTests: OauthPlatformPasteboardRequestTestCase { - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + func test_oauth_pb_request(dictionary: inout [String: Any], _ platform: Platform) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 3316f7f..da0c926 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -98,15 +98,15 @@ extension QQHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Message - UniversalLink +// MARK: - Share - Message - UniversalLink - Request -extension QQHandlerBaseTests: ShareMessageUniversalLinkTestCase { +extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { - func test_share_ul(path: String) { + func test_share_ul_request(path: String) { XCTAssertEqual(path, "/opensdkul/mqqapi/share/to_fri") } - func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) @@ -521,11 +521,11 @@ extension QQHandlerBaseTests { } } -// MARK: - Share - Message - Pasteboard +// MARK: - Share - Message - Pasteboard - Request -extension QQHandlerBaseTests: ShareMessagePasteboardTestCase { +extension QQHandlerBaseTests: ShareMessagePasteboardRequestTestCase { - func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_pb_request(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let file_data = dictionary.removeValue(forKey: "file_data") as? Data test_file_data(file_data, message) diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index bb55467..4e99507 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -21,19 +21,19 @@ extension WechatHandlerBaseTests: GeneralSchemeTestCase { } } -// MARK: - General - UniversalLink +// MARK: - General - UniversalLink - Request -extension WechatHandlerBaseTests: GeneralUniversalLinkTestCase { +extension WechatHandlerBaseTests: GeneralUniversalLinkRequestTestCase { - func test_general_ul(scheme: @autoclosure () throws -> String) { + func test_general_ul_request(scheme: @autoclosure () throws -> String) { XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: @autoclosure () throws -> String) { + func test_general_ul_request(host: @autoclosure () throws -> String) { XCTAssertEqual(try host(), "help.wechat.com") } - func test_general_ul(queryItems: inout [URLQueryItem]) { + func test_general_ul_request(queryItems: inout [URLQueryItem]) { let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! test_wechat_app_bundleId(wechat_app_bundleId) @@ -53,11 +53,11 @@ extension WechatHandlerBaseTests { } } -// MARK: - General - Pasteboard +// MARK: - General - Pasteboard - Request -extension WechatHandlerBaseTests: GeneralPasteboardTestCase { +extension WechatHandlerBaseTests: GeneralPasteboardRequestTestCase { - func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + func extract_major_pb_request(items: inout [[String: Data]]) -> [String: Any] { var plist = extract_PropertyList_pb(items: &items, key: "content") logger.debug("\(UIPasteboard.self), start, \(plist.keys.sorted())") @@ -76,7 +76,7 @@ extension WechatHandlerBaseTests: GeneralPasteboardTestCase { return dictionary } - func test_general_pb(dictionary: inout [String: Any]) { + func test_general_pb_request(dictionary: inout [String: Any]) { let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool test_isAutoResend(isAutoResend) @@ -93,7 +93,7 @@ extension WechatHandlerBaseTests: GeneralPasteboardTestCase { test_universalLink(universalLink) } - func test_extra_pb(items: inout [[String: Data]]) { + func test_extra_pb_request(items: inout [[String: Data]]) { XCTAssertTrue(true) } } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift index cf4e43e..148dac9 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Launch.swift @@ -28,15 +28,15 @@ extension WechatHandlerBaseTests: LaunchProgramSchemeTestCase { } } -// MARK: - Launch - Program - UniversalLink +// MARK: - Launch - Program - UniversalLink - Request -extension WechatHandlerBaseTests: LaunchProgramUniversalLinkTestCase { +extension WechatHandlerBaseTests: LaunchProgramUniversalLinkRequestTestCase { - func test_launch_ul(path: String) { + func test_launch_ul_request(path: String) { XCTAssertEqual(path, "/app/\(appID)/jumpWxa/") } - func test_launch_ul(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { + func test_launch_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform, _ program: MiniProgramMessage) { let extMsg = queryItems.removeFirst { $0.name == "extMsg" }! test_extMsg(extMsg) @@ -96,11 +96,11 @@ extension WechatHandlerBaseTests { } } -// MARK: - Launch - Program - Pasteboard +// MARK: - Launch - Program - Pasteboard - Request -extension WechatHandlerBaseTests: LaunchProgramPasteboardTestCase { +extension WechatHandlerBaseTests: LaunchProgramPasteboardRequestTestCase { - func test_launch_pb(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { + func test_launch_pb_request(dictionary: inout [String: Any], _ platform: Platform, _ program: MiniProgramMessage) { let command = dictionary.removeValue(forKey: "command") as! String test_command_launch(command) } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift index 3085008..7784b58 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Oauth.swift @@ -28,15 +28,15 @@ extension WechatHandlerBaseTests: OauthPlatformSchemeTestCase { } } -// MARK: - Oauth - Platform - UniversalLink +// MARK: - Oauth - Platform - UniversalLink - Request -extension WechatHandlerBaseTests: OauthPlatformUniversalLinkTestCase { +extension WechatHandlerBaseTests: OauthPlatformUniversalRequestLinkTestCase { - func test_oauth_ul(path: String) { + func test_oauth_ul_request(path: String) { XCTAssertEqual(path, "/app/\(appID)/auth/") } - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + func test_oauth_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform) { let scope = queryItems.removeFirst { $0.name == "scope" }! test_scope(scope) @@ -56,11 +56,11 @@ extension WechatHandlerBaseTests { } } -// MARK: - Oauth - Platform - Pasteboard +// MARK: - Oauth - Platform - Pasteboard - Request -extension WechatHandlerBaseTests: OauthPlatformPasteboardTestCase { +extension WechatHandlerBaseTests: OauthPlatformPasteboardRequestTestCase { - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + func test_oauth_pb_request(dictionary: inout [String: Any], _ platform: Platform) { let command = dictionary.removeValue(forKey: "command") as! String test_command_oauth(command) } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 43a2283..881d38f 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -119,24 +119,24 @@ extension WechatHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Message - UniversalLink +// MARK: - Share - Message - UniversalLink - Request -extension WechatHandlerBaseTests: ShareMessageUniversalLinkTestCase { +extension WechatHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { - func test_share_ul(path: String) { + func test_share_ul_request(path: String) { XCTAssertEqual(path, "/app/\(appID)/sendreq/") } - func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { XCTAssertTrue(true) } } -// MARK: - Share - Message - Pasteboard +// MARK: - Share - Message - Pasteboard - Request -extension WechatHandlerBaseTests: ShareMessagePasteboardTestCase { +extension WechatHandlerBaseTests: ShareMessagePasteboardRequestTestCase { - func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_pb_request(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let appBrandPath = dictionary.removeValue(forKey: "appBrandPath") as? String test_appBrandPath(appBrandPath, message) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index e8cc77f..7e1a6e4 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -22,19 +22,19 @@ extension WeiboHandlerBaseTests: GeneralSchemeTestCase { } } -// MARK: - General - UniversalLink +// MARK: - General - UniversalLink - Request -extension WeiboHandlerBaseTests: GeneralUniversalLinkTestCase { +extension WeiboHandlerBaseTests: GeneralUniversalLinkRequestTestCase { - func test_general_ul(scheme: @autoclosure () throws -> String) { + func test_general_ul_request(scheme: @autoclosure () throws -> String) { XCTAssertEqual(try scheme(), "https") } - func test_general_ul(host: @autoclosure () throws -> String) { + func test_general_ul_request(host: @autoclosure () throws -> String) { XCTAssertEqual(try host(), "open.weibo.com") } - func test_general_ul(queryItems: inout [URLQueryItem]) { + func test_general_ul_request(queryItems: inout [URLQueryItem]) { let lfid = queryItems.removeFirst { $0.name == "lfid" }! test_lfid(lfid) @@ -82,20 +82,20 @@ extension WeiboHandlerBaseTests { } } -// MARK: - General - Pasteboard +// MARK: - General - Pasteboard - Request -extension WeiboHandlerBaseTests: GeneralPasteboardTestCase { +extension WeiboHandlerBaseTests: GeneralPasteboardRequestTestCase { - func extract_major_pb(items: inout [[String: Data]]) -> [String: Any] { + func extract_major_pb_request(items: inout [[String: Data]]) -> [String: Any] { extract_KeyedArchiver_pb(items: &items, key: "transferObject") } - func test_general_pb(dictionary: inout [String: Any]) { + func test_general_pb_request(dictionary: inout [String: Any]) { let requestID = dictionary.removeValue(forKey: "requestID") as! String test_requestID(requestID) } - func test_extra_pb(items: inout [[String: Data]]) { + func test_extra_pb_request(items: inout [[String: Data]]) { test_app(&items) test_sdkVersion(&items) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift index 4fb34f8..483269d 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Oauth.swift @@ -28,24 +28,24 @@ extension WeiboHandlerBaseTests: OauthPlatformSchemeTestCase { } } -// MARK: - Oauth - Platform - UniversalLink +// MARK: - Oauth - Platform - UniversalLink - Request -extension WeiboHandlerBaseTests: OauthPlatformUniversalLinkTestCase { +extension WeiboHandlerBaseTests: OauthPlatformUniversalRequestLinkTestCase { - func test_oauth_ul(path: String) { - test_share_ul(path: path) + func test_oauth_ul_request(path: String) { + test_share_ul_request(path: path) } - func test_oauth_ul(queryItems: inout [URLQueryItem], _ platform: Platform) { + func test_oauth_ul_request(queryItems: inout [URLQueryItem], _ platform: Platform) { XCTAssertTrue(true) } } -// MARK: - Oauth - Platform - Pasteboard +// MARK: - Oauth - Platform - Pasteboard - Request -extension WeiboHandlerBaseTests: OauthPlatformPasteboardTestCase { +extension WeiboHandlerBaseTests: OauthPlatformPasteboardRequestTestCase { - func test_oauth_pb(dictionary: inout [String: Any], _ platform: Platform) { + func test_oauth_pb_request(dictionary: inout [String: Any], _ platform: Platform) { let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_oauth(`class`) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index 99fc082..b040cf2 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -63,24 +63,24 @@ extension WeiboHandlerBaseTests: ShareMessageSchemeTestCase { } } -// MARK: - Share - Message - UniversalLink +// MARK: - Share - Message - UniversalLink - Request -extension WeiboHandlerBaseTests: ShareMessageUniversalLinkTestCase { +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { - func test_share_ul(path: String) { + func test_share_ul_request(path: String) { XCTAssertEqual(path, "/weibosdk/request") } - func test_share_ul(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { XCTAssertTrue(true) } } -// MARK: - Share - Message - Pasteboard +// MARK: - Share - Message - Pasteboard - Request -extension WeiboHandlerBaseTests: ShareMessagePasteboardTestCase { +extension WeiboHandlerBaseTests: ShareMessagePasteboardRequestTestCase { - func test_share_pb(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + func test_share_pb_request(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { let `class` = dictionary.removeValue(forKey: "__class") as! String test_class_share(`class`) From 70ea3500db1d5875de5dbebb08b7e089f3c5cb53 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 24 Apr 2022 21:26:37 +0800 Subject: [PATCH 110/123] fix: filter general pasteboard --- Example/NBus/Model/Reactive.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Example/NBus/Model/Reactive.swift b/Example/NBus/Model/Reactive.swift index 8c7d571..0a2c7f7 100644 --- a/Example/NBus/Model/Reactive.swift +++ b/Example/NBus/Model/Reactive.swift @@ -40,6 +40,7 @@ extension Reactive where Base: UIPasteboard { NotificationCenter.default.rx .notification(UIPasteboard.changedNotification) .observe(on: MainScheduler.asyncInstance) + .filter { ($0.object as! UIPasteboard) == base } .map { _ in base.items } } } From 6ecaf9a1e69095ba178ec98775333b5ee547025c Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 24 Apr 2022 21:49:01 +0800 Subject: [PATCH 111/123] feat: Test share --- Tests/NBusTests/Base/GeneralTestCase.swift | 42 ++++ .../Base/HandlerBaseTests+Share.swift | 183 ++++++++++++++---- Tests/NBusTests/Base/HandlerBaseTests.swift | 46 +++-- Tests/NBusTests/Base/ShareTestCase.swift | 80 ++++++-- Tests/NBusTests/Helper.swift | 19 ++ 5 files changed, 305 insertions(+), 65 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index c84ed2f..6b0cee6 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -44,3 +44,45 @@ protocol GeneralPasteboardRequestTestCase: XCTestCase { /// Test pasteboard request extra data func test_extra_pb_request(items: inout [[String: Data]]) } + +// MARK: - General - URLScheme - Response + +protocol GeneralURLSchemeResponseTestCase: XCTestCase { + + /// Test general url scheme response scheme + func test_general_us_response(scheme: @autoclosure () throws -> String) + + /// Test general url scheme response host + func test_general_us_response(host: @autoclosure () throws -> String) + + /// Test general url scheme response queryItems + func test_general_us_response(queryItems: inout [URLQueryItem]) +} + +// MARK: - General - UniversalLink - Response + +protocol GeneralUniversalLinkResponseTestCase: XCTestCase { + + /// Test general universal link response scheme + func test_general_ul_response(scheme: @autoclosure () throws -> String) + + /// Test general universal link response host + func test_general_ul_response(host: @autoclosure () throws -> String) + + /// Test general universal link response queryItems + func test_general_ul_response(queryItems: inout [URLQueryItem]) +} + +// MARK: - General - Pasteboard - Response + +protocol GeneralPasteboardResponseTestCase: XCTestCase { + + /// Extract pasteboard response major data + func extract_major_pb_response(items: inout [[String: Data]]) -> [String: Any] + + /// Test general pasteboard response dictionary + func test_general_pb_response(dictionary: inout [String: Any]) + + /// Test pasteboard response extra data + func test_extra_pb_response(items: inout [[String: Data]]) +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 9410f47..568365e 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -20,6 +20,10 @@ extension ShareTestCase { UIApplication.shared.rx .canOpenURL() .bind(onNext: { [unowned self] url in + if url.scheme == "mqqopensdknopasteboard" { + self.context.skipPasteboard = true + } + self._test_share(scheme: url, message, endpoint) }) .disposed(by: disposeBag) @@ -27,42 +31,70 @@ extension ShareTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in + if context.shareState == .signToken { + context.shareState = .requestSecond + } + self._test_share_request(url: url, message, endpoint) }) .disposed(by: disposeBag) UIPasteboard.general.rx .items() - .skip(while: { [unowned self] items in - if self._avoid_share_pb_error(items, message, endpoint) { - precondition(items.pasteboardString() == AppState.defaultPasteboardString) - - self.pbExpectation.fulfill() - - return true + .filter { [unowned self] items in + if self.context.skipPasteboard { + return false } if self.context.setPasteboardString { - return items.pasteboardString() == AppState.defaultPasteboardString + return items.pasteboardString() != AppState.defaultPasteboardString } - return false - }) + return true + } .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in self._test_share_request(items: items, message, endpoint) }) .disposed(by: disposeBag) + NotificationCenter.default.rx + .openURL() + .bind(onNext: { [unowned self] url in + precondition(self.context.shareState == .requestFirst) + + self.context.shareState = .responseURLScheme + + self._test_share_response(us: url, message, endpoint) + + HandlerBaseTests.openURL(url) + }) + .disposed(by: disposeBag) + + NotificationCenter.default.rx + .openUserActivity() + .bind(onNext: { [unowned self] userActivity in + self._test_share_response(url: userActivity.webpageURL!, message, endpoint) + + HandlerBaseTests.openUserActivity(userActivity) + }) + .disposed(by: disposeBag) + + context.shareState = .requestFirst + Bus.shared.share( message: message, to: endpoint, completionHandler: { [unowned self] result in + if case .failure(.unsupportedMessage) = result { + self.context.skipCompletion = true + } + self._test_share(result: result, message, endpoint) } ) - wait(for: [ulExpectation, pbExpectation], timeout: 5) + wait(for: [ulExpectation, pbExpectation], timeout: 30) } } @@ -103,8 +135,6 @@ extension _ShareUniversalLinkRequestTestCase { logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") XCTAssertTrue(queryItems.isEmpty) - - ulExpectation.fulfill() } } @@ -124,8 +154,6 @@ extension _SharePasteboardRequestTestCase { logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") XCTAssertTrue(items.isEmpty) - - pbExpectation.fulfill() } func _test_share_pb_request(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { @@ -145,11 +173,96 @@ extension _SharePasteboardRequestTestCase { XCTAssertTrue(dictionary.isEmpty) } +} + +// MARK: - Share - URLScheme - Response + +extension _ShareURLSchemeResponseTestCase { + + func _test_share_response(us: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: us, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - URLScheme - Response + + test_general_us_response(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_us_response(host: try XCTUnwrap(urlComponents.host)) + test_general_us_response(queryItems: &queryItems) + + // Share - Message - URLScheme - Response - func _avoid_share_pb_error(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.friend) - || (message.identifier == Messages.webPage && endpoint == Endpoints.QQ.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.QQ.friend) + test_share_us_response(path: urlComponents.path) + test_share_us_response(queryItems: &queryItems, message, endpoint) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + } +} + +// MARK: - Share - UniversalLink - Response + +extension _ShareUniversalLinkResponseTestCase { + + func _test_share_response(url: URL, _ message: MessageType, _ endpoint: Endpoint) { + let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)! + var queryItems = urlComponents.queryItems ?? [] + + logger.debug("\(URLComponents.self), start, \(queryItems.map(\.name).sorted())") + + // General - UniversalLink - Response + + test_general_ul_response(scheme: try XCTUnwrap(urlComponents.scheme)) + test_general_ul_response(host: try XCTUnwrap(urlComponents.host)) + test_general_ul_response(queryItems: &queryItems) + + // Share - Message - UniversalLink - Response + + test_share_ul_response(path: urlComponents.path) + test_share_ul_response(queryItems: &queryItems, message, endpoint) + + logger.debug("\(URLComponents.self), end, \(queryItems.map(\.name).sorted())") + + XCTAssertTrue(queryItems.isEmpty) + } +} + +// MARK: - Share - Pasteboard - Response + +extension _SharePasteboardResponseTestCase { + + func _test_share_response(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) { + var items = items as! [[String: Data]] + + logger.debug("\(UIPasteboard.self), start, \(items.map { $0.keys.sorted() })") + + _test_share_pb_response(dictionary: extract_major_pb_response(items: &items), message, endpoint) + + test_extra_pb_response(items: &items) + + logger.debug("\(UIPasteboard.self), end, \(items.map { $0.keys.sorted() })") + + XCTAssertTrue(items.isEmpty) + } + + func _test_share_pb_response(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = dictionary + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + // General - Pasteboard - Response + + test_general_pb_response(dictionary: &dictionary) + + // Share - Message - Pasteboard - Response + + test_share_pb_response(dictionary: &dictionary, message, endpoint) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) } } @@ -160,27 +273,31 @@ extension _ShareCompletionTestCase { func _test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) { switch result { case .success: - XCTAssertTrue(true) + if context.shareState == .success { + XCTAssertTrue(true) + break + } + + XCTAssertTrue(false) case let .failure(error): logger.error("\(error)") - if _avoid_share_completion_error(error, message, endpoint) { + if context.skipCompletion { XCTAssertTrue(true) + break + } - ulExpectation.fulfill() - pbExpectation.fulfill() - } else { - XCTAssertTrue(false) + if context.shareState == .failure { + XCTAssertTrue(true) + break } + + XCTAssertTrue(false) } - } - func _avoid_share_completion_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool { - (message.identifier == Messages.file && endpoint == Endpoints.QQ.timeline) - || (message.identifier == Messages.file && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Wechat.favorite) - || (message.identifier == Messages.file && endpoint == Endpoints.Weibo.timeline) - || (message.identifier == Messages.miniProgram && endpoint == Endpoints.Weibo.timeline) + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [unowned self] in + self.ulExpectation.fulfill() + self.pbExpectation.fulfill() + } } } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 41c7d8e..c821cc5 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -65,16 +65,6 @@ class HandlerBaseTests: XCTestCase { .openURL() .bind(onNext: { url in logger.debug("\(url)") - - let result = Bus.shared.openURL(url) - - NotificationCenter.default.post( - name: AppState.OpenURL.responseName, - object: nil, - userInfo: [ - AppState.OpenURL.responseResultKey: result, - ] - ) }) .disposed(by: disposeBag) @@ -82,16 +72,6 @@ class HandlerBaseTests: XCTestCase { .openUserActivity() .bind(onNext: { userActivity in logger.debug("\(userActivity.webpageURL!)") - - let result = Bus.shared.openUserActivity(userActivity) - - NotificationCenter.default.post( - name: AppState.OpenUserActivity.responseName, - object: nil, - userInfo: [ - AppState.OpenUserActivity.responseResultKey: result, - ] - ) }) .disposed(by: disposeBag) @@ -116,6 +96,30 @@ class HandlerBaseTests: XCTestCase { }) .disposed(by: disposeBag) } + + static func openURL(_ url: URL) { + let result = Bus.shared.openURL(url) + + NotificationCenter.default.post( + name: AppState.OpenURL.responseName, + object: nil, + userInfo: [ + AppState.OpenURL.responseResultKey: result, + ] + ) + } + + static func openUserActivity(_ userActivity: NSUserActivity) { + let result = Bus.shared.openUserActivity(userActivity) + + NotificationCenter.default.post( + name: AppState.OpenUserActivity.responseName, + object: nil, + userInfo: [ + AppState.OpenUserActivity.responseResultKey: result, + ] + ) + } } extension HandlerBaseTests { @@ -126,6 +130,8 @@ extension HandlerBaseTests { context.setPasteboardString = true AppState.shared.clearPasteboard(shouldSetString: context.setPasteboardString) + AppState.shared.clearKeychains() + AppState.shared.clearUserDefaults() Bus.shared.handlers = [handler] } diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index 83216a1..ba1e3a7 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -46,9 +46,6 @@ protocol _ShareUniversalLinkRequestTestCase: GeneralUniversalLinkRequestTestCase, ShareMessageUniversalLinkRequestTestCase { - /// Universal link expectation - var ulExpectation: XCTestExpectation { get } - /// Test share universal link request func _test_share_request(url: URL, _ message: MessageType, _ endpoint: Endpoint) } @@ -67,17 +64,74 @@ protocol _SharePasteboardRequestTestCase: GeneralPasteboardRequestTestCase, ShareMessagePasteboardRequestTestCase { - /// Pasteboard expectation - var pbExpectation: XCTestExpectation { get } - /// Test share pasteboard request func _test_share_request(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) /// Test share pasteboard request dictionary func _test_share_pb_request(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - URLScheme - Response + +protocol ShareMessageURLSchemeResponseTestCase: XCTestCase { + + /// Test share url scheme response path + func test_share_us_response(path: String) + + /// Test share url scheme response queryItems + func test_share_us_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - URLScheme - Response + +protocol _ShareURLSchemeResponseTestCase: + GeneralURLSchemeResponseTestCase, + ShareMessageURLSchemeResponseTestCase { + + /// Test share url scheme response + func _test_share_response(us: URL, _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - UniversalLink - Response - /// Avoid share pasteboard error - func _avoid_share_pb_error(_ items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) -> Bool +protocol ShareMessageUniversalLinkResponseTestCase: XCTestCase { + + /// Test share universal link response path + func test_share_ul_response(path: String) + + /// Test share universal link response queryItems + func test_share_ul_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - UniversalLink - Response + +protocol _ShareUniversalLinkResponseTestCase: + GeneralUniversalLinkResponseTestCase, + ShareMessageUniversalLinkResponseTestCase { + + /// Test share universal link response + func _test_share_response(url: URL, _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Message - Pasteboard - Response + +protocol ShareMessagePasteboardResponseTestCase: XCTestCase { + + /// Test share pasteboard response dictionary + func test_share_pb_response(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) +} + +// MARK: - Share - Pasteboard - Response + +protocol _SharePasteboardResponseTestCase: + GeneralPasteboardResponseTestCase, + ShareMessagePasteboardResponseTestCase { + + /// Test share pasteboard response + func _test_share_response(items: [[String: Any]], _ message: MessageType, _ endpoint: Endpoint) + + /// Test share pasteboard response dictionary + func _test_share_pb_response(dictionary: [String: Any], _ message: MessageType, _ endpoint: Endpoint) } // MARK: - Share - Completion @@ -90,11 +144,10 @@ protocol _ShareCompletionTestCase: XCTestCase { /// Pasteboard expectation var pbExpectation: XCTestExpectation { get } + var context: HandlerTestContext { get set } + /// Test share completion func _test_share(result: Result, _ message: MessageType, _ endpoint: Endpoint) - - /// Avoid share completion error - func _avoid_share_completion_error(_ error: Bus.Error, _ message: MessageType, _ endpoint: Endpoint) -> Bool } // MARK: - Share @@ -103,9 +156,12 @@ protocol ShareTestCase: _ShareSchemeTestCase, _ShareUniversalLinkRequestTestCase, _SharePasteboardRequestTestCase, + _ShareURLSchemeResponseTestCase, + _ShareUniversalLinkResponseTestCase, + _SharePasteboardResponseTestCase, _ShareCompletionTestCase { var disposeBag: DisposeBag { get } - var context: HandlerTestContext { get } + var context: HandlerTestContext { get set } } diff --git a/Tests/NBusTests/Helper.swift b/Tests/NBusTests/Helper.swift index ff563a3..f599157 100644 --- a/Tests/NBusTests/Helper.swift +++ b/Tests/NBusTests/Helper.swift @@ -37,4 +37,23 @@ extension Array where Element == [String: Any] { struct HandlerTestContext { var setPasteboardString = false + + var skipPasteboard = false + var skipCompletion = false + + var shareState: ShareState! +} + +extension HandlerTestContext { + + enum ShareState { + case requestFirst + case signToken + case requestSecond + case requestThird + case responseURLScheme + case responseUniversalLink + case success + case failure + } } From 6ad5cef5c181e7917af3b4d2fafea3d5b67b37aa Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 24 Apr 2022 21:58:44 +0800 Subject: [PATCH 112/123] feat: extract url using JSON --- .../NBusTests/Base/HandlerBaseTests+General.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+General.swift b/Tests/NBusTests/Base/HandlerBaseTests+General.swift index df8f0b3..3b80f9c 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+General.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+General.swift @@ -8,6 +8,21 @@ import Foundation +// MARK: - General - UniversalLink - Request + +extension GeneralUniversalLinkRequestTestCase { + + /// Extract url using JSON + func extract_JSON_ul(queryItems: inout [URLQueryItem], key: String) -> [String: Any] { + let item = queryItems.removeFirst { $0.name == key }! + + let data = Data(base64Encoded: item.value!)! + let dictionary = try! JSONSerialization.jsonObject(with: data) as! [String: Any] + + return dictionary + } +} + // MARK: - General - Pasteboard - Request extension GeneralPasteboardRequestTestCase { From 15b906d1945018fc1ef0f7c70842df59062b759c Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Sun, 24 Apr 2022 21:58:58 +0800 Subject: [PATCH 113/123] feat: test qq share --- .../QQ/QQHandlerBaseTests+General.swift | 112 +++++++++++++ .../QQ/QQHandlerBaseTests+Share.swift | 156 ++++++++++++++++++ 2 files changed, 268 insertions(+) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index 257c2fd..e8c5c80 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -86,3 +86,115 @@ extension QQHandlerBaseTests { XCTAssertEqual(value, AppState.defaultPasteboardString) } } + +// MARK: - General - URLScheme - Response + +extension QQHandlerBaseTests: GeneralURLSchemeResponseTestCase { + + func test_general_us_response(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), appID) + } + + func test_general_us_response(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), "response_from_qq") + } + + func test_general_us_response(queryItems: inout [URLQueryItem]) { + let appsign_bundlenull = queryItems.removeFirst { $0.name == "appsign_bundlenull" }! + test_appsign_bundlenull_us(appsign_bundlenull) + + let source = queryItems.removeFirst { $0.name == "source" }! + test_source(source) + + let source_scheme = queryItems.removeFirst { $0.name == "source_scheme" }! + test_source_scheme(source_scheme) + + let version = queryItems.removeFirst { $0.name == "version" }! + test_version(version) + } +} + +extension QQHandlerBaseTests { + + func test_appsign_bundlenull_us(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "2") + } + + func test_source(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "qq") + } + + func test_source_scheme(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "mqqapi") + } +} + +// MARK: - General - UniversalLink - Response + +extension QQHandlerBaseTests: GeneralUniversalLinkResponseTestCase { + + func test_general_ul_response(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), universalLink.scheme) + } + + func test_general_ul_response(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), universalLink.host) + } + + func test_general_ul_response(queryItems: inout [URLQueryItem]) { + XCTAssertTrue(true) + } +} + +// MARK: - General - Pasteboard - Response + +extension QQHandlerBaseTests: GeneralPasteboardResponseTestCase { + + func extract_major_pb_response(items: inout [[String: Data]]) -> [String: Any] { + extract_KeyedArchiver_pb(items: &items, key: "com.tencent.\(appID)") + } + + func test_general_pb_response(dictionary: inout [String: Any]) { + let appsign_bundlenull = dictionary.removeValue(forKey: "appsign_bundlenull") as! String + test_appsign_bundlenull_pb(appsign_bundlenull) + + let appsign_redirect = dictionary.removeValue(forKey: "appsign_redirect") as! String + test_appsign_redirect(appsign_redirect) + + let appsign_redirect_pasteboard = dictionary.removeValue(forKey: "appsign_redirect_pasteboard") as! [String: String] + test_appsign_redirect_pasteboard(appsign_redirect_pasteboard) + + let appsign_retcode = dictionary.removeValue(forKey: "appsign_retcode") as! String + test_appsign_retcode(appsign_retcode) + + let appsign_token = dictionary.removeValue(forKey: "appsign_token") as! String + test_appsign_token(appsign_token) + } + + func test_extra_pb_response(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} + +extension QQHandlerBaseTests { + + func test_appsign_bundlenull_pb(_ value: String) { + XCTAssertEqual(value, "2") + } + + func test_appsign_redirect(_ value: String) { + XCTAssertNotNil(URL(string: value)) + } + + func test_appsign_redirect_pasteboard(_ value: [String: String]) { + XCTAssertEqual(value, ["pasted_string": AppState.defaultPasteboardString]) + } + + func test_appsign_retcode(_ value: String) { + XCTAssertEqual(value, "25105") + } + + func test_appsign_token(_ value: String) { + XCTAssertEqual(value.count, 32) + } +} diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index da0c926..fdc912c 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -107,6 +107,12 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { } func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + let appsign_token = queryItems.removeFirst(where: { $0.name == "appsign_token" }) + test_appsign_token_share(appsign_token) + + let appsign_txid = queryItems.removeFirst(where: { $0.name == "appsign_txid" }) + test_appsign_txid_share(appsign_txid) + let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) @@ -152,6 +158,9 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" } test_objectlocation(objectlocation, message) + let openredirect = queryItems.removeFirst(where: { $0.name == "openredirect" }) + test_openredirect(openredirect) + let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" } test_pasteboard(pasteboard, message) @@ -177,6 +186,38 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { extension QQHandlerBaseTests { + func test_appsign_token_share(_ queryItem: URLQueryItem?) { + switch context.shareState! { + case .requestFirst: + XCTAssertNil(queryItem) + case .signToken, + .requestSecond: + XCTAssertEqual(try XCTUnwrap(queryItem?.value).count, 32) + case .requestThird, + .responseURLScheme, + .responseUniversalLink, + .success, + .failure: + fatalError() + } + } + + func test_appsign_txid_share(_ queryItem: URLQueryItem?) { + switch context.shareState! { + case .requestFirst: + XCTAssertNil(queryItem) + case .signToken, + .requestSecond: + XCTAssertEqual(try XCTUnwrap(queryItem?.value), txID) + case .requestThird, + .responseURLScheme, + .responseUniversalLink, + .success, + .failure: + fatalError() + } + } + func test_callback_name(_ queryItem: URLQueryItem) { XCTAssertEqual(try XCTUnwrap(queryItem.value), txID) } @@ -411,6 +452,22 @@ extension QQHandlerBaseTests { } } + func test_openredirect(_ queryItem: URLQueryItem?) { + switch context.shareState! { + case .requestFirst: + XCTAssertNil(queryItem) + case .signToken, + .requestSecond: + XCTAssertEqual(try XCTUnwrap(queryItem?.value), "1") + case .requestThird, + .responseURLScheme, + .responseUniversalLink, + .success, + .failure: + fatalError() + } + } + func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { let thumbnail: (String) throws -> Data = { value in let data = try XCTUnwrap(Data(base64Encoded: value)) @@ -568,3 +625,102 @@ extension QQHandlerBaseTests { } } } + +// MARK: - Share - Message - URLScheme - Response + +extension QQHandlerBaseTests: ShareMessageURLSchemeResponseTestCase { + + func test_share_us_response(path: String) { + XCTAssertEqual(path, "") + } + + func test_share_us_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + if context.shareState == .responseURLScheme { + let appsign_token = queryItems.removeFirst { $0.name == "appsign_token" }! + test_appsign_token_share(appsign_token) + } + + let error = queryItems.removeFirst { $0.name == "error" }! + let error_description = queryItems.removeFirst { $0.name == "error_description" } + + switch try! XCTUnwrap(error.value) { + case "0": + context.shareState = .success + + XCTAssertNil(error_description) + case "--1000710008": + context.shareState = .failure + + XCTAssertEqual(try XCTUnwrap(error_description?.value), "主体信息不一致,无法打开".bus.base64EncodedString) + default: + fatalError() + } + } +} + +// MARK: - Share - Message - UniversalLink - Response + +extension QQHandlerBaseTests: ShareMessageUniversalLinkResponseTestCase { + + func test_share_ul_response(path: String) { + let isSignToken = path == universalLink.appendingPathComponent("\(bundleID)/mqqsignapp").path + let isResponse = path == universalLink.appendingPathComponent("\(bundleID)").path + + if isSignToken { + context.shareState = .signToken + } else if isResponse { + context.shareState = .responseUniversalLink + } + + XCTAssertTrue(isSignToken || isResponse) + } + + func test_share_ul_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + switch context.shareState! { + case .requestFirst, + .requestSecond, + .requestThird, + .responseURLScheme, + .success, + .failure: + fatalError() + case .signToken: + let generalpastboard = queryItems.removeFirst { $0.name == "generalpastboard" }! + test_generalpastboard(generalpastboard) + case .responseUniversalLink: + let sdkactioninfo = extract_JSON_ul(queryItems: &queryItems, key: "sdkactioninfo") + test_sdkactioninfo_share(sdkactioninfo, message, endpoint) + } + } +} + +extension QQHandlerBaseTests { + + func test_sdkactioninfo_us(_ value: [String: Any]) -> URL { + var dictionary = value as! [String: String] + + var urlComponents = URLComponents() + + urlComponents.scheme = dictionary.removeValue(forKey: "sdk_action_sheme")! + urlComponents.host = dictionary.removeValue(forKey: "sdk_action_host")! + urlComponents.path = dictionary.removeValue(forKey: "sdk_action_path")! + urlComponents.query = dictionary.removeValue(forKey: "sdk_action_query")! + + XCTAssertTrue(dictionary.isEmpty) + + return urlComponents.url! + } + + func test_sdkactioninfo_share(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + _test_share_response(us: test_sdkactioninfo_us(value), message, endpoint) + } +} + +// MARK: - Share - Message - Pasteboard - Response + +extension QQHandlerBaseTests: ShareMessagePasteboardResponseTestCase { + + func test_share_pb_response(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} From be0babee17c758fac693a575f2c204b3a7548789 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 25 Apr 2022 23:19:53 +0800 Subject: [PATCH 114/123] feat: process response pasteboard --- Example/NBus/AppDelegateSDK.swift | 6 ++---- Example/NBus/Model/AppState+ClearStorage.swift | 9 --------- Example/NBus/Model/AppState+Notification.swift | 2 ++ Example/NBus/Model/Reactive.swift | 18 ++++++++++++++---- Tests/NBusTests/Base/HandlerBaseTests.swift | 6 ++++-- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Example/NBus/AppDelegateSDK.swift b/Example/NBus/AppDelegateSDK.swift index c0234d3..24791c8 100644 --- a/Example/NBus/AppDelegateSDK.swift +++ b/Example/NBus/AppDelegateSDK.swift @@ -96,13 +96,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate { group.enter() - AppState.shared.setAgainPasteboard() - NotificationCenter.default.post( name: AppState.OpenURL.requestName, object: nil, userInfo: [ AppState.OpenURL.requestURLKey: url, + AppState.OpenURL.requestPasteboardKey: UIPasteboard.general.items, ] ) @@ -135,13 +134,12 @@ class AppDelegate: UIResponder, UIApplicationDelegate { group.enter() - AppState.shared.setAgainPasteboard() - NotificationCenter.default.post( name: AppState.OpenUserActivity.requestName, object: nil, userInfo: [ AppState.OpenUserActivity.requestUserActivityKey: userActivity, + AppState.OpenUserActivity.requestPasteboardKey: UIPasteboard.general.items, ] ) diff --git a/Example/NBus/Model/AppState+ClearStorage.swift b/Example/NBus/Model/AppState+ClearStorage.swift index 14a4a80..1d06ed2 100644 --- a/Example/NBus/Model/AppState+ClearStorage.swift +++ b/Example/NBus/Model/AppState+ClearStorage.swift @@ -46,13 +46,4 @@ extension AppState { defaults.removeObject(forKey: key) } } - - func setAgainPasteboard() { - let pasteboard = UIPasteboard.general - - let items = pasteboard.items - - pasteboard.items = [] - pasteboard.items = items - } } diff --git a/Example/NBus/Model/AppState+Notification.swift b/Example/NBus/Model/AppState+Notification.swift index f354b28..4dcf403 100644 --- a/Example/NBus/Model/AppState+Notification.swift +++ b/Example/NBus/Model/AppState+Notification.swift @@ -14,6 +14,7 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenURL") static let responseName = Notification.Name("Bus.OpenURL.Result") static let requestURLKey = "url" + static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } @@ -21,6 +22,7 @@ extension AppState { static let requestName = Notification.Name("Bus.OpenUserActivity") static let responseName = Notification.Name("Bus.OpenUserActivity.Result") static let requestUserActivityKey = "userActivity" + static let requestPasteboardKey = "pasteboard" static let responseResultKey = "result" } } diff --git a/Example/NBus/Model/Reactive.swift b/Example/NBus/Model/Reactive.swift index 0a2c7f7..8bb0f98 100644 --- a/Example/NBus/Model/Reactive.swift +++ b/Example/NBus/Model/Reactive.swift @@ -47,13 +47,23 @@ extension Reactive where Base: UIPasteboard { extension Reactive where Base: NotificationCenter { - func openURL() -> Observable { + func openURL() -> Observable<(URL, [[String: Any]])> { notification(AppState.OpenURL.requestName) - .map { $0.userInfo?[AppState.OpenURL.requestURLKey] as! URL } + .map { + ( + $0.userInfo?[AppState.OpenURL.requestURLKey] as! URL, + $0.userInfo?[AppState.OpenURL.requestPasteboardKey] as! [[String: Any]] + ) + } } - func openUserActivity() -> Observable { + func openUserActivity() -> Observable<(NSUserActivity, [[String: Any]])> { notification(AppState.OpenUserActivity.requestName) - .map { $0.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity } + .map { + ( + $0.userInfo?[AppState.OpenUserActivity.requestUserActivityKey] as! NSUserActivity, + $0.userInfo?[AppState.OpenUserActivity.requestPasteboardKey] as! [[String: Any]] + ) + } } } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index c821cc5..119e54c 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -63,15 +63,17 @@ class HandlerBaseTests: XCTestCase { NotificationCenter.default.rx .openURL() - .bind(onNext: { url in + .bind(onNext: { url, items in logger.debug("\(url)") + logger.debug("\(items.map { $0.keys.sorted() })") }) .disposed(by: disposeBag) NotificationCenter.default.rx .openUserActivity() - .bind(onNext: { userActivity in + .bind(onNext: { userActivity, items in logger.debug("\(userActivity.webpageURL!)") + logger.debug("\(items.map { $0.keys.sorted() })") }) .disposed(by: disposeBag) From 9bf3b4dc9c647d55524d52e20b2023e2c4cbca7f Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 25 Apr 2022 23:21:50 +0800 Subject: [PATCH 115/123] feat: test qq share with response pasteboard --- .../Base/HandlerBaseTests+Share.swift | 22 ++++++++---- .../QQ/QQHandlerBaseTests+General.swift | 9 +---- .../QQ/QQHandlerBaseTests+Share.swift | 35 +++++++++++++++++-- 3 files changed, 49 insertions(+), 17 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 568365e..c0f5798 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -41,18 +41,14 @@ extension ShareTestCase { UIPasteboard.general.rx .items() + .filter { !$0.allSatisfy { $0.isEmpty } } .filter { [unowned self] items in - if self.context.skipPasteboard { - return false - } - if self.context.setPasteboardString { return items.pasteboardString() != AppState.defaultPasteboardString } return true } - .filter { !$0.allSatisfy { $0.isEmpty } } .bind(onNext: { [unowned self] items in self._test_share_request(items: items, message, endpoint) }) @@ -60,22 +56,34 @@ extension ShareTestCase { NotificationCenter.default.rx .openURL() - .bind(onNext: { [unowned self] url in + .bind(onNext: { [unowned self] url, items in precondition(self.context.shareState == .requestFirst) self.context.shareState = .responseURLScheme self._test_share_response(us: url, message, endpoint) + self._test_share_response(items: items, message, endpoint) + HandlerBaseTests.openURL(url) }) .disposed(by: disposeBag) NotificationCenter.default.rx .openUserActivity() - .bind(onNext: { [unowned self] userActivity in + .bind(onNext: { [unowned self] userActivity, items in self._test_share_response(url: userActivity.webpageURL!, message, endpoint) + test_pasteboard: if items.pasteboardString() != AppState.defaultPasteboardString { + if items.contains(where: { $0.contains(where: { $0.key == "com.tencent.mqq.api.apiLargeData" }) }) { + self._test_share_request(items: items, message, endpoint) + + break test_pasteboard + } + + self._test_share_response(items: items, message, endpoint) + } + HandlerBaseTests.openUserActivity(userActivity) }) .disposed(by: disposeBag) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift index e8c5c80..5877738 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+General.swift @@ -69,7 +69,7 @@ extension QQHandlerBaseTests: GeneralPasteboardRequestTestCase { } func test_general_pb_request(dictionary: inout [String: Any]) { - if context.setPasteboardString { + if !context.skipPasteboard, context.setPasteboardString { let pasted_string = dictionary.removeValue(forKey: "pasted_string") as! String test_pasted_string(pasted_string) } @@ -161,9 +161,6 @@ extension QQHandlerBaseTests: GeneralPasteboardResponseTestCase { let appsign_redirect = dictionary.removeValue(forKey: "appsign_redirect") as! String test_appsign_redirect(appsign_redirect) - let appsign_redirect_pasteboard = dictionary.removeValue(forKey: "appsign_redirect_pasteboard") as! [String: String] - test_appsign_redirect_pasteboard(appsign_redirect_pasteboard) - let appsign_retcode = dictionary.removeValue(forKey: "appsign_retcode") as! String test_appsign_retcode(appsign_retcode) @@ -186,10 +183,6 @@ extension QQHandlerBaseTests { XCTAssertNotNil(URL(string: value)) } - func test_appsign_redirect_pasteboard(_ value: [String: String]) { - XCTAssertEqual(value, ["pasted_string": AppState.defaultPasteboardString]) - } - func test_appsign_retcode(_ value: String) { XCTAssertEqual(value, "25105") } diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index fdc912c..b958b90 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -597,7 +597,9 @@ extension QQHandlerBaseTests { switch message { case is TextMessage, is AudioMessage, - is VideoMessage: + is VideoMessage, + is WebPageMessage, + is MiniProgramMessage: XCTAssertNil(value) case let message as ImageMessage: XCTAssertEqual(try XCTUnwrap(value), message.data) @@ -618,8 +620,12 @@ extension QQHandlerBaseTests { XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as VideoMessage: XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) + case let message as WebPageMessage: + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) case let message as FileMessage: XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) + case let message as MiniProgramMessage: + XCTAssertEqual(try XCTUnwrap(value), message.thumbnail) default: fatalError() } @@ -721,6 +727,31 @@ extension QQHandlerBaseTests { extension QQHandlerBaseTests: ShareMessagePasteboardResponseTestCase { func test_share_pb_response(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) + let appsign_redirect_pasteboard = dictionary.removeValue(forKey: "appsign_redirect_pasteboard") as! [String: Any] + test_appsign_redirect_pasteboard(appsign_redirect_pasteboard, message, endpoint) + } +} + +extension QQHandlerBaseTests { + + func test_appsign_redirect_pasteboard(_ value: [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + var dictionary = value + + logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") + + let file_data = dictionary.removeValue(forKey: "file_data") as? Data + test_file_data(file_data, message) + + if !context.skipPasteboard, context.setPasteboardString { + let pasted_string = dictionary.removeValue(forKey: "pasted_string") as! String + test_pasted_string(pasted_string) + } + + let previewimagedata = dictionary.removeValue(forKey: "previewimagedata") as? Data + test_previewimagedata(previewimagedata, message) + + logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") + + XCTAssertTrue(dictionary.isEmpty) } } From 3b5030a7a1e672ea19768ed718ba2089494ad4cf Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 26 Apr 2022 21:00:46 +0800 Subject: [PATCH 116/123] feat: convert Endpoint to Platform --- Example/NBus/Model/Endpoint.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Example/NBus/Model/Endpoint.swift b/Example/NBus/Model/Endpoint.swift index 11d920a..f45f0dc 100644 --- a/Example/NBus/Model/Endpoint.swift +++ b/Example/NBus/Model/Endpoint.swift @@ -33,3 +33,28 @@ extension Endpoint: CustomStringConvertible { } } } + +extension Endpoint { + + var toPlatform: Platform { + switch self { + case Endpoints.Wechat.friend: + return Platforms.wechat + case Endpoints.Wechat.timeline: + return Platforms.wechat + case Endpoints.Wechat.favorite: + return Platforms.wechat + case Endpoints.QQ.friend: + return Platforms.qq + case Endpoints.QQ.timeline: + return Platforms.qq + case Endpoints.Weibo.timeline: + return Platforms.weibo + case Endpoints.System.activity: + return Platforms.system + default: + assertionFailure() + return Platform(rawValue: "unknown") + } + } +} From b09902009482e2f8ae190cec7db1c6aa37194ac7 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 26 Apr 2022 21:01:29 +0800 Subject: [PATCH 117/123] refactor: rename to responseSignToken and sort --- Tests/NBusTests/Helper.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/NBusTests/Helper.swift b/Tests/NBusTests/Helper.swift index f599157..f40acf2 100644 --- a/Tests/NBusTests/Helper.swift +++ b/Tests/NBusTests/Helper.swift @@ -48,11 +48,11 @@ extension HandlerTestContext { enum ShareState { case requestFirst - case signToken + case responseSignToken case requestSecond - case requestThird case responseURLScheme case responseUniversalLink + case requestThird case success case failure } From a1842a606458d8e1c8ce49d4cc06e97a1e74afd2 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 26 Apr 2022 21:03:12 +0800 Subject: [PATCH 118/123] refactor: set shareState in general --- .../Base/HandlerBaseTests+Share.swift | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index c0f5798..6c124c5 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -31,7 +31,7 @@ extension ShareTestCase { UIApplication.shared.rx .openURL() .bind(onNext: { [unowned self] url in - if context.shareState == .signToken { + if context.shareState == .responseSignToken { context.shareState = .requestSecond } @@ -72,7 +72,24 @@ extension ShareTestCase { NotificationCenter.default.rx .openUserActivity() .bind(onNext: { [unowned self] userActivity, items in - self._test_share_response(url: userActivity.webpageURL!, message, endpoint) + let webpageURL = userActivity.webpageURL! + let bundleID = Bundle.main.bus.identifier! + + if endpoint.toPlatform == Platforms.qq { + if webpageURL.path.hasSuffix("\(bundleID)/mqqsignapp") { + self.context.shareState = .responseSignToken + } else if webpageURL.path.hasSuffix("\(bundleID)") { + self.context.shareState = .responseUniversalLink + } + } + + if endpoint.toPlatform == Platforms.weibo { + if webpageURL.query!.contains("checkStatus") { + self.context.shareState = .responseSignToken + } + } + + self._test_share_response(url: webpageURL, message, endpoint) test_pasteboard: if items.pasteboardString() != AppState.defaultPasteboardString { if items.contains(where: { $0.contains(where: { $0.key == "com.tencent.mqq.api.apiLargeData" }) }) { From 2ca0638f1f019b78f5d5589213eb9c4eb4a65c15 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 26 Apr 2022 21:05:18 +0800 Subject: [PATCH 119/123] refactor: determine shareState --- .../QQ/QQHandlerBaseTests+Share.swift | 91 ++++++------------- 1 file changed, 30 insertions(+), 61 deletions(-) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index b958b90..73c7f78 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -107,11 +107,15 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { } func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - let appsign_token = queryItems.removeFirst(where: { $0.name == "appsign_token" }) - test_appsign_token_share(appsign_token) + if context.shareState == .requestSecond { + let appsign_token = queryItems.removeFirst(where: { $0.name == "appsign_token" })! + test_appsign_token_share(appsign_token) + } - let appsign_txid = queryItems.removeFirst(where: { $0.name == "appsign_txid" }) - test_appsign_txid_share(appsign_txid) + if context.shareState == .requestSecond { + let appsign_txid = queryItems.removeFirst(where: { $0.name == "appsign_txid" })! + test_appsign_txid(appsign_txid) + } let callback_name = queryItems.removeFirst { $0.name == "callback_name" }! test_callback_name(callback_name) @@ -158,8 +162,10 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { let objectlocation = queryItems.removeFirst { $0.name == "objectlocation" } test_objectlocation(objectlocation, message) - let openredirect = queryItems.removeFirst(where: { $0.name == "openredirect" }) - test_openredirect(openredirect) + if context.shareState == .requestSecond { + let openredirect = queryItems.removeFirst(where: { $0.name == "openredirect" })! + test_openredirect(openredirect) + } let pasteboard = queryItems.removeFirst { $0.name == "pasteboard" } test_pasteboard(pasteboard, message) @@ -186,36 +192,8 @@ extension QQHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { extension QQHandlerBaseTests { - func test_appsign_token_share(_ queryItem: URLQueryItem?) { - switch context.shareState! { - case .requestFirst: - XCTAssertNil(queryItem) - case .signToken, - .requestSecond: - XCTAssertEqual(try XCTUnwrap(queryItem?.value).count, 32) - case .requestThird, - .responseURLScheme, - .responseUniversalLink, - .success, - .failure: - fatalError() - } - } - - func test_appsign_txid_share(_ queryItem: URLQueryItem?) { - switch context.shareState! { - case .requestFirst: - XCTAssertNil(queryItem) - case .signToken, - .requestSecond: - XCTAssertEqual(try XCTUnwrap(queryItem?.value), txID) - case .requestThird, - .responseURLScheme, - .responseUniversalLink, - .success, - .failure: - fatalError() - } + func test_appsign_token_share(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value).count, 32) } func test_callback_name(_ queryItem: URLQueryItem) { @@ -452,20 +430,8 @@ extension QQHandlerBaseTests { } } - func test_openredirect(_ queryItem: URLQueryItem?) { - switch context.shareState! { - case .requestFirst: - XCTAssertNil(queryItem) - case .signToken, - .requestSecond: - XCTAssertEqual(try XCTUnwrap(queryItem?.value), "1") - case .requestThird, - .responseURLScheme, - .responseUniversalLink, - .success, - .failure: - fatalError() - } + func test_openredirect(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "1") } func test_pasteboard(_ queryItem: URLQueryItem?, _ message: MessageType) { @@ -669,28 +635,31 @@ extension QQHandlerBaseTests: ShareMessageURLSchemeResponseTestCase { extension QQHandlerBaseTests: ShareMessageUniversalLinkResponseTestCase { func test_share_ul_response(path: String) { - let isSignToken = path == universalLink.appendingPathComponent("\(bundleID)/mqqsignapp").path - let isResponse = path == universalLink.appendingPathComponent("\(bundleID)").path - - if isSignToken { - context.shareState = .signToken - } else if isResponse { - context.shareState = .responseUniversalLink + switch context.shareState! { + case .requestFirst, + .requestSecond, + .responseURLScheme, + .requestThird, + .success, + .failure: + fatalError() + case .responseSignToken: + XCTAssertEqual(path, universalLink.appendingPathComponent("\(bundleID)/mqqsignapp").path) + case .responseUniversalLink: + XCTAssertEqual(path, universalLink.appendingPathComponent("\(bundleID)").path) } - - XCTAssertTrue(isSignToken || isResponse) } func test_share_ul_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { switch context.shareState! { case .requestFirst, .requestSecond, - .requestThird, .responseURLScheme, + .requestThird, .success, .failure: fatalError() - case .signToken: + case .responseSignToken: let generalpastboard = queryItems.removeFirst { $0.name == "generalpastboard" }! test_generalpastboard(generalpastboard) case .responseUniversalLink: From b3f6a3cfff7adde5b79daf9d308e4e230beffd33 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 16 May 2022 23:57:41 +0800 Subject: [PATCH 120/123] refactor: GeneralCompletionTestCase --- Tests/NBusTests/Base/GeneralTestCase.swift | 24 ++++++ .../Base/HandlerBaseTests+Share.swift | 59 ++++++--------- Tests/NBusTests/Base/HandlerBaseTests.swift | 74 +++++++++++++++++++ Tests/NBusTests/Base/ShareTestCase.swift | 2 +- 4 files changed, 120 insertions(+), 39 deletions(-) diff --git a/Tests/NBusTests/Base/GeneralTestCase.swift b/Tests/NBusTests/Base/GeneralTestCase.swift index 6b0cee6..e36e860 100644 --- a/Tests/NBusTests/Base/GeneralTestCase.swift +++ b/Tests/NBusTests/Base/GeneralTestCase.swift @@ -7,6 +7,7 @@ // import Foundation +import RxRelay import XCTest // MARK: - General - Scheme @@ -86,3 +87,26 @@ protocol GeneralPasteboardResponseTestCase: XCTestCase { /// Test pasteboard response extra data func test_extra_pb_response(items: inout [[String: Data]]) } + +// MARK: - General - Completion + +protocol GeneralCompletionTestCase: XCTestCase { + + /// scheme relay + static var schemeRelay: PublishRelay { get } + + /// universal link request relay + static var universalLinkRequestRelay: PublishRelay { get } + + /// pasteboard request relay + static var pasteboardRequestRelay: PublishRelay<[[String: Any]]> { get } + + /// url scheme response relay + static var urlSchemeResponseRelay: PublishRelay { get } + + /// universal link response relay + static var universalLinkResponseRelay: PublishRelay { get } + + /// pasteboard response relay + static var pasteboardResponseRelay: PublishRelay<[[String: Any]]> { get } +} diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 6c124c5..52f2add 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -17,8 +17,7 @@ import XCTest extension ShareTestCase { func test_share(_ message: MessageType, _ endpoint: Endpoint) { - UIApplication.shared.rx - .canOpenURL() + Self.schemeRelay .bind(onNext: { [unowned self] url in if url.scheme == "mqqopensdknopasteboard" { self.context.skipPasteboard = true @@ -28,8 +27,7 @@ extension ShareTestCase { }) .disposed(by: disposeBag) - UIApplication.shared.rx - .openURL() + Self.universalLinkRequestRelay .bind(onNext: { [unowned self] url in if context.shareState == .responseSignToken { context.shareState = .requestSecond @@ -39,69 +37,54 @@ extension ShareTestCase { }) .disposed(by: disposeBag) - UIPasteboard.general.rx - .items() - .filter { !$0.allSatisfy { $0.isEmpty } } - .filter { [unowned self] items in - if self.context.setPasteboardString { - return items.pasteboardString() != AppState.defaultPasteboardString - } - - return true - } + Self.pasteboardRequestRelay .bind(onNext: { [unowned self] items in self._test_share_request(items: items, message, endpoint) }) .disposed(by: disposeBag) - NotificationCenter.default.rx - .openURL() - .bind(onNext: { [unowned self] url, items in + Self.urlSchemeResponseRelay + .bind(onNext: { [unowned self] url in precondition(self.context.shareState == .requestFirst) self.context.shareState = .responseURLScheme self._test_share_response(us: url, message, endpoint) - - self._test_share_response(items: items, message, endpoint) - - HandlerBaseTests.openURL(url) }) .disposed(by: disposeBag) - NotificationCenter.default.rx - .openUserActivity() - .bind(onNext: { [unowned self] userActivity, items in - let webpageURL = userActivity.webpageURL! + Self.universalLinkResponseRelay + .bind(onNext: { [unowned self] url in let bundleID = Bundle.main.bus.identifier! if endpoint.toPlatform == Platforms.qq { - if webpageURL.path.hasSuffix("\(bundleID)/mqqsignapp") { + if url.path.hasSuffix("\(bundleID)/mqqsignapp") { self.context.shareState = .responseSignToken - } else if webpageURL.path.hasSuffix("\(bundleID)") { + } else if url.path.hasSuffix("\(bundleID)") { self.context.shareState = .responseUniversalLink } } if endpoint.toPlatform == Platforms.weibo { - if webpageURL.query!.contains("checkStatus") { + if url.query!.contains("checkStatus") { self.context.shareState = .responseSignToken + } else if url.query!.contains("sdkversion") { + self.context.shareState = .responseUniversalLink } } - self._test_share_response(url: webpageURL, message, endpoint) - - test_pasteboard: if items.pasteboardString() != AppState.defaultPasteboardString { - if items.contains(where: { $0.contains(where: { $0.key == "com.tencent.mqq.api.apiLargeData" }) }) { - self._test_share_request(items: items, message, endpoint) - - break test_pasteboard - } + self._test_share_response(url: url, message, endpoint) + }) + .disposed(by: disposeBag) - self._test_share_response(items: items, message, endpoint) + Self.pasteboardResponseRelay + .bind(onNext: { [unowned self] items in + if self.context.skipPasteboard, self.context.shareState == .success || self.context.shareState == .failure { + self._test_share_request(items: items, message, endpoint) + return } - HandlerBaseTests.openUserActivity(userActivity) + self._test_share_response(items: items, message, endpoint) }) .disposed(by: disposeBag) diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index 119e54c..ff66fc9 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -9,6 +9,7 @@ import Foundation @testable import NBus import RxCocoa +import RxRelay import RxSwift import XCTest @@ -53,6 +54,18 @@ class HandlerBaseTests: XCTestCase { static var disposeBag = DisposeBag() var disposeBag = DisposeBag() + static let schemeRelay = PublishRelay() + + static let universalLinkRequestRelay = PublishRelay() + + static let pasteboardRequestRelay = PublishRelay<[[String: Any]]>() + + static let urlSchemeResponseRelay = PublishRelay() + + static let universalLinkResponseRelay = PublishRelay() + + static let pasteboardResponseRelay = PublishRelay<[[String: Any]]>() + var context = HandlerTestContext() let ulExpectation = XCTestExpectation(description: "UniversalLink") @@ -61,6 +74,48 @@ class HandlerBaseTests: XCTestCase { override class func setUp() { super.setUp() + UIApplication.shared.rx + .canOpenURL() + .bind(onNext: { url in + schemeRelay.accept(url) + }) + .disposed(by: disposeBag) + + UIApplication.shared.rx + .openURL() + .bind(onNext: { url in + universalLinkRequestRelay.accept(url) + + let items = UIPasteboard.general.items + + if filter(items) { + pasteboardRequestRelay.accept(items) + } + }) + .disposed(by: disposeBag) + + NotificationCenter.default.rx + .openURL() + .bind(onNext: { url, items in + urlSchemeResponseRelay.accept(url) + + if filter(items) { + pasteboardResponseRelay.accept(items) + } + }) + .disposed(by: disposeBag) + + NotificationCenter.default.rx + .openUserActivity() + .bind(onNext: { userActivity, items in + universalLinkResponseRelay.accept(userActivity.webpageURL!) + + if filter(items) { + pasteboardResponseRelay.accept(items) + } + }) + .disposed(by: disposeBag) + NotificationCenter.default.rx .openURL() .bind(onNext: { url, items in @@ -97,6 +152,20 @@ class HandlerBaseTests: XCTestCase { logger.debug("\(items.map { $0.keys.sorted() })") }) .disposed(by: disposeBag) + + NotificationCenter.default.rx + .openURL() + .bind(onNext: { url, _ in + openURL(url) + }) + .disposed(by: disposeBag) + + NotificationCenter.default.rx + .openUserActivity() + .bind(onNext: { userActivity, _ in + openUserActivity(userActivity) + }) + .disposed(by: disposeBag) } static func openURL(_ url: URL) { @@ -122,6 +191,11 @@ class HandlerBaseTests: XCTestCase { ] ) } + + static func filter(_ items: [[String: Any]]) -> Bool { + !items.allSatisfy { $0.isEmpty } + && items.pasteboardString() != AppState.defaultPasteboardString + } } extension HandlerBaseTests { diff --git a/Tests/NBusTests/Base/ShareTestCase.swift b/Tests/NBusTests/Base/ShareTestCase.swift index ba1e3a7..347d6d4 100644 --- a/Tests/NBusTests/Base/ShareTestCase.swift +++ b/Tests/NBusTests/Base/ShareTestCase.swift @@ -136,7 +136,7 @@ protocol _SharePasteboardResponseTestCase: // MARK: - Share - Completion -protocol _ShareCompletionTestCase: XCTestCase { +protocol _ShareCompletionTestCase: GeneralCompletionTestCase { /// Universal link expectation var ulExpectation: XCTestExpectation { get } From e385e5f0056607caa85324d3b63a5cfe8d3473b4 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 16 May 2022 23:58:11 +0800 Subject: [PATCH 121/123] fix: cancel share with qq --- Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift index 73c7f78..155d3a5 100644 --- a/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/QQ/QQHandlerBaseTests+Share.swift @@ -620,6 +620,10 @@ extension QQHandlerBaseTests: ShareMessageURLSchemeResponseTestCase { context.shareState = .success XCTAssertNil(error_description) + case "-4": + context.shareState = .failure + + XCTAssertEqual(try XCTUnwrap(error_description?.value), "the user give up the current operation".bus.base64EncodedString) case "--1000710008": context.shareState = .failure From 88df857c9a678ec0345a235263284f1c2845c416 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Tue, 17 May 2022 00:26:21 +0800 Subject: [PATCH 122/123] refactor: GeneralCompletionTestCase with WeiboHandlerBaseTests --- .../Weibo/WeiboHandlerBaseTests+General.swift | 145 ++++++++++++---- .../Weibo/WeiboHandlerBaseTests+Share.swift | 163 +++++++++++++++++- .../Weibo/WeiboHandlerBaseTests.swift | 4 + 3 files changed, 271 insertions(+), 41 deletions(-) diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift index 7e1a6e4..d0f1ef7 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+General.swift @@ -35,36 +35,16 @@ extension WeiboHandlerBaseTests: GeneralUniversalLinkRequestTestCase { } func test_general_ul_request(queryItems: inout [URLQueryItem]) { - let lfid = queryItems.removeFirst { $0.name == "lfid" }! - test_lfid(lfid) - - let luicode = queryItems.removeFirst { $0.name == "luicode" }! - test_luicode(luicode) - let newVersion = queryItems.removeFirst { $0.name == "newVersion" }! test_newVersion(newVersion) let objId = queryItems.removeFirst { $0.name == "objId" }! test_objId(objId) - - let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! - test_sdkversion(sdkversion) - - let urltype = queryItems.removeFirst { $0.name == "urltype" }! - test_urltype(urltype) } } extension WeiboHandlerBaseTests { - func test_lfid(_ queryItem: URLQueryItem) { - XCTAssertEqual(try XCTUnwrap(queryItem.value), bundleID) - } - - func test_luicode(_ queryItem: URLQueryItem) { - XCTAssertEqual(try XCTUnwrap(queryItem.value), "10000360") - } - func test_newVersion(_ queryItem: URLQueryItem) { XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkShortVersion) } @@ -72,14 +52,6 @@ extension WeiboHandlerBaseTests { func test_objId(_ queryItem: URLQueryItem) { XCTAssertNotNil(try UUID(uuidString: XCTUnwrap(queryItem.value))) } - - func test_sdkversion(_ queryItem: URLQueryItem) { - XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkVersion) - } - - func test_urltype(_ queryItem: URLQueryItem) { - XCTAssertEqual(try XCTUnwrap(queryItem.value), "link") - } } // MARK: - General - Pasteboard - Request @@ -87,12 +59,18 @@ extension WeiboHandlerBaseTests { extension WeiboHandlerBaseTests: GeneralPasteboardRequestTestCase { func extract_major_pb_request(items: inout [[String: Data]]) -> [String: Any] { - extract_KeyedArchiver_pb(items: &items, key: "transferObject") + if context.shareState == .requestSecond { + return extract_KeyedArchiver_pb(items: &items, key: "transferObject") + } + + return [:] } func test_general_pb_request(dictionary: inout [String: Any]) { - let requestID = dictionary.removeValue(forKey: "requestID") as! String - test_requestID(requestID) + if context.shareState == .requestSecond { + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + } } func test_extra_pb_request(items: inout [[String: Data]]) { @@ -100,7 +78,9 @@ extension WeiboHandlerBaseTests: GeneralPasteboardRequestTestCase { test_sdkVersion(&items) - test_userInfo(&items) + if context.shareState == .requestSecond { + test_userInfo_share(&items) + } } } @@ -127,8 +107,20 @@ extension WeiboHandlerBaseTests { let bundleID = dictionary.removeValue(forKey: "bundleID") as! String test_bundleID(bundleID) - let universalLink = dictionary.removeValue(forKey: "universalLink") as! String - test_universalLink(universalLink) + switch context.shareState! { + case .requestFirst, + .responseSignToken, + .requestSecond: + let universalLink = dictionary.removeValue(forKey: "universalLink") as! String + test_universalLink(universalLink) + case .success, + .failure: + XCTAssertTrue(true) + case .responseURLScheme, + .responseUniversalLink, + .requestThird: + fatalError() + } logger.debug("\(UIPasteboard.self), end, \(dictionary.keys.sorted())") @@ -162,13 +154,25 @@ extension WeiboHandlerBaseTests { func test_sdkVersion(_ items: inout [[String: Data]]) { let data = items.removeFirst { $0.keys.contains("sdkVersion") }!["sdkVersion"]! - XCTAssertEqual(data, Data(sdkVersion.utf8)) + switch context.shareState! { + case .requestFirst, + .responseSignToken, + .requestSecond: + XCTAssertEqual(data, Data(sdkVersion.utf8)) + case .success, + .failure: + XCTAssertEqual(data, Data(remoteSDKShortVersion.utf8)) + case .responseURLScheme, + .responseUniversalLink, + .requestThird: + fatalError() + } } } extension WeiboHandlerBaseTests { - func test_userInfo(_ items: inout [[String: Data]]) { + func test_userInfo_share(_ items: inout [[String: Data]]) { var dictionary = extract_KeyedArchiver_pb(items: &items, key: "userInfo") logger.debug("\(UIPasteboard.self), start, \(dictionary.keys.sorted())") @@ -188,3 +192,72 @@ extension WeiboHandlerBaseTests { XCTAssertNotNil(dateFormatter.date(from: value)) } } + +// MARK: - General - URLScheme - Response + +extension WeiboHandlerBaseTests: GeneralURLSchemeResponseTestCase { + + func test_general_us_response(scheme: @autoclosure () throws -> String) { + fatalError() + } + + func test_general_us_response(host: @autoclosure () throws -> String) { + fatalError() + } + + func test_general_us_response(queryItems: inout [URLQueryItem]) { + fatalError() + } +} + +// MARK: - General - UniversalLink - Response + +extension WeiboHandlerBaseTests: GeneralUniversalLinkResponseTestCase { + + func test_general_ul_response(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), universalLink.scheme) + } + + func test_general_ul_response(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), universalLink.host) + } + + func test_general_ul_response(queryItems: inout [URLQueryItem]) { + let id = queryItems.removeFirst { $0.name == "id" }! + test_id(id) + } +} + +extension WeiboHandlerBaseTests { + + func test_id(_ queryItem: URLQueryItem) { + XCTAssertNotNil(try UUID(uuidString: XCTUnwrap(queryItem.value))) + } +} + +// MARK: - General - Pasteboard - Response + +extension WeiboHandlerBaseTests: GeneralPasteboardResponseTestCase { + + func extract_major_pb_response(items: inout [[String: Data]]) -> [String: Any] { + if context.shareState == .responseUniversalLink { + return extract_KeyedArchiver_pb(items: &items, key: "transferObject") + } + + return [:] + } + + func test_general_pb_response(dictionary: inout [String: Any]) { + test_general_pb_request(dictionary: &dictionary) + } + + func test_extra_pb_response(items: inout [[String: Data]]) { + test_app(&items) + + test_sdkVersion(&items) + + if context.shareState == .success { + test_userInfo_share(&items) + } + } +} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift index b040cf2..ef40ff5 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests+Share.swift @@ -72,7 +72,53 @@ extension WeiboHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { } func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) + if context.shareState == .requestFirst { + let checkLink = queryItems.removeFirst { $0.name == "checkLink" }! + test_checkLink_request(checkLink) + } + + if context.shareState == .requestSecond { + let lfid = queryItems.removeFirst { $0.name == "lfid" }! + test_lfid(lfid) + } + + if context.shareState == .requestSecond { + let luicode = queryItems.removeFirst { $0.name == "luicode" }! + test_luicode(luicode) + } + + if context.shareState == .requestSecond { + let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! + test_sdkversion(sdkversion) + } + + if context.shareState == .requestSecond { + let urltype = queryItems.removeFirst { $0.name == "urltype" }! + test_urltype(urltype) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_checkLink_request(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), universalLink.absoluteString) + } + + func test_lfid(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), bundleID) + } + + func test_luicode(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "10000360") + } + + func test_sdkversion(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), sdkVersion) + } + + func test_urltype(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "link") } } @@ -81,11 +127,15 @@ extension WeiboHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { extension WeiboHandlerBaseTests: ShareMessagePasteboardRequestTestCase { func test_share_pb_request(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { - let `class` = dictionary.removeValue(forKey: "__class") as! String - test_class_share(`class`) + if context.shareState == .requestSecond { + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_share(`class`) + } - let _message = dictionary.removeValue(forKey: "message") as! [String: Any] - test_message(_message, message, endpoint) + if context.shareState == .requestSecond { + let _message = dictionary.removeValue(forKey: "message") as! [String: Any] + test_message(_message, message, endpoint) + } } } @@ -288,3 +338,106 @@ extension WeiboHandlerBaseTests { } } } + +// MARK: - Share - Message - URLScheme - Response + +extension WeiboHandlerBaseTests: ShareMessageURLSchemeResponseTestCase { + + func test_share_us_response(path: String) { + fatalError() + } + + func test_share_us_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + fatalError() + } +} + +// MARK: - Share - Message - UniversalLink - Response + +extension WeiboHandlerBaseTests: ShareMessageUniversalLinkResponseTestCase { + + func test_share_ul_response(path: String) { + XCTAssertEqual(path, universalLink.appendingPathComponent("weibosdk/response").path) + } + + func test_share_ul_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + if context.shareState == .responseSignToken { + let checkLink = queryItems.removeFirst { $0.name == "checkLink" }! + test_checkLink_response(checkLink) + } + + if context.shareState == .responseSignToken { + let checkStatus = queryItems.removeFirst { $0.name == "checkStatus" }! + test_checkStatus(checkStatus) + } + + if context.shareState == .responseUniversalLink { + let sdkversion = queryItems.removeFirst { $0.name == "sdkversion" }! + test_sdkversion_response(sdkversion) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_checkLink_response(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "https://open.weibo.com/weibosdk") + } + + func test_checkStatus(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), "1") + } + + func test_sdkversion_response(_ queryItem: URLQueryItem) { + XCTAssertEqual(try XCTUnwrap(queryItem.value), remoteSDKShortVersion) + } +} + +// MARK: - Share - Message - Pasteboard - Response + +extension WeiboHandlerBaseTests: ShareMessagePasteboardResponseTestCase { + + func test_share_pb_response(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + if context.shareState == .responseUniversalLink { + let `class` = dictionary.removeValue(forKey: "__class") as! String + test_class_share_response(`class`) + } + + if context.shareState == .responseUniversalLink { + let requestID = dictionary.removeValue(forKey: "requestID") as! String + test_requestID(requestID) + } + + if context.shareState == .responseUniversalLink { + let responseID = dictionary.removeValue(forKey: "responseID") as! String + test_responseID(responseID) + } + + if context.shareState == .responseUniversalLink { + let statusCode = dictionary.removeValue(forKey: "statusCode") as! Int + test_statusCode_share(statusCode) + } + } +} + +extension WeiboHandlerBaseTests { + + func test_class_share_response(_ value: String) { + XCTAssertEqual(value, "WBSendMessageToWeiboResponse") + } + + func test_responseID(_ value: String) { + XCTAssertNotNil(UUID(uuidString: value)) + } + + func test_statusCode_share(_ value: Int) { + switch value { + case 0: + context.shareState = .success + case -1: + context.shareState = .failure + default: + fatalError() + } + } +} diff --git a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift index d63d15a..0c893f1 100644 --- a/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift +++ b/Tests/NBusTests/Weibo/WeiboHandlerBaseTests.swift @@ -36,6 +36,10 @@ class WeiboHandlerBaseTests: HandlerBaseTests { } } + var remoteSDKShortVersion: String { + "2.5" + } + override var sdkShortVersion: String { "3.3" } From e6b3f8a4c4dea7368ef20924694145039459ba77 Mon Sep 17 00:00:00 2001 From: nuomi1 Date: Mon, 23 May 2022 21:11:49 +0800 Subject: [PATCH 123/123] refactor: GeneralCompletionTestCase with WechatHandlerBaseTests --- .../Base/HandlerBaseTests+Share.swift | 14 ++- Tests/NBusTests/Base/HandlerBaseTests.swift | 3 + Tests/NBusTests/Helper.swift | 7 ++ .../WechatHandlerBaseTests+General.swift | 117 +++++++++++++++++- .../Wechat/WechatHandlerBaseTests+Share.swift | 74 ++++++++++- .../Wechat/WechatHandlerBaseTests.swift | 4 + 6 files changed, 211 insertions(+), 8 deletions(-) diff --git a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift index 52f2add..a162c8b 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests+Share.swift @@ -55,12 +55,18 @@ extension ShareTestCase { Self.universalLinkResponseRelay .bind(onNext: { [unowned self] url in - let bundleID = Bundle.main.bus.identifier! - if endpoint.toPlatform == Platforms.qq { - if url.path.hasSuffix("\(bundleID)/mqqsignapp") { + if url.path.hasSuffix("\(self.context.bundleID)/mqqsignapp") { + self.context.shareState = .responseSignToken + } else if url.path.hasSuffix("\(self.context.bundleID)") { + self.context.shareState = .responseUniversalLink + } + } + + if endpoint.toPlatform == Platforms.wechat { + if url.path.hasSuffix("\(self.context.appID!)/refreshToken") { self.context.shareState = .responseSignToken - } else if url.path.hasSuffix("\(bundleID)") { + } else if url.path.hasSuffix("\(self.context.appID!)") { self.context.shareState = .responseUniversalLink } } diff --git a/Tests/NBusTests/Base/HandlerBaseTests.swift b/Tests/NBusTests/Base/HandlerBaseTests.swift index ff66fc9..c1218ab 100644 --- a/Tests/NBusTests/Base/HandlerBaseTests.swift +++ b/Tests/NBusTests/Base/HandlerBaseTests.swift @@ -205,6 +205,9 @@ extension HandlerBaseTests { context.setPasteboardString = true + context.appID = appID + context.universalLink = universalLink + AppState.shared.clearPasteboard(shouldSetString: context.setPasteboardString) AppState.shared.clearKeychains() AppState.shared.clearUserDefaults() diff --git a/Tests/NBusTests/Helper.swift b/Tests/NBusTests/Helper.swift index f40acf2..fb9aaf8 100644 --- a/Tests/NBusTests/Helper.swift +++ b/Tests/NBusTests/Helper.swift @@ -41,6 +41,13 @@ struct HandlerTestContext { var skipPasteboard = false var skipCompletion = false + let bundleID = Bundle.main.bus.identifier! + + var appID: String! + var universalLink: URL! + + var signToken: String! + var shareState: ShareState! } diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift index 4e99507..6604a48 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+General.swift @@ -37,8 +37,10 @@ extension WechatHandlerBaseTests: GeneralUniversalLinkRequestTestCase { let wechat_app_bundleId = queryItems.removeFirst { $0.name == "wechat_app_bundleId" }! test_wechat_app_bundleId(wechat_app_bundleId) - let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! - test_wechat_auth_context_id(wechat_auth_context_id) + if context.shareState == .requestFirst { + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + } } } @@ -108,7 +110,19 @@ extension WechatHandlerBaseTests { extension WechatHandlerBaseTests { func test_isAutoResend(_ value: Bool) { - XCTAssertEqual(value, false) + switch context.shareState! { + case .requestFirst, + .responseUniversalLink: + XCTAssertEqual(value, false) + case .requestSecond: + XCTAssertEqual(value, true) + case .responseSignToken, + .responseURLScheme, + .requestThird, + .success, + .failure: + fatalError() + } } func test_result(_ value: String) { @@ -127,3 +141,100 @@ extension WechatHandlerBaseTests { XCTAssertEqual(value, universalLink.absoluteString) } } + +// MARK: - General - URLScheme - Response + +extension WechatHandlerBaseTests: GeneralURLSchemeResponseTestCase { + + func test_general_us_response(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), appID) + } + + func test_general_us_response(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), "resendContextReqByScheme") + } + + func test_general_us_response(queryItems: inout [URLQueryItem]) { + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + } +} + +// MARK: - General - UniversalLink - Response + +extension WechatHandlerBaseTests: GeneralUniversalLinkResponseTestCase { + + func test_general_ul_response(scheme: @autoclosure () throws -> String) { + XCTAssertEqual(try scheme(), universalLink.scheme) + } + + func test_general_ul_response(host: @autoclosure () throws -> String) { + XCTAssertEqual(try host(), universalLink.host) + } + + func test_general_ul_response(queryItems: inout [URLQueryItem]) { + if context.shareState == .responseSignToken { + let wechat_auth_context_id = queryItems.removeFirst { $0.name == "wechat_auth_context_id" }! + test_wechat_auth_context_id(wechat_auth_context_id) + } + + if context.shareState == .responseSignToken { + let wechat_auth_token = queryItems.removeFirst { $0.name == "wechat_auth_token" }! + test_wechat_auth_token(wechat_auth_token) + } + } +} + +extension WechatHandlerBaseTests { + + func test_wechat_auth_token(_ queryItem: URLQueryItem) { + let token = try! XCTUnwrap(queryItem.value).split(separator: "_") + XCTAssertEqual(token.count, 2) + XCTAssertEqual(try XCTUnwrap(token.first).count, 64) + } +} + +// MARK: - General - Pasteboard - Response + +extension WechatHandlerBaseTests: GeneralPasteboardResponseTestCase { + + func extract_major_pb_response(items: inout [[String: Data]]) -> [String: Any] { + extract_major_pb_request(items: &items) + } + + func test_general_pb_response(dictionary: inout [String: Any]) { + let country = dictionary.removeValue(forKey: "country") as! String + test_country(country) + + let isAutoResend = dictionary.removeValue(forKey: "isAutoResend") as! Bool + test_isAutoResend(isAutoResend) + + let language = dictionary.removeValue(forKey: "language") as! String + test_language(language) + + let returnFromApp = dictionary.removeValue(forKey: "returnFromApp") as! String + test_returnFromApp(returnFromApp) + + let wechatVersion = dictionary.removeValue(forKey: "wechatVersion") as! Int + test_wechatVersion(wechatVersion) + } + + func test_extra_pb_response(items: inout [[String: Data]]) { + XCTAssertTrue(true) + } +} + +extension WechatHandlerBaseTests { + + func test_country(_ value: String) { + XCTAssertEqual(value, "") + } + + func test_language(_ value: String) { + XCTAssertEqual(value, "zh_CN") + } + + func test_wechatVersion(_ value: Int) { + XCTAssertEqual(value, remoteSDKShortVersion) + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift index 881d38f..1fe3ad8 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests+Share.swift @@ -128,7 +128,10 @@ extension WechatHandlerBaseTests: ShareMessageUniversalLinkRequestTestCase { } func test_share_ul_request(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { - XCTAssertTrue(true) + if context.shareState == .requestSecond { + let wechat_auth_token = queryItems.removeFirst { $0.name == "wechat_auth_token" }! + test_wechat_auth_token(wechat_auth_token) + } } } @@ -561,3 +564,72 @@ extension WechatHandlerBaseTests { } } } + +// MARK: - Share - Message - URLScheme - Response + +extension WechatHandlerBaseTests: ShareMessageURLSchemeResponseTestCase { + + func test_share_us_response(path: String) { + XCTAssertEqual(path, "") + } + + func test_share_us_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - UniversalLink - Response + +extension WechatHandlerBaseTests: ShareMessageUniversalLinkResponseTestCase { + + func test_share_ul_response(path: String) { + switch context.shareState! { + case .requestFirst, + .requestSecond, + .responseURLScheme, + .requestThird, + .success, + .failure: + fatalError() + case .responseSignToken: + XCTAssertEqual(path, universalLink.appendingPathComponent("\(appID)/refreshToken").path) + case .responseUniversalLink: + XCTAssertEqual(path, universalLink.appendingPathComponent("\(appID)//").path) + } + } + + func test_share_ul_response(queryItems: inout [URLQueryItem], _ message: MessageType, _ endpoint: Endpoint) { + XCTAssertTrue(true) + } +} + +// MARK: - Share - Message - Pasteboard - Response + +extension WechatHandlerBaseTests: ShareMessagePasteboardResponseTestCase { + + func test_share_pb_response(dictionary: inout [String: Any], _ message: MessageType, _ endpoint: Endpoint) { + let command = dictionary.removeValue(forKey: "command") as! String + test_command_share(command) + + let result = dictionary.removeValue(forKey: "result") as! String + test_result_share(result) + } +} + +extension WechatHandlerBaseTests { + + func test_command_share(_ value: String) { + XCTAssertEqual(value, "2020") + } + + func test_result_share(_ value: String) { + switch value { + case "0": + context.shareState = .success + case "-2": + context.shareState = .failure + default: + fatalError() + } + } +} diff --git a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift index e87d15e..789eca9 100644 --- a/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift +++ b/Tests/NBusTests/Wechat/WechatHandlerBaseTests.swift @@ -24,6 +24,10 @@ class WechatHandlerBaseTests: HandlerBaseTests { } } + var remoteSDKShortVersion: Int { + 402_658_851 + } + override var sdkVersion: String { "1.9.2" }