# Copyright (c) 2010-2020 Manfred Moitzi
# License: MIT License
import pytest
from io import StringIO
from ezdxf.lldxf.tagwriter import TagWriter, TagCollector
from ezdxf.lldxf.types import DXFTag, DXFVertex


def setup_stream():
    stream = StringIO()
    tagwriter = TagWriter(stream)
    return stream, tagwriter


def test_write_tag2():
    s, t = setup_stream()
    t.write_tag2(0, "SECTION")
    result = s.getvalue()
    assert result == "  0\nSECTION\n"


def test_write_tag():
    s, t = setup_stream()
    t.write_tag(DXFTag(0, "SECTION"))
    result = s.getvalue()
    assert result == "  0\nSECTION\n"


def test_write_point_tag():
    s, t = setup_stream()
    t.write_tag(DXFVertex(10, (7.0, 8.0, 9.0)))
    result = s.getvalue()
    assert result == " 10\n7.0\n 20\n8.0\n 30\n9.0\n"


def test_write_str():
    s, t = setup_stream()
    t.write_str(" 10\n7.0\n 20\n8.0\n 30\n9.0\n")
    result = s.getvalue()
    assert result == " 10\n7.0\n 20\n8.0\n 30\n9.0\n"


def test_write_anything():
    s, t = setup_stream()
    t.write_str("... writes just any nonsense ...")
    result = s.getvalue()
    assert result == "... writes just any nonsense ..."


class TestTagCollector:
    @pytest.fixture
    def t(self):
        return TagCollector()

    def test_write_tag2(self, t):
        t.write_tag2(0, "SECTION")
        assert t.tags[0] == (0, "SECTION")

    def test_write_tag(self, t):
        t.write_tag(DXFTag(0, "SECTION"))
        assert t.tags[0] == (0, "SECTION")

    def test_write_point_tag(self, t):
        t.write_tag(DXFVertex(10, (7.0, 8.0, 9.0)))
        assert t.tags[0] == (10, 7.0)
        assert t.tags[1] == (20, 8.0)
        assert t.tags[2] == (30, 9.0)

    def test_write_str(self, t):
        t.write_str(" 10\n7.0\n 20\n8.0\n 30\n9.0\n")
        assert t.tags[0] == (10, 7.0)
        assert t.tags[1] == (20, 8.0)
        assert t.tags[2] == (30, 9.0)
