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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
# Copyright (c) 2021, Manfred Moitzi
# License: MIT License
import pytest
from ezdxf.addons.drawing.gfxproxy import DXFGraphicProxy
from ezdxf.entities import DXFObject, factory
from ezdxf.lldxf.extendedtags import ExtendedTags
from ezdxf.protocols import SupportsVirtualEntities, query_virtual_entities
from ezdxf.entities.copy import CopyNotSupported
class FakeObject(DXFObject):
# does not support any graphical DXF attributes like layer, linetype ...
DXFTYPE = "FAKE_OBJECT"
ENTITIES = [0, 2, 3]
class VirtualEntitiesMethod(DXFObject):
def virtual_entities(self):
return ENTITIES
class VirtualEntitiesProtocol(DXFObject):
def __virtual_entities__(self):
return ENTITIES
class TestDXFGraphicProxy:
@pytest.fixture
def proxy(self):
return DXFGraphicProxy(FakeObject())
def test_dxf_type(self, proxy):
assert proxy.dxftype() == "FAKE_OBJECT"
def test_get_dxfattribs(self, proxy):
assert proxy.dxf.layer == "0", "expected default layer"
def test_setting_dxfattribs_does_no_alter_wrapped_entity(self, proxy):
proxy.dxf.layer = "TEST"
assert proxy.dxf.layer == "TEST", "expected layer changed"
assert (
proxy.entity.dxf.hasattr("layer") is False
), "wrapped object does not support 'layer'"
def test_copy_raises_cpy_not_supported_exception(self, proxy):
with pytest.raises(CopyNotSupported):
proxy.copy()
def test_supports_virtual_entities_protocol(self, proxy):
assert isinstance(proxy, SupportsVirtualEntities)
assert len(query_virtual_entities(proxy)) == 0
def test_supports_virtual_entities_method_of_wrapped_entity(self):
proxy = DXFGraphicProxy(VirtualEntitiesMethod())
assert list(query_virtual_entities(proxy)) == ENTITIES
def test_supports_virtual_entities_protocol_of_wrapped_entity(self):
proxy = DXFGraphicProxy(VirtualEntitiesProtocol())
assert list(query_virtual_entities(proxy)) == ENTITIES
def test_support_for_proxy_graphic_stored_in_acdb_entity():
tag_storage = factory.load(ExtendedTags.from_text(DXF_STORAGE))
assert tag_storage.dxftype() == "TAG_STORAGE"
proxy = DXFGraphicProxy(tag_storage)
# reusing data from test suite 252
types = [e.dxftype() for e in query_virtual_entities(proxy)]
assert types == [
"POLYLINE",
"POLYLINE",
"ARC",
"ARC",
"POLYLINE",
"POLYLINE",
]
DXF_STORAGE = """0
TAG_STORAGE
5
FEFE
100
AcDbEntity
8
0
160
728
310
D80200000D0000000C00000010000000050000000C0000000E000000000100000C00000012000000FF7F0000100000002200000000000000000000000C00000010000000050000000C00000012000000000000000C0000000E000000010000006C00000007000000040000008705D40EB308C2404F852AD01EBFC340000000
310
0000000000188DCA03B308C240BF872AD01EA6C34000000000000000003988CA03B33AC240E19617BA1EA6C3400000000000000000A800D40EB33AC240719417BA1EBFC34000000000000000006C000000070000000400000043041686B408C2407A322AD01E11C7400000000000000000B27C1F91B408C2400A302AD01E2A
310
C7400000000000000000D3771F91B43AC2402C3F17BA1E2AC740000000000000000064FF1586B43AC2409C4117BA1E11C74000000000000000006400000004000000A800D40EB33AC240719417BA1EBFC34000000000000000000000000000908A4000000000000000000000000000000000010000000000F0BFD0A43C4F34
310
41DC3EADE1FCFFFFFFEF3F0000000000000000182D4454FB21F93F00000000640000000400000064FF1586B43AC2409C4117BA1E11C74000000000000000000000000000908A4000000000000000000000000000000000010000000000F03FD0A43C4F3441DCBEADE1FCFFFFFFEFBF0000000000000000182D4454FB21F93F
310
000000006C0000000700000004000000A800D40EB33AC240719417BA1EBFC3400000000000000000A36A8A18B33AC2404D9217BA1ED5C340000000000000000038418A18B3E3C340EE9276FE1DD5C34000000000000000003DD7D30EB3E3C340139576FE1DBFC34000000000000000006C000000070000000400000064FF15
310
86B43AC2409C4117BA1E11C740000000000000000069955F7CB43AC240C14317BA1EFBC6400000000000000000FE6B5F7CB4E3C340634476FE1DFBC6400000000000000000F9D51586B4E3C3403E4276FE1D11C7400000000000000000
100
AcDbTagStorage
"""
if __name__ == "__main__":
pytest.main([__file__])
|