92 lines
2.5 KiB
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)
|
|
}
|
|
}
|