Merge pull request #151 from ensan-hcl/feat/enhance-email-lookup

feat: Enhance email address conversion feature
This commit is contained in:
Miwa
2025-02-09 02:53:00 +09:00
committed by GitHub
2 changed files with 37 additions and 29 deletions

View File

@ -1,11 +1,3 @@
//
// EmailAddress.swift
// Keyboard
//
// Created by ensan on 2022/10/01.
// Copyright © 2022 ensan. All rights reserved.
//
import Foundation
extension KanaKanjiConverter {
@ -35,10 +27,11 @@ extension KanaKanjiConverter {
/// @
/// - parameters:
func toEmailAddressCandidates(_ inputData: ComposingText) -> [Candidate] {
if !inputData.convertTarget.hasSuffix("@") {
guard let atIndex = inputData.convertTarget.lastIndex(of: "@") else {
return []
}
let id = inputData.convertTarget.dropLast(1)
let id = inputData.convertTarget[..<atIndex]
let domainPrefix = inputData.convertTarget[inputData.convertTarget.index(after: atIndex)...]
if !(id.isEnglishSentence || id.isEmpty) {
return []
}
@ -46,6 +39,7 @@ extension KanaKanjiConverter {
let string = inputData.convertTarget.toKatakana()
var results: [Candidate] = []
for (i, domain) in Self.domains.enumerated() {
if domain.hasPrefix("@\(domainPrefix)") {
let address = id.appending(domain)
results.append(
Candidate(
@ -57,6 +51,7 @@ extension KanaKanjiConverter {
)
)
}
}
return results
}
}

View File

@ -1,13 +1,5 @@
//
// EmailAddressConversionTests.swift
// azooKeyTests
//
// Created by ensan on 2022/12/26.
// Copyright © 2022 ensan. All rights reserved.
//
@testable import KanaKanjiConverterModule
import XCTest
@testable import KanaKanjiConverterModule
final class EmailAddressConversionTests: XCTestCase {
func makeDirectInput(direct input: String) -> ComposingText {
@ -52,6 +44,27 @@ final class EmailAddressConversionTests: XCTestCase {
XCTAssertTrue(result.contains(where: {$0.text == "@i.softbank.jp"}))
}
// New tests for partial domain inputs
do {
let converter = await KanaKanjiConverter()
let input = makeDirectInput(direct: "azooKey@g")
let result = await converter.toEmailAddressCandidates(input)
XCTAssertFalse(result.isEmpty)
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@gmail.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@googlemail.com"}))
XCTAssertFalse(result.contains(where: {$0.text == "azooKey@yahoo.co.jp"}))
}
do {
let converter = await KanaKanjiConverter()
let input = makeDirectInput(direct: "azooKey@y")
let result = await converter.toEmailAddressCandidates(input)
XCTAssertFalse(result.isEmpty)
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@yahoo.co.jp"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@yahoo.ne.jp"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@ybb.ne.jp"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@ymobile.ne.jp"}))
XCTAssertFalse(result.contains(where: {$0.text == "azooKey@gmail.com"}))
}
}
}