mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-08-22 15:05:26 +00:00
Merge pull request #151 from ensan-hcl/feat/enhance-email-lookup
feat: Enhance email address conversion feature
This commit is contained in:
@ -1,11 +1,3 @@
|
|||||||
//
|
|
||||||
// EmailAddress.swift
|
|
||||||
// Keyboard
|
|
||||||
//
|
|
||||||
// Created by ensan on 2022/10/01.
|
|
||||||
// Copyright © 2022 ensan. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
extension KanaKanjiConverter {
|
extension KanaKanjiConverter {
|
||||||
@ -35,10 +27,11 @@ extension KanaKanjiConverter {
|
|||||||
/// 入力が@で終わる場合に、メアドのような候補を追加する関数
|
/// 入力が@で終わる場合に、メアドのような候補を追加する関数
|
||||||
/// - parameters:
|
/// - parameters:
|
||||||
func toEmailAddressCandidates(_ inputData: ComposingText) -> [Candidate] {
|
func toEmailAddressCandidates(_ inputData: ComposingText) -> [Candidate] {
|
||||||
if !inputData.convertTarget.hasSuffix("@") {
|
guard let atIndex = inputData.convertTarget.lastIndex(of: "@") else {
|
||||||
return []
|
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) {
|
if !(id.isEnglishSentence || id.isEmpty) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
@ -46,16 +39,18 @@ extension KanaKanjiConverter {
|
|||||||
let string = inputData.convertTarget.toKatakana()
|
let string = inputData.convertTarget.toKatakana()
|
||||||
var results: [Candidate] = []
|
var results: [Candidate] = []
|
||||||
for (i, domain) in Self.domains.enumerated() {
|
for (i, domain) in Self.domains.enumerated() {
|
||||||
let address = id.appending(domain)
|
if domain.hasPrefix("@\(domainPrefix)") {
|
||||||
results.append(
|
let address = id.appending(domain)
|
||||||
Candidate(
|
results.append(
|
||||||
text: address,
|
Candidate(
|
||||||
value: baseValue - PValue(i),
|
text: address,
|
||||||
correspondingCount: inputData.input.count,
|
value: baseValue - PValue(i),
|
||||||
lastMid: MIDData.一般.mid,
|
correspondingCount: inputData.input.count,
|
||||||
data: [DicdataElement(word: address, ruby: string, cid: .zero, mid: MIDData.一般.mid, value: baseValue - PValue(i))]
|
lastMid: MIDData.一般.mid,
|
||||||
|
data: [DicdataElement(word: address, ruby: string, cid: .zero, mid: MIDData.一般.mid, value: baseValue - PValue(i))]
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
@ -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
|
import XCTest
|
||||||
|
@testable import KanaKanjiConverterModule
|
||||||
|
|
||||||
final class EmailAddressConversionTests: XCTestCase {
|
final class EmailAddressConversionTests: XCTestCase {
|
||||||
func makeDirectInput(direct input: String) -> ComposingText {
|
func makeDirectInput(direct input: String) -> ComposingText {
|
||||||
@ -52,6 +44,27 @@ final class EmailAddressConversionTests: XCTestCase {
|
|||||||
XCTAssertTrue(result.contains(where: {$0.text == "@i.softbank.jp"}))
|
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"}))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user