PureYAML/Tests/DumperTests.swift

92 lines
2.5 KiB
Swift

@testable import PureYAML
import Testing
@Suite("Dumper")
struct DumperTests {
@Test("Dumps scalar mapping values")
func dumpsScalarMappingValues() {
let value = PureYAML.Model.Value.mapping(.init([
.init(key: "missing", value: .null),
.init(key: "enabled", value: .bool(true)),
.init(key: "retries", value: .int(3)),
.init(key: "ratio", value: .double(3.1)),
.init(key: "title", value: .string("Example")),
]))
#expect(PureYAML.dump(value) == """
missing: null
enabled: true
retries: 3
ratio: 3.1
title: "Example"
""")
}
@Test("Escapes scalar strings and mapping keys")
func escapesScalarStringsAndMappingKeys() {
let value = PureYAML.Model.Value.mapping(.init([
.init(key: "a:b", value: .string("quote \" slash \\ tab\t")),
.init(key: "hash#key", value: .string("line\nnext")),
]))
#expect(PureYAML.dump(value) == """
"a:b": "quote \\" slash \\\\ tab\\t"
"hash#key": "line\\nnext"
""")
}
@Test("Dumps nested sequences and mappings")
func dumpsNestedSequencesAndMappings() {
let value = PureYAML.Model.Value.mapping(.init([
.init(key: "servers", value: .sequence([
.mapping(.init([
.init(key: "url", value: .string("/")),
.init(key: "description", value: .string("Default")),
])),
])),
]))
#expect(PureYAML.dump(value) == """
servers:
-
url: "/"
description: "Default"
""")
}
@Test("Dumps top-level sequences")
func dumpsTopLevelSequences() {
let value = PureYAML.Model.Value.sequence([
.string("one"),
.int(2),
.bool(false),
])
#expect(PureYAML.dump(value) == """
- "one"
- 2
- false
""")
}
@Test("Dumps round-trippable YAML")
func dumpsRoundTrippableYaml() throws {
let original = PureYAML.Model.Value.mapping(.init([
.init(key: "paths", value: .mapping(.init([
.init(key: "/users", value: .mapping(.init([
.init(key: "tags", value: .sequence([
.string("Users"),
.string("Public"),
])),
]))),
]))),
]))
#expect(try PureYAML.parse(PureYAML.dump(original)) == original)
}
}