@testable import PureYAML import Testing /// Verifies the ported reader iterates Unicode scalars with libyaml's mark and /// `SKIP` / `SKIP_LINE` semantics: CR and LF are distinct scalars, a CR+LF pair /// is one line break, and the column is 0-based. @Suite("LibYAML Reader") struct LibYAMLReaderTests { @Test("peek and skip advance the column scalar by scalar") func test_peekAndSkip() { var reader = PureYAML.Parsing.LibYAML.Reader("ab") #expect(reader.peek() == "a") #expect(reader.peek(1) == "b") #expect(reader.peek(2) == nil) reader.skip() #expect(reader.peek() == "b") #expect(reader.column == 1) #expect(reader.line == 0) reader.skip() #expect(reader.isAtEnd) #expect(reader.peek() == nil) } @Test("skipLine starts a new line and resets the column") func test_skipLineLF() { var reader = PureYAML.Parsing.LibYAML.Reader("a\nb") reader.skip() reader.skipLine() #expect(reader.line == 1) #expect(reader.column == 0) #expect(reader.peek() == "b") } @Test("a CR+LF pair is a single line break") func test_skipLineCRLF() { var reader = PureYAML.Parsing.LibYAML.Reader("a\r\nb") reader.skip() // CR and LF are distinct scalars but one break. #expect(reader.peek() == "\r") #expect(reader.peek(1) == "\n") reader.skipLine() #expect(reader.line == 1) #expect(reader.column == 0) #expect(reader.peek() == "b") } }