56 lines
2 KiB
Swift
56 lines
2 KiB
Swift
|
|
import Foundation
|
||
|
|
import SaplingCore
|
||
|
|
import SaplingEditor
|
||
|
|
import XCTest
|
||
|
|
|
||
|
|
@MainActor
|
||
|
|
final class DocumentSessionStoreTests: XCTestCase {
|
||
|
|
func testOpeningSameFileReusesExistingSession() throws {
|
||
|
|
let url = URL(fileURLWithPath: "/tmp/Sapling/Notes.md")
|
||
|
|
var loadCount = 0
|
||
|
|
let store = DocumentSessionStore()
|
||
|
|
|
||
|
|
let first = try store.openDocument(at: url) { url in
|
||
|
|
loadCount += 1
|
||
|
|
return MarkdownDocument(url: url, title: "Notes", content: "# Notes")
|
||
|
|
}
|
||
|
|
|
||
|
|
let second = try store.openDocument(at: url.standardizedFileURL) { url in
|
||
|
|
loadCount += 1
|
||
|
|
return MarkdownDocument(url: url, title: "Notes", content: "# Reloaded")
|
||
|
|
}
|
||
|
|
|
||
|
|
XCTAssertIdentical(first, second)
|
||
|
|
XCTAssertIdentical(store.activeSession, first)
|
||
|
|
XCTAssertEqual(store.sessions.count, 1)
|
||
|
|
XCTAssertEqual(loadCount, 1)
|
||
|
|
XCTAssertEqual(first.viewModel.document.content, "# Notes")
|
||
|
|
}
|
||
|
|
|
||
|
|
func testOpeningDifferentFilesCreatesSeparateSessionsAndActivatesLatest() throws {
|
||
|
|
let firstURL = URL(fileURLWithPath: "/tmp/Sapling/One.md")
|
||
|
|
let secondURL = URL(fileURLWithPath: "/tmp/Sapling/Two.md")
|
||
|
|
let store = DocumentSessionStore()
|
||
|
|
|
||
|
|
let first = try store.openDocument(at: firstURL) { url in
|
||
|
|
MarkdownDocument(url: url, title: "One", content: "# One")
|
||
|
|
}
|
||
|
|
let second = try store.openDocument(at: secondURL) { url in
|
||
|
|
MarkdownDocument(url: url, title: "Two", content: "# Two")
|
||
|
|
}
|
||
|
|
|
||
|
|
XCTAssertEqual(store.sessions.count, 2)
|
||
|
|
XCTAssertIdentical(store.activeSession, second)
|
||
|
|
|
||
|
|
XCTAssertTrue(store.activateDocument(at: firstURL))
|
||
|
|
XCTAssertIdentical(store.activeSession, first)
|
||
|
|
}
|
||
|
|
|
||
|
|
func testActivateMissingDocumentReturnsFalse() {
|
||
|
|
let store = DocumentSessionStore()
|
||
|
|
|
||
|
|
XCTAssertFalse(store.activateDocument(at: URL(fileURLWithPath: "/tmp/missing.md")))
|
||
|
|
XCTAssertNil(store.activeSession)
|
||
|
|
}
|
||
|
|
}
|