32 lines
1.7 KiB
Swift
32 lines
1.7 KiB
Swift
import AppKit
|
|
import Testing
|
|
@testable import Conjure
|
|
|
|
@Test @MainActor func fencedCodeHighlightsTokensWithoutChangingSourceOrApplyingMarkdown() throws {
|
|
_ = NSApplication.shared
|
|
for fence in ["```", "~~~~"] {
|
|
let text = "# Heading 🦊\n\(fence)py\ndef main():\n # comment\n return \"**not bold**\"\n\(fence)\nAfter\n```unknown-language\n# literal\n```"
|
|
let editor = NSTextView()
|
|
editor.string = text
|
|
MarkdownHighlighting.apply(to: editor)
|
|
let storage = try #require(editor.textStorage)
|
|
func attributes(_ token: String) -> [NSAttributedString.Key: Any] {
|
|
storage.attributes(at: (text as NSString).range(of: token).location, effectiveRange: nil)
|
|
}
|
|
let keyword = try #require(attributes("def")[.foregroundColor] as? NSColor)
|
|
let name = try #require(attributes("main")[.foregroundColor] as? NSColor)
|
|
let comment = try #require(attributes("# comment")[.foregroundColor] as? NSColor)
|
|
#expect(keyword != name)
|
|
#expect(comment != keyword)
|
|
#expect((attributes("# comment")[.font] as? NSFont)?.pointSize == 14)
|
|
#expect((attributes("**not bold**")[.font] as? NSFont)?.isFixedPitch == true)
|
|
#expect((attributes("# literal")[.font] as? NSFont)?.pointSize == 14)
|
|
#expect((attributes("After")[.font] as? NSFont)?.isFixedPitch == false)
|
|
#expect(storage.string == text)
|
|
editor.string = "```python\ndef main():\n pass"
|
|
MarkdownHighlighting.apply(to: editor)
|
|
let unfinished = try #require(editor.textStorage)
|
|
#expect(unfinished.attribute(.foregroundColor, at: 10, effectiveRange: nil) as? NSColor == keyword)
|
|
}
|
|
}
|