fix(ipad): ship iPad P0 layout/globe fixes, edit-last-input, drop clipboard commands
Adapt typing/voice surfaces for iPad width and height, add the system globe key and last-input editing flow, harden host-only Rime deployment, and remove clipboard voice commands. Bump build to 61.
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import XCTest
|
||||
@testable import OSGKeyboardShared
|
||||
|
||||
final class EditTransactionStoreTests: XCTestCase {
|
||||
func testHistoryMutationOutboxIsOrderedAndIdempotent() throws {
|
||||
let suite = "EditTransactionStoreTests.\(UUID().uuidString)"
|
||||
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
|
||||
defer { defaults.removePersistentDomain(forName: suite) }
|
||||
let entryID = UUID()
|
||||
let later = HistoryMutation(
|
||||
sequence: 2,
|
||||
action: .update,
|
||||
entryID: entryID,
|
||||
text: "later"
|
||||
)
|
||||
let earlier = HistoryMutation(
|
||||
sequence: 1,
|
||||
action: .update,
|
||||
entryID: entryID,
|
||||
text: "earlier"
|
||||
)
|
||||
|
||||
HistoryMutationOutbox.enqueue(later, defaults: defaults)
|
||||
HistoryMutationOutbox.enqueue(earlier, defaults: defaults)
|
||||
HistoryMutationOutbox.enqueue(earlier, defaults: defaults)
|
||||
XCTAssertEqual(
|
||||
HistoryMutationOutbox.pending(defaults: defaults).map(\.id),
|
||||
[earlier.id, later.id]
|
||||
)
|
||||
|
||||
HistoryMutationOutbox.acknowledge(earlier.id, defaults: defaults)
|
||||
XCTAssertEqual(
|
||||
HistoryMutationOutbox.pending(defaults: defaults).map(\.id),
|
||||
[later.id]
|
||||
)
|
||||
}
|
||||
|
||||
func testPendingTransactionRoundTrip() throws {
|
||||
let suite = "PendingTextEditTransactionTests.\(UUID().uuidString)"
|
||||
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
|
||||
defer { defaults.removePersistentDomain(forName: suite) }
|
||||
let mutation = HistoryMutation(
|
||||
action: .update,
|
||||
entryID: UUID(),
|
||||
expectedRevision: 3,
|
||||
text: "after"
|
||||
)
|
||||
let transaction = PendingTextEditTransaction(
|
||||
deliveryMode: .replace,
|
||||
beforeText: "before",
|
||||
afterText: "after",
|
||||
expectedFieldFingerprint: "field",
|
||||
historyMutation: mutation
|
||||
)
|
||||
PendingTextEditTransactionStore.save(transaction, defaults: defaults)
|
||||
XCTAssertEqual(
|
||||
PendingTextEditTransactionStore.load(defaults: defaults),
|
||||
transaction
|
||||
)
|
||||
PendingTextEditTransactionStore.clear(defaults: defaults)
|
||||
XCTAssertNil(PendingTextEditTransactionStore.load(defaults: defaults))
|
||||
}
|
||||
|
||||
func testHistoryMutationReceiptRoundTrip() throws {
|
||||
let suite = "HistoryMutationReceiptTests.\(UUID().uuidString)"
|
||||
let defaults = try XCTUnwrap(UserDefaults(suiteName: suite))
|
||||
defer { defaults.removePersistentDomain(forName: suite) }
|
||||
let receipt = HistoryMutationReceipt(
|
||||
mutationID: UUID(),
|
||||
entryID: UUID(),
|
||||
revision: 4
|
||||
)
|
||||
HistoryMutationReceiptStore.save(receipt, defaults: defaults)
|
||||
XCTAssertEqual(
|
||||
HistoryMutationReceiptStore.receipt(
|
||||
for: receipt.mutationID,
|
||||
defaults: defaults
|
||||
),
|
||||
receipt
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user