1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
from unittest import TestCase
from tests import fixtures_dir
from tests.fixtures.books.fixtures import books
from xsdata.formats.dataclass.serializers import XmlSerializer
from xsdata.formats.dataclass.serializers.config import SerializerConfig
from xsdata.formats.dataclass.serializers.writers import LxmlEventWriter
class LxmlEventWriterTests(TestCase):
def setUp(self):
config = SerializerConfig(pretty_print=True)
self.serializer = XmlSerializer(config=config, writer=LxmlEventWriter)
def test_render(self):
actual = self.serializer.render(books)
expected = fixtures_dir.joinpath("books/books_auto_ns.xml").read_text()
self.assertEqual(expected, actual)
def test_render_with_provided_namespaces(self):
actual = self.serializer.render(books, {"brk": "urn:books"})
expected = fixtures_dir.joinpath("books/books.xml").read_text()
self.assertEqual(expected, actual)
def test_render_with_default_namespace_prefix(self):
actual = self.serializer.render(books, {None: "urn:books"})
expected = fixtures_dir.joinpath("books/books_default_ns.xml").read_text()
xml_declaration, actual = actual.split("\n", 1)
_, expected = expected.split("\n", 1)
self.assertEqual(expected, actual)
def test_encoding(self):
self.serializer.config.encoding = "US-ASCII"
self.serializer.config.xml_version = "1.1"
actual = self.serializer.render(books)
xml_declaration, _ = actual.split("\n", 1)
self.assertEqual('<?xml version="1.1" encoding="US-ASCII"?>', xml_declaration)
def test_declaration_disabled(self):
self.serializer.config.xml_declaration = False
actual = self.serializer.render(books, {None: "urn:books"})
expected = fixtures_dir.joinpath("books/books_default_ns.xml").read_text()
xml_declaration, expected = expected.split("\n", 1)
self.assertEqual(expected, actual)
def test_pretty_print_false(self):
self.serializer.config.pretty_print = False
actual = self.serializer.render(books)
expected = fixtures_dir.joinpath("books/books_auto_ns.xml").read_text()
_, actual = actual.split("\n", 1)
_, expected = expected.split("\n", 1)
self.assertEqual(expected.replace(" ", "").replace("\n", ""), actual)
def test_pretty_print_indent(self):
self.serializer.config.pretty_print_indent = " "
actual = self.serializer.render(books)
expected = fixtures_dir.joinpath("books/books_auto_ns.xml").read_text()
_, actual = actual.split("\n", 1)
_, expected = expected.split("\n", 1)
self.assertEqual(expected.replace(" ", " "), actual)
|