import AppKit import Testing @testable import Conjure @Test @MainActor func numberedMarkersShareTheBodyTextBaseline() throws { _ = NSApplication.shared let editor = NotesTextView(frame: NSRect(x: 0, y: 0, width: 400, height: 200)) for source in ["1. 1", "123) 123", " 12. 12"] { editor.setMarkdownContents(NSAttributedString(string: source)) MarkdownHighlighting.apply(to: editor) editor.refreshTasks() let layout = try #require(editor.layoutManager) let container = try #require(editor.textContainer) layout.ensureLayout(for: container) let text = editor.string as NSString let marker = text.range(of: "\u{fffc}") let body = NSRange(location: NSMaxRange(marker) + 1, length: text.length - NSMaxRange(marker) - 1) var bottoms: [Int] = [] for range in [marker, body] { let bitmap = try #require(NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: 400, pixelsHigh: 80, bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: .deviceRGB, bytesPerRow: 0, bitsPerPixel: 0)) let bitmapContext = try #require(NSGraphicsContext(bitmapImageRep: bitmap)) bitmapContext.cgContext.translateBy(x: 0, y: 80) bitmapContext.cgContext.scaleBy(x: 1, y: -1) let context = NSGraphicsContext(cgContext: bitmapContext.cgContext, flipped: true) NSGraphicsContext.saveGraphicsState() NSGraphicsContext.current = context context.cgContext.clear(CGRect(x: 0, y: 0, width: 400, height: 80)) layout.drawGlyphs(forGlyphRange: layout.glyphRange(forCharacterRange: range, actualCharacterRange: nil), at: .zero) NSGraphicsContext.restoreGraphicsState() var bottom = -1 for y in 0..<80 { for x in 0..<400 where (bitmap.colorAt(x: x, y: y)?.alphaComponent ?? 0) > 0.2 { bottom = y } } try #require(bottom >= 0) bottoms.append(bottom) } #expect(abs(bottoms[0] - bottoms[1]) <= 1, "Marker/body ink baseline for \(source)") } }