ai-content-maker/.venv/Lib/site-packages/srsly/tests/ruamel_yaml/test_string.py

230 lines
5.5 KiB
Python
Raw Permalink Normal View History

2024-05-03 04:18:51 +03:00
# coding: utf-8
from __future__ import print_function
"""
various test cases for string scalars in YAML files
'|' for preserved newlines
'>' for folded (newlines become spaces)
and the chomping modifiers:
'-' for stripping: final line break and any trailing empty lines are excluded
'+' for keeping: final line break and empty lines are preserved
'' for clipping: final line break preserved, empty lines at end not
included in content (no modifier)
"""
import pytest
import platform
# from srsly.ruamel_yaml.compat import ordereddict
from .roundtrip import round_trip, dedent, round_trip_load, round_trip_dump # NOQA
class TestLiteralScalarString:
def test_basic_string(self):
round_trip(
"""
a: abcdefg
"""
)
def test_quoted_integer_string(self):
round_trip(
"""
a: '12345'
"""
)
@pytest.mark.skipif(
platform.python_implementation() == "Jython",
reason="Jython throws RepresenterError",
)
def test_preserve_string(self):
inp = """
a: |
abc
def
"""
round_trip(inp, intermediate=dict(a="abc\ndef\n"))
@pytest.mark.skipif(
platform.python_implementation() == "Jython",
reason="Jython throws RepresenterError",
)
def test_preserve_string_strip(self):
s = """
a: |-
abc
def
"""
round_trip(s, intermediate=dict(a="abc\ndef"))
@pytest.mark.skipif(
platform.python_implementation() == "Jython",
reason="Jython throws RepresenterError",
)
def test_preserve_string_keep(self):
# with pytest.raises(AssertionError) as excinfo:
inp = """
a: |+
ghi
jkl
b: x
"""
round_trip(inp, intermediate=dict(a="ghi\njkl\n\n\n", b="x"))
@pytest.mark.skipif(
platform.python_implementation() == "Jython",
reason="Jython throws RepresenterError",
)
def test_preserve_string_keep_at_end(self):
# at EOF you have to specify the ... to get proper "closure"
# of the multiline scalar
inp = """
a: |+
ghi
jkl
...
"""
round_trip(inp, intermediate=dict(a="ghi\njkl\n\n"))
def test_fold_string(self):
inp = """
a: >
abc
def
"""
round_trip(inp)
def test_fold_string_strip(self):
inp = """
a: >-
abc
def
"""
round_trip(inp)
def test_fold_string_keep(self):
with pytest.raises(AssertionError) as excinfo: # NOQA
inp = """
a: >+
abc
def
"""
round_trip(inp, intermediate=dict(a="abc def\n\n"))
class TestQuotedScalarString:
def test_single_quoted_string(self):
inp = """
a: 'abc'
"""
round_trip(inp, preserve_quotes=True)
def test_double_quoted_string(self):
inp = """
a: "abc"
"""
round_trip(inp, preserve_quotes=True)
def test_non_preserved_double_quoted_string(self):
inp = """
a: "abc"
"""
exp = """
a: abc
"""
round_trip(inp, outp=exp)
class TestReplace:
"""inspired by issue 110 from sandres23"""
def test_replace_preserved_scalar_string(self):
import srsly
s = dedent(
"""\
foo: |
foo
foo
bar
foo
"""
)
data = round_trip_load(s, preserve_quotes=True)
so = data["foo"].replace("foo", "bar", 2)
assert isinstance(so, srsly.ruamel_yaml.scalarstring.LiteralScalarString)
assert so == dedent(
"""
bar
bar
bar
foo
"""
)
def test_replace_double_quoted_scalar_string(self):
import srsly
s = dedent(
"""\
foo: "foo foo bar foo"
"""
)
data = round_trip_load(s, preserve_quotes=True)
so = data["foo"].replace("foo", "bar", 2)
assert isinstance(so, srsly.ruamel_yaml.scalarstring.DoubleQuotedScalarString)
assert so == "bar bar bar foo"
class TestWalkTree:
def test_basic(self):
from srsly.ruamel_yaml.comments import CommentedMap
from srsly.ruamel_yaml.scalarstring import walk_tree
data = CommentedMap()
data[1] = "a"
data[2] = "with\nnewline\n"
walk_tree(data)
exp = """\
1: a
2: |
with
newline
"""
assert round_trip_dump(data) == dedent(exp)
def test_map(self):
from srsly.ruamel_yaml.compat import ordereddict
from srsly.ruamel_yaml.comments import CommentedMap
from srsly.ruamel_yaml.scalarstring import walk_tree, preserve_literal
from srsly.ruamel_yaml.scalarstring import DoubleQuotedScalarString as dq
from srsly.ruamel_yaml.scalarstring import SingleQuotedScalarString as sq
data = CommentedMap()
data[1] = "a"
data[2] = "with\nnew : line\n"
data[3] = "${abc}"
data[4] = "almost:mapping"
m = ordereddict([("\n", preserve_literal), ("${", sq), (":", dq)])
walk_tree(data, map=m)
exp = """\
1: a
2: |
with
new : line
3: '${abc}'
4: "almost:mapping"
"""
assert round_trip_dump(data) == dedent(exp)