194 lines
8.1 KiB
Swift
194 lines
8.1 KiB
Swift
//
|
|
// Copyright 2022-2024 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
// Please see LICENSE in the repository root for full details.
|
|
//
|
|
|
|
@testable import RiotSwiftUI
|
|
import XCTest
|
|
|
|
class UserAgentParserTests: XCTestCase {
|
|
func testAndroidUserAgents() throws {
|
|
let uaStrings = [
|
|
// New User Agent Implementation
|
|
"Element dbg/1.5.0-dev (Xiaomi Mi 9T; Android 11; RKQ1.200826.002 test-keys; Flavour GooglePlay; MatrixAndroidSdk2 1.5.2)",
|
|
"Element/1.5.0 (Samsung SM-G960F; Android 6.0.1; RKQ1.200826.002; Flavour FDroid; MatrixAndroidSdk2 1.5.2)",
|
|
"Element/1.5.0 (Google Nexus 5; Android 7.0; RKQ1.200826.002 test test; Flavour FDroid; MatrixAndroidSdk2 1.5.2)",
|
|
// Legacy User Agent Implementation
|
|
"Element/1.0.0 (Linux; U; Android 6.0.1; SM-A510F Build/MMB29; Flavour GPlay; MatrixAndroidSdk2 1.0)",
|
|
"Element/1.0.0 (Linux; Android 7.0; SM-G610M Build/NRD90M; Flavour GPlay; MatrixAndroidSdk2 1.0)"
|
|
]
|
|
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
|
|
|
|
let expected = [
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "Xiaomi Mi 9T",
|
|
deviceOS: "Android 11",
|
|
clientName: "Element dbg",
|
|
clientVersion: "1.5.0-dev"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "Samsung SM-G960F",
|
|
deviceOS: "Android 6.0.1",
|
|
clientName: "Element",
|
|
clientVersion: "1.5.0"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "Google Nexus 5",
|
|
deviceOS: "Android 7.0",
|
|
clientName: "Element",
|
|
clientVersion: "1.5.0"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "SM-A510F Build/MMB29",
|
|
deviceOS: "Android 6.0.1",
|
|
clientName: "Element",
|
|
clientVersion: "1.0.0"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "SM-G610M Build/NRD90M",
|
|
deviceOS: "Android 7.0",
|
|
clientName: "Element",
|
|
clientVersion: "1.0.0")
|
|
]
|
|
|
|
XCTAssertEqual(userAgents, expected)
|
|
}
|
|
|
|
func testIOSUserAgents() throws {
|
|
let uaStrings = [
|
|
// New User Agent Implementation
|
|
"Element/1.9.8 (iPhone X; iOS 15.2; Scale/3.00)",
|
|
"Element/1.9.9 (iPhone XS; iOS 15.5; Scale/3.00)",
|
|
"Element/1.9.7 (iPad Pro (12.9-inch) (3rd generation); iOS 15.5; Scale/3.00)",
|
|
// Legacy User Agent Implementation
|
|
"Element/1.8.21 (iPhone; iOS 15.0; Scale/2.00)",
|
|
"Element/1.8.19 (iPhone; iOS 15.2; Scale/3.00)",
|
|
// Simulator User Agent
|
|
"Element/1.9.7 (Simulator (iPhone 13 Pro Max); iOS 15.5; Scale/3.00)"
|
|
]
|
|
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
|
|
|
|
let expected = [
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "iPhone X",
|
|
deviceOS: "iOS 15.2",
|
|
clientName: "Element",
|
|
clientVersion: "1.9.8"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "iPhone XS",
|
|
deviceOS: "iOS 15.5",
|
|
clientName: "Element",
|
|
clientVersion: "1.9.9"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "iPad Pro (12.9-inch) (3rd generation)",
|
|
deviceOS: "iOS 15.5",
|
|
clientName: "Element",
|
|
clientVersion: "1.9.7"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "iPhone",
|
|
deviceOS: "iOS 15.0",
|
|
clientName: "Element",
|
|
clientVersion: "1.8.21"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "iPhone",
|
|
deviceOS: "iOS 15.2",
|
|
clientName: "Element",
|
|
clientVersion: "1.8.19"),
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: "Simulator (iPhone 13 Pro Max)",
|
|
deviceOS: "iOS 15.5",
|
|
clientName: "Element",
|
|
clientVersion: "1.9.7")
|
|
]
|
|
|
|
XCTAssertEqual(userAgents, expected)
|
|
}
|
|
|
|
func testDesktopUserAgents() {
|
|
let uaStrings = [
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) ElementNightly/2022091301 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36",
|
|
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) ElementNightly/2022091301 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36"
|
|
]
|
|
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
|
|
|
|
let expected = [
|
|
UserAgent(deviceType: .desktop,
|
|
deviceModel: nil,
|
|
deviceOS: "macOS",
|
|
clientName: "Electron",
|
|
clientVersion: "20.1.1"),
|
|
UserAgent(deviceType: .desktop,
|
|
deviceModel: nil,
|
|
deviceOS: "Windows",
|
|
clientName: "Electron",
|
|
clientVersion: "20.1.1")
|
|
]
|
|
|
|
XCTAssertEqual(userAgents, expected)
|
|
}
|
|
|
|
func testWebUserAgents() throws {
|
|
let uaStrings = [
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36",
|
|
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36",
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0",
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18",
|
|
"Mozilla/5.0 (Linux; Android 9; SM-G973U Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36"
|
|
]
|
|
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
|
|
|
|
let expected = [
|
|
UserAgent(deviceType: .web,
|
|
deviceModel: nil,
|
|
deviceOS: "macOS",
|
|
clientName: "Chrome",
|
|
clientVersion: "104.0.5112.102"),
|
|
UserAgent(deviceType: .web,
|
|
deviceModel: nil,
|
|
deviceOS: "Windows",
|
|
clientName: "Chrome",
|
|
clientVersion: "104.0.5112.102"),
|
|
UserAgent(deviceType: .web,
|
|
deviceModel: nil,
|
|
deviceOS: "macOS",
|
|
clientName: "Firefox",
|
|
clientVersion: "39.0"),
|
|
UserAgent(deviceType: .web,
|
|
deviceModel: nil,
|
|
deviceOS: "macOS",
|
|
clientName: "Safari",
|
|
clientVersion: "8.0.3"),
|
|
UserAgent(deviceType: .web,
|
|
deviceModel: nil,
|
|
deviceOS: "Android 9",
|
|
clientName: "Chrome",
|
|
clientVersion: "69.0.3497.100")
|
|
]
|
|
|
|
XCTAssertEqual(userAgents, expected)
|
|
}
|
|
|
|
func testInvalidUserAgents() throws {
|
|
let uaStrings = [
|
|
"Element (iPhone X; OS 15.2; 3.00)",
|
|
"Element/1.9.9; iOS",
|
|
"Element/1.9.7 Android",
|
|
"some random string",
|
|
"Element/1.9.9; iOS "
|
|
]
|
|
let userAgents = uaStrings.map { UserAgentParser.parse($0) }
|
|
|
|
let expected = [
|
|
.unknown,
|
|
.unknown,
|
|
.unknown,
|
|
.unknown,
|
|
UserAgent(deviceType: .mobile,
|
|
deviceModel: nil,
|
|
deviceOS: nil,
|
|
clientName: "Element",
|
|
clientVersion: "1.9.9;")
|
|
]
|
|
|
|
XCTAssertEqual(userAgents, expected)
|
|
}
|
|
}
|