mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-08-22 15:05:26 +00:00
feat: Enhance email address conversion feature
Fixes #75 Enhance the email address conversion feature to filter suggestions based on partial domain inputs. * Update `toEmailAddressCandidates` function in `Sources/KanaKanjiConverterModule/Converter/EmailAddress.swift` to filter suggestions based on the characters before '@'. * Add logic to check if the input ends with '@' and filter the suggestions based on the characters before '@'. * Generate suggestions for email domains that match the partial domain input. * Add tests in `Tests/KanaKanjiConverterModuleTests/ConverterTests/EmailAddressConversionTests.swift` to verify the new filtering functionality for partial domain inputs like '@g' and '@y'. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/ensan-hcl/AzooKeyKanaKanjiConverter/issues/75?shareId=XXXX-XXXX-XXXX-XXXX).
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
|
||||
|
||||
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,16 +39,18 @@ extension KanaKanjiConverter {
|
||||
let string = inputData.convertTarget.toKatakana()
|
||||
var results: [Candidate] = []
|
||||
for (i, domain) in Self.domains.enumerated() {
|
||||
let address = id.appending(domain)
|
||||
results.append(
|
||||
Candidate(
|
||||
text: address,
|
||||
value: baseValue - PValue(i),
|
||||
correspondingCount: inputData.input.count,
|
||||
lastMid: MIDData.一般.mid,
|
||||
data: [DicdataElement(word: address, ruby: string, cid: .zero, mid: MIDData.一般.mid, value: baseValue - PValue(i))]
|
||||
if domain.hasPrefix("@\(domainPrefix)") {
|
||||
let address = id.appending(domain)
|
||||
results.append(
|
||||
Candidate(
|
||||
text: address,
|
||||
value: baseValue - PValue(i),
|
||||
correspondingCount: inputData.input.count,
|
||||
lastMid: MIDData.一般.mid,
|
||||
data: [DicdataElement(word: address, ruby: string, cid: .zero, mid: MIDData.一般.mid, value: baseValue - PValue(i))]
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
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
|
||||
@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"}))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user