147 lines
5.4 KiB
Swift
147 lines
5.4 KiB
Swift
//
|
||
// Copyright (c) 2023 Touch Instinct
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
// of this software and associated documentation files (the Software), to deal
|
||
// in the Software without restriction, including without limitation the rights
|
||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
// copies of the Software, and to permit persons to whom the Software is
|
||
// furnished to do so, subject to the following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included in
|
||
// all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
// THE SOFTWARE.
|
||
//
|
||
|
||
import XCTest
|
||
@testable import TITextProcessing
|
||
|
||
final class TITextProcessingTests: XCTestCase {
|
||
|
||
func testDateRegex() {
|
||
// given
|
||
let regex = "(\\d{2})\\/?(\\d{2})"
|
||
let inputText = "1525"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1\\/$2")
|
||
XCTAssertEqual(regexPlaceholder, "12/34")
|
||
XCTAssertEqual(formattedText, "15/25")
|
||
}
|
||
|
||
func testCardNumberRegex() {
|
||
// given
|
||
let regex = "(\\d{4}) ?(\\d{4}) ?(\\d{4}) ?(\\d{4})"
|
||
let inputText = "2200111555550080"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1 $2 $3 $4")
|
||
XCTAssertEqual(regexPlaceholder, "1234 5678 9012 3456")
|
||
XCTAssertEqual(formattedText, "2200 1115 5555 0080")
|
||
}
|
||
|
||
func testPhoneNumberRegex() {
|
||
// given
|
||
let regex = "(?:\\+7 )?\\(?(\\d{3})\\)? ?(\\d{3}) ?(\\d{2}) ?(\\d{2})"
|
||
let inputText = "9995534820"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "\\+7 \\($1\\) $2 $3 $4")
|
||
XCTAssertEqual(regexPlaceholder, "+7 (123) 456 78 90")
|
||
XCTAssertEqual(formattedText, "+7 (999) 553 48 20")
|
||
}
|
||
|
||
func testBirthdayCertificateRegex() {
|
||
// given
|
||
let regex = "([A-Z]{2})-?([А-Я]{2}) ?№? ?(\\d{6})"
|
||
let inputText = "ABЮЯ689323"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1-$2 № $3")
|
||
XCTAssertEqual(regexPlaceholder, "AB-АБ № 123456")
|
||
XCTAssertEqual(formattedText, "AB-ЮЯ № 689323")
|
||
}
|
||
|
||
func testRoubleSumRegex() {
|
||
// given
|
||
let regex = "(\\d+)([.,]\\d{1,2})? ?₽?"
|
||
let inputText = "5332.4"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1$2 ₽")
|
||
XCTAssertEqual(regexPlaceholder, "12345.67 ₽")
|
||
XCTAssertEqual(formattedText, "5332.4 ₽")
|
||
}
|
||
|
||
func testSurnameRegex() {
|
||
// given
|
||
let regex = "([А-я]+)"
|
||
let inputText = "Иванов"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1")
|
||
XCTAssertEqual(regexPlaceholder, "АБВГД")
|
||
XCTAssertEqual(formattedText, "Иванов")
|
||
}
|
||
|
||
func testEmailRegex() {
|
||
// given
|
||
let regex = "([A-z0-9._%+-]+)@([A-z0-9.-]+)\\.([A-z]{2,})"
|
||
let inputText = "test@test.com"
|
||
let formatter = TextFormatter(regex: regex)
|
||
|
||
// when
|
||
let regexReplacement = formatter.getRegexReplacement()
|
||
let regexPlaceholder = formatter.getRegexPlaceholder()
|
||
let formattedText = formatter.getFormattedText(inputText)
|
||
|
||
// then
|
||
XCTAssertEqual(regexReplacement, "$1@$2\\.$3")
|
||
XCTAssertEqual(regexPlaceholder, "ABCDE@ABCDE.AB")
|
||
XCTAssertEqual(formattedText, "test@test.com")
|
||
}
|
||
}
|