import Foundation import OrgCore import Testing @testable import OrgPresentation struct StartupDisplayTests { @Test func settingsApplyWithoutStartupWords() { let tree = OrgParser.parse("* A\n:LOGBOOK:\nx\n:END:\n#+begin_src sh\necho\n#+end_src\n") var options = EditingOptions.org options.startupIndented = false options.hideLeadingStars = true options.startupWithInlineImages = true options.startupAlignAllTables = true options.startupTruncated = true options.hideBlockStartup = true let display = Presentation.startupDisplay(tree, options: options) #expect(!display.indented) #expect(display.hideStars) #expect(display.inlineImages) #expect(display.alignTables) #expect(display.truncated) #expect(display.wrappers.map(\.kind) == [.drawer, .block]) #expect(display.folds.wrapperFolds == Set(display.wrappers.map(\.start))) } @Test func startupWordsOverrideSettings() { let tree = OrgParser.parse("#+STARTUP: noindent showstars noinlineimages noalign nohidedrawers overview\n* A\n:LOGBOOK:\nx\n:END:\n** B\n") var options = EditingOptions.org options.hideLeadingStars = true options.startupWithInlineImages = true options.startupAlignAllTables = true let display = Presentation.startupDisplay(tree, options: options) #expect(!display.indented) #expect(!display.hideStars) #expect(!display.inlineImages) #expect(!display.alignTables) #expect(display.wrappers.isEmpty) #expect(display.folds.folds == [tree.text.utf16.count - "* A\n:LOGBOOK:\nx\n:END:\n** B\n".utf16.count]) } @Test func startupWordsTurnSettingsOn() { let tree = OrgParser.parse("#+STARTUP: indent hidestars inlineimages align hideblocks\n#+begin_quote\nq\n#+end_quote\n") var options = EditingOptions.org options.startupIndented = false let display = Presentation.startupDisplay(tree, options: options) #expect(display.indented) #expect(display.hideStars) #expect(display.inlineImages) #expect(display.alignTables) #expect(display.wrappers.map(\.kind) == [.block]) } @Test func visibilityPropertiesOnlyWithAStartupVisibility() { let text = "* A\n:PROPERTIES:\n:VISIBILITY: folded\n:END:\nbody\n" #expect(Presentation.startupDisplay(OrgParser.parse(text), options: .org).folds.folds.isEmpty) #expect(Presentation.startupDisplay(OrgParser.parse("#+STARTUP: showall\n" + text), options: .org).folds.folds.count == 1) } } struct HiddenMarkupTests { @Test func linkMarkupAlwaysEmphasisMarkersBySetting() { var options = EditingOptions.org #expect(Presentation.hidesWithMarkup(.linkMarkup, options: options)) #expect(!Presentation.hidesWithMarkup(.markup, options: options)) options.hideEmphasisMarkers = true #expect(Presentation.hidesWithMarkup(.markup, options: options)) #expect(!Presentation.hidesWithMarkup(.bold, options: options)) } @Test func leadingStarsShowUnlessIndentedOrHidden() { #expect(Presentation.skipsLeadingStars(.leadingStars, indented: false, hideStars: false)) #expect(!Presentation.skipsLeadingStars(.leadingStars, indented: true, hideStars: false)) #expect(!Presentation.skipsLeadingStars(.leadingStars, indented: false, hideStars: true)) #expect(!Presentation.skipsLeadingStars(.heading(level: 1), indented: false, hideStars: false)) } @Test func prettyRunsSkipTheRevealedLineCommentsAndBlocks() { let text = "\\alpha one\n# \\beta\n\\gamma\nx_{1}\n" as NSString let lines = [0, 11, 19, 26] let all = Presentation.prettyRuns(text, in: 0..