1# Copyright (c) 2019 Manfred Moitzi
2# License: MIT License
3from typing import cast
4import pytest
5import ezdxf
6from ezdxf.entities.idbuffer import IDBuffer
7from ezdxf.lldxf.tagwriter import TagCollector, basic_tags_from_text
8
9IDBUFFER = """0
10IDBUFFER
115
120
13102
14{ACAD_REACTORS
15330
160
17102
18}
19330
200
21100
22AcDbIdBuffer
23"""
24
25
26@pytest.fixture
27def entity():
28    return IDBuffer.from_text(IDBUFFER)
29
30
31def test_registered():
32    from ezdxf.entities.factory import ENTITY_CLASSES
33    assert 'IDBUFFER' in ENTITY_CLASSES
34
35
36def test_default_init():
37    entity = IDBuffer()
38    assert entity.dxftype() == 'IDBUFFER'
39    assert entity.dxf.handle is None
40    assert entity.dxf.owner is None
41
42
43def test_default_new():
44    entity = IDBuffer.new(handle='ABBA', owner='0', dxfattribs={
45    })
46    assert len(entity.handles) == 0
47
48
49def test_load_from_text(entity):
50    assert len(entity.handles) == 0
51
52
53def test_write_dxf():
54    entity = IDBuffer.from_text(IDBUFFER)
55    result = TagCollector.dxftags(entity)
56    expected = basic_tags_from_text(IDBUFFER)
57    assert result == expected
58
59
60@pytest.fixture(scope='module')
61def doc():
62    return ezdxf.new('R2007')
63
64
65def test_generic_id_buffer(doc):
66    id_buffer = doc.objects.new_entity('IDBUFFER', {})
67    assert id_buffer.dxftype() == 'IDBUFFER'
68    assert len(id_buffer.handles) == 0
69
70
71def test_set_get_id_buffer(doc):
72    id_buffer = doc.objects.new_entity('IDBUFFER', {})
73    assert id_buffer.dxftype() == 'IDBUFFER'
74    id_buffer.handles = ['FF', 'EE', 'DD']
75    handles = id_buffer.handles
76    assert len(handles) == 3
77    assert handles == ['FF', 'EE', 'DD']
78
79    handles.append('FFFF')
80    assert handles[-1] == 'FFFF'
81
82    handles.clear()
83    assert len(handles) == 0
84
85
86def test_dxf_tags(doc):
87    id_buffer = cast(IDBuffer, doc.objects.new_entity('IDBUFFER', {}))
88    id_buffer.handles = ['FF', 'EE', 'DD', 'CC']
89    tags = TagCollector.dxftags(id_buffer)[-4:]
90
91    assert len(tags) == 4
92    assert tags[0] == (330, 'FF')
93    assert tags[-1] == (330, 'CC')
94
95
96def test_clone(doc):
97    id_buffer = cast(IDBuffer, doc.objects.new_entity('IDBUFFER', {}))
98    id_buffer.handles = ['FF', 'EE', 'DD', 'CC']
99    buffer2 = cast(IDBuffer, id_buffer.copy())
100    buffer2.handles[-1] = 'ABCD'
101    assert id_buffer.handles[:-1] == buffer2.handles[:-1]
102    assert id_buffer.handles[-1] != buffer2.handles[-1]
103