50 lines
2.1 KiB
Swift
50 lines
2.1 KiB
Swift
import XCTest
|
|
@testable import SaplingEditor
|
|
|
|
final class EditorPerformanceProfilingTests: XCTestCase {
|
|
func testDocumentProfileRecordsMarkdownStructure() {
|
|
let source = """
|
|
# Title
|
|
|
|
- Item
|
|
1. Step
|
|
> Quote
|
|
Text with **bold**, *italic*, `code`, [ref], and .
|
|
```
|
|
code
|
|
```
|
|
"""
|
|
|
|
let profile = EditorBenchmarkProfiler.documentProfile(fileName: "Sample.md", source: source)
|
|
|
|
XCTAssertEqual(profile.fileName, "Sample.md")
|
|
XCTAssertEqual(profile.headingCount, 1)
|
|
XCTAssertEqual(profile.unorderedListItemCount, 1)
|
|
XCTAssertEqual(profile.orderedListItemCount, 1)
|
|
XCTAssertEqual(profile.blockquoteCount, 1)
|
|
XCTAssertEqual(profile.fencedCodeFenceCount, 2)
|
|
XCTAssertEqual(profile.inlineCodeLineCount, 1)
|
|
XCTAssertEqual(profile.boldLineCount, 1)
|
|
XCTAssertEqual(profile.italicLineCount, 1)
|
|
XCTAssertEqual(profile.inlineLinkCount, 0)
|
|
XCTAssertEqual(profile.referenceLinkLikeCount, 1)
|
|
XCTAssertEqual(profile.imageCount, 1)
|
|
}
|
|
|
|
func testProfilerProducesBenchmarkMeasurements() throws {
|
|
let directory = FileManager.default.temporaryDirectory
|
|
.appendingPathComponent(UUID().uuidString, isDirectory: true)
|
|
try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)
|
|
let url = directory.appendingPathComponent("Benchmark.md")
|
|
try "# Heading\n\nText with **bold** and `code`.\n".write(to: url, atomically: true, encoding: .utf8)
|
|
|
|
let result = try EditorBenchmarkProfiler.profileDocument(at: url)
|
|
|
|
XCTAssertEqual(result.document.lineCount, 4)
|
|
XCTAssertTrue(result.renderedModeTrace.renderedModeWasScheduled)
|
|
XCTAssertTrue(result.measurements.contains { $0.name == "file_read" })
|
|
XCTAssertTrue(result.measurements.contains { $0.name == "document_parse_editor_state_init" })
|
|
XCTAssertTrue(result.measurements.contains { $0.name == "render_plan_generation_all_lines" })
|
|
XCTAssertTrue(result.measurements.contains { $0.name == "dirty_line_invalidation_typing" })
|
|
}
|
|
}
|