Files
AzooKeyKanaKanjiConverter/Tests/KanaKanjiConverterModuleTests/ConverterTests/EmailAddressConversionTests.swift
Miwa e5214c3d5c 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).
2025-02-09 00:14:32 +09:00

71 lines
3.4 KiB
Swift

import XCTest
@testable import KanaKanjiConverterModule
final class EmailAddressConversionTests: XCTestCase {
func makeDirectInput(direct input: String) -> ComposingText {
ComposingText(
convertTargetCursorPosition: input.count,
input: input.map {.init(character: $0, inputStyle: .direct)},
convertTarget: input
)
}
func testtoEmailAddressCandidates() async throws {
do {
let converter = await KanaKanjiConverter()
let input = makeDirectInput(direct: "azooKey@")
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@icloud.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@yahoo.co.jp"}))
XCTAssertTrue(result.contains(where: {$0.text == "azooKey@i.softbank.jp"}))
}
do {
let converter = await KanaKanjiConverter()
let input = makeDirectInput(direct: "my.dev_az@")
let result = await converter.toEmailAddressCandidates(input)
XCTAssertFalse(result.isEmpty)
XCTAssertTrue(result.contains(where: {$0.text == "my.dev_az@gmail.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "my.dev_az@icloud.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "my.dev_az@yahoo.co.jp"}))
XCTAssertTrue(result.contains(where: {$0.text == "my.dev_az@i.softbank.jp"}))
}
do {
let converter = await KanaKanjiConverter()
let input = makeDirectInput(direct: "@")
let result = await converter.toEmailAddressCandidates(input)
XCTAssertFalse(result.isEmpty)
XCTAssertTrue(result.contains(where: {$0.text == "@gmail.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "@icloud.com"}))
XCTAssertTrue(result.contains(where: {$0.text == "@yahoo.co.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"}))
}
}
}