128 lines
3.7 KiB
Swift
128 lines
3.7 KiB
Swift
//
|
||
// Copyright 2024 Signal Messenger, LLC
|
||
// SPDX-License-Identifier: AGPL-3.0-only
|
||
//
|
||
|
||
import XCTest
|
||
@testable import SignalServiceKit
|
||
|
||
class StringSanitizerTests: XCTestCase {
|
||
func testEmpty() {
|
||
let string = ""
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
XCTAssertEqual(sanitized, string)
|
||
}
|
||
|
||
func testASCII() {
|
||
let string = "abc"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
XCTAssertEqual(sanitized, string)
|
||
}
|
||
|
||
func testCombiningMarks() {
|
||
let string = "abx̧c"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
XCTAssertEqual(sanitized, string)
|
||
}
|
||
|
||
func testEmoji() {
|
||
let string = "a👩🏿❤️💋👩🏻b"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
XCTAssertEqual(sanitized, string)
|
||
}
|
||
|
||
func testZalgo() {
|
||
let string = "x̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝abx̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝x̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝👩🏿❤️💋👩🏻cx̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
let expected = "<EFBFBD>ab<EFBFBD><EFBFBD>👩🏿❤️💋👩🏻c<EFBFBD>"
|
||
XCTAssertEqual(sanitized, expected)
|
||
}
|
||
|
||
func testSingleZalgo() {
|
||
let string = "x̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
let expected = "<EFBFBD>"
|
||
XCTAssertEqual(sanitized, expected)
|
||
}
|
||
|
||
func testTwoZalgo() {
|
||
let string = "x̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝x̸̢̧̛̙̝͈͈̖̳̗̰̆̈́̆̿̈́̅̽͆̈́̿̔͌̚͝"
|
||
let sanitized = StringSanitizer.sanitize(string)
|
||
let expected = "<EFBFBD><EFBFBD>"
|
||
XCTAssertEqual(sanitized, expected)
|
||
}
|
||
}
|
||
|
||
class StringReplacementTests: XCTestCase {
|
||
|
||
func testEquivalent() {
|
||
|
||
let testCases: [String: String] = [
|
||
"": "",
|
||
" ": "",
|
||
" ": "",
|
||
"a": "a",
|
||
"abcd": "abcd",
|
||
" abcd ": "abcd",
|
||
"abcd ": "abcd",
|
||
" abcd": "abcd",
|
||
"ab cd": "abcd",
|
||
"ab 1 cd ": "ab1cd",
|
||
"ab cd ": "abcd"
|
||
]
|
||
|
||
for key in testCases.keys {
|
||
let expectedResult = testCases[key]
|
||
|
||
let result = key.replaceCharacters(characterSet: .whitespacesAndNewlines, replacement: "")
|
||
|
||
XCTAssertEqual(result, expectedResult)
|
||
}
|
||
}
|
||
|
||
func testEquivalent2() {
|
||
|
||
let testCases: [String: String] = [
|
||
"": "",
|
||
"abcd": "abcd",
|
||
" abcd ": "X abcdX ",
|
||
"abcd ": "abcdX ",
|
||
" abcd": "X abcd",
|
||
"ab cd": "abX cd",
|
||
"ab 1 cd ": "abX X 1X cdX "
|
||
]
|
||
|
||
for key in testCases.keys {
|
||
let expectedResult = testCases[key]
|
||
|
||
let result = key.replaceCharacters(characterSet: .whitespacesAndNewlines, replacement: "X ")
|
||
|
||
XCTAssertEqual(result, expectedResult)
|
||
}
|
||
}
|
||
|
||
func testEquivalent3() {
|
||
|
||
let testCases: [String: String] = [
|
||
"": "",
|
||
"abcd": "",
|
||
" abcd ": " ",
|
||
"abcd ": " ",
|
||
" abcd": " ",
|
||
"ab cd": " ",
|
||
"ab 1 cd ": " 1 ",
|
||
"ab 1 ZcdX ": " 1 ZX "
|
||
]
|
||
|
||
for key in testCases.keys {
|
||
let expectedResult = testCases[key]
|
||
|
||
var characterSetUnion = CharacterSet.punctuationCharacters
|
||
characterSetUnion.formUnion(.lowercaseLetters)
|
||
|
||
let result = key.replaceCharacters(characterSet: characterSetUnion, replacement: "")
|
||
|
||
XCTAssertEqual(result, expectedResult)
|
||
}
|
||
}
|
||
}
|