mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-16 14:41:37 +00:00
* fix(ios): preserve prefixed share text * fix(ios): harden shared text normalization --------- Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
92 lines
3.3 KiB
Swift
92 lines
3.3 KiB
Swift
import Foundation
|
|
import OpenClawKit
|
|
import Testing
|
|
|
|
struct ShareDraftComposerTests {
|
|
@Test(arguments: [
|
|
"sHaReD fRoM iOs.",
|
|
"tExT:",
|
|
"sHaReD aTtAcHmEnT(s):",
|
|
"pLeAsE hElP mE wItH tHiS.",
|
|
])
|
|
func `removes exact legacy scaffold lines case insensitively`(_ marker: String) {
|
|
let payload = SharedContentPayload(title: nil, url: nil, text: marker)
|
|
#expect(ShareDraftComposer.compose(from: payload).isEmpty)
|
|
}
|
|
|
|
@Test(arguments: [
|
|
"Shared from iOS.",
|
|
"Text:",
|
|
"Shared attachment(s):",
|
|
"Please help me with this.",
|
|
])
|
|
func `preserves content that starts with a legacy scaffold marker`(_ marker: String) {
|
|
let text = "\(marker) legitimate content"
|
|
let payload = SharedContentPayload(title: nil, url: nil, text: text)
|
|
#expect(ShareDraftComposer.compose(from: payload) == text)
|
|
}
|
|
|
|
@Test func `removes only exact scaffold lines from multiline content`() {
|
|
let payload = SharedContentPayload(
|
|
title: nil,
|
|
url: nil,
|
|
text: "Text: keep this\nShared from iOS.\nsecond line")
|
|
|
|
#expect(ShareDraftComposer.compose(from: payload) == "Text: keep this\nsecond line")
|
|
}
|
|
|
|
@Test func `composes sanitized title text and URL into the final draft`() throws {
|
|
let url = try #require(URL(string: "https://example.com/article"))
|
|
let payload = SharedContentPayload(
|
|
title: "Text: title",
|
|
url: url,
|
|
text: "Shared attachment(s):\nText: body")
|
|
|
|
#expect(ShareDraftComposer.compose(from: payload) ==
|
|
"Text: title\n\nText: body\n\nhttps://example.com/article")
|
|
}
|
|
|
|
@Test func `omits nil and blank fragments`() {
|
|
let payload = SharedContentPayload(title: nil, url: nil, text: " \n")
|
|
#expect(ShareDraftComposer.compose(from: payload).isEmpty)
|
|
}
|
|
|
|
@Test(arguments: [
|
|
"Text: the quick brown fox",
|
|
"tExT:",
|
|
"mailto:hello@example.com",
|
|
"https:",
|
|
])
|
|
func `does not reinterpret ordinary shared text as a web URL`(_ text: String) {
|
|
#expect(SharePayloadNormalizer.webURL(from: text) == nil)
|
|
}
|
|
|
|
@Test(arguments: [
|
|
"https://example.com/article",
|
|
" HTTP://example.com/path ",
|
|
])
|
|
func `accepts web URLs supplied as plain text`(_ text: String) {
|
|
#expect(SharePayloadNormalizer.webURL(from: text) != nil)
|
|
}
|
|
|
|
@Test func `deduplicates attributed content that mirrors provider text or URL`() throws {
|
|
let url = try #require(URL(string: "https://example.com/article"))
|
|
#expect(SharePayloadNormalizer.distinctAttributedText(
|
|
" Text: the quick brown fox ",
|
|
sharedText: "Text: the quick brown fox",
|
|
sharedURL: nil) == nil)
|
|
#expect(SharePayloadNormalizer.distinctAttributedText(
|
|
"https://example.com/article",
|
|
sharedText: nil,
|
|
sharedURL: url) == nil)
|
|
}
|
|
|
|
@Test func `preserves attributed content that differs from provider data`() throws {
|
|
let url = try #require(URL(string: "https://example.com/article"))
|
|
#expect(SharePayloadNormalizer.distinctAttributedText(
|
|
"Article summary",
|
|
sharedText: "Article body",
|
|
sharedURL: url) == "Article summary")
|
|
}
|
|
}
|