# (c) cavaliba.com - tests / yamlutil / literal block strings

import yaml
from django.test import TestCase

from app_data.yamlutil import MyYamlDumper


class TestMyYamlDumperBlock(TestCase):
    def dump(self, data):
        return yaml.dump(data, allow_unicode=True, Dumper=MyYamlDumper, sort_keys=False)

    def test_multiline_uses_literal_block(self):
        out = self.dump([{"description": "line one\nline two\n"}])
        self.assertIn("description: |\n", out)
        self.assertNotIn("\\n", out)

    def test_multiline_without_trailing_newline_uses_strip_block(self):
        out = self.dump([{"description": "line one\nline two"}])
        self.assertIn("description: |-\n", out)

    def test_single_line_unchanged(self):
        out = self.dump([{"keyname": "k1"}])
        self.assertIn("keyname: k1", out)

    def test_nested_multiline_uses_literal_block(self):
        out = self.dump([{"nested": {"text": "a\nb\n"}}])
        self.assertIn("text: |\n", out)

    def test_roundtrip_preserves_exotic_values(self):
        data = [
            {
                "block": "a\nb\n",
                "nonl": "a\nb",
                "trailing_space": "a \nb\n",
                "crlf": "a\r\nb\n",
                "leading_tab": "a\n\tb\n",
                "plain": "hello",
            }
        ]
        self.assertEqual(yaml.safe_load(self.dump(data)), data)

    def test_blank_line_between_top_level_blocks(self):
        out = self.dump([{"a": 1}, {"b": 2}])
        self.assertIn("\n\n", out)
