1# Copyright (c) 2011-2019, Manfred Moitzi 2# License: MIT License 3import pytest 4from ezdxf.lldxf.tagger import internal_tag_compiler 5from ezdxf.document import Drawing 6from ezdxf import DXFValueError, decode_base64 7 8 9def test_dxfversion_1(): 10 doc = Drawing.from_tags(internal_tag_compiler(TEST_HEADER)) 11 assert 'AC1009' == doc.dxfversion 12 13 14@pytest.fixture(scope='module') 15def dwg_r12(): 16 return Drawing.new('AC1009') 17 18 19def test_dxfversion_2(dwg_r12): 20 assert 'AC1009' == dwg_r12.dxfversion 21 22 23def test_acad_release(dwg_r12): 24 assert 'R12' == dwg_r12.acad_release 25 26 27def test_get_layer(dwg_r12): 28 layer = dwg_r12.layers.get('0') 29 assert '0' == layer.dxf.name 30 31 32def test_error_getting_not_existing_layer(dwg_r12): 33 with pytest.raises(DXFValueError): 34 layer = dwg_r12.layers.get('TEST_NOT_EXISTING_LAYER') 35 36 37def test_create_layer(dwg_r12): 38 layer = dwg_r12.layers.new('TEST_NEW_LAYER') 39 assert 'TEST_NEW_LAYER' == layer.dxf.name 40 41 42def test_error_adding_existing_layer(dwg_r12): 43 with pytest.raises(DXFValueError): 44 layer = dwg_r12.layers.new('0') 45 46 47def test_has_layer(dwg_r12): 48 assert '0' in dwg_r12.layers 49 50 51def test_has_not_layer(dwg_r12): 52 assert 'TEST_LAYER_NOT_EXISTS' not in dwg_r12.layers 53 54 55def test_removing_layer(dwg_r12): 56 dwg_r12.layers.new('TEST_NEW_LAYER_2') 57 assert 'TEST_NEW_LAYER_2' in dwg_r12.layers 58 dwg_r12.layers.remove('TEST_NEW_LAYER_2') 59 assert 'TEST_NEW_LAYER_2' not in dwg_r12.layers 60 61 62def test_error_removing_not_existing_layer(dwg_r12): 63 with pytest.raises(DXFValueError): 64 dwg_r12.layers.remove('TEST_LAYER_NOT_EXISTS') 65 66 67@pytest.fixture(scope='module') 68def dwg_r2000(): 69 return Drawing.new('AC1015') 70 71 72def test_r2000_dxfversion(dwg_r2000): 73 assert 'AC1015' == dwg_r2000.dxfversion 74 75 76def test_r2000_acad_release(dwg_r2000): 77 assert 'R2000' == dwg_r2000.acad_release 78 79 80@pytest.fixture 81def min_r12(): 82 return Drawing.from_tags(internal_tag_compiler(MINIMALISTIC_DXF12)) 83 84 85def test_min_r12_header_section(min_r12): 86 assert hasattr(min_r12, 'header') 87 assert min_r12.header['$ACADVER'] == 'AC1009' 88 assert min_r12.header['$DWGCODEPAGE'] == 'ANSI_1252' 89 90 91def test_min_r12_layers_table(min_r12): 92 assert hasattr(min_r12, 'layers') 93 assert len(min_r12.layers) == 2 94 assert '0' in min_r12.layers 95 assert 'Defpoints' in min_r12.layers 96 97 98def test_min_r12_styles_table(min_r12): 99 assert hasattr(min_r12, 'styles') 100 assert len(min_r12.styles) == 1 101 assert 'Standard' in min_r12.styles 102 103 104def test_min_r12_linetypes_table(min_r12): 105 assert hasattr(min_r12, 'linetypes') 106 assert len(min_r12.linetypes) == 3 107 assert 'continuous' in min_r12.linetypes 108 assert 'ByLayer' in min_r12.linetypes 109 assert 'ByBlock' in min_r12.linetypes 110 111 112def test_min_r12_blocks_section(min_r12): 113 assert hasattr(min_r12, 'blocks') 114 assert len(min_r12.blocks) == 2 115 assert '*Model_Space' in min_r12.blocks 116 assert '*Paper_Space' in min_r12.blocks 117 118 119def test_min_r12_entity_section(min_r12): 120 assert hasattr(min_r12, 'entities') 121 assert len(min_r12.entities) == 0 122 123 124def test_chain_layout_and_block(dwg_r12, dwg_r2000): 125 for dwg in (dwg_r12, dwg_r2000): 126 msp = dwg.modelspace() 127 line_msp = msp.add_line((0, 0), (1, 1)) 128 blk = dwg.blocks.new('TEST_CHAIN') 129 line_blk = blk.add_line((0, 0), (1, 1)) 130 131 handles = list(e.dxf.handle for e in dwg.chain_layouts_and_blocks()) 132 # check for unique handles 133 assert len(handles) == len(set(handles)) 134 135 check = {line_msp.dxf.handle, line_blk.dxf.handle} 136 assert check.intersection(handles) == check 137 138 139def test_base64_encoding_r12(dwg_r12): 140 data = dwg_r12.encode_base64() 141 doc = decode_base64(data) 142 assert doc.acad_release == 'R12' 143 144 145def test_base64_encoding_r2000(dwg_r2000): 146 data = dwg_r2000.encode_base64() 147 doc = decode_base64(data) 148 assert doc.acad_release == 'R2000' 149 150 151def test_set_drawing_units(dwg_r12): 152 dwg_r12.units = 6 153 assert dwg_r12.header['$INSUNITS'] == 6 154 dwg_r12.units = 5 155 assert dwg_r12.header['$INSUNITS'] == 5 156 157 158MINIMALISTIC_DXF12 = """ 0 159SECTION 160 2 161ENTITIES 162 0 163ENDSEC 164 0 165EOF 166""" 167 168TEST_HEADER = """ 0 169SECTION 170 2 171HEADER 172 9 173$ACADVER 174 1 175AC1009 176 9 177$DWGCODEPAGE 178 3 179ANSI_1252 180 9 181$HANDSEED 182 5 183FF 184 0 185ENDSEC 186 0 187SECTION 188 2 189ENTITIES 190 0 191ENDSEC 192 0 193EOF 194""" 195 196TESTCOPY = """ 0 197SECTION 198 2 199HEADER 200 9 201$ACADVER 202 1 203AC1018 204 9 205$DWGCODEPAGE 206 3 207ANSI_1252 208 9 209$TDUPDATE 210 40 2110. 212 9 213$HANDSEED 214 5 215FF 216 0 217ENDSEC 218 0 219SECTION 220 2 221OBJECTS 222 0 223ENDSEC 224 0 225SECTION 226 2 227FANTASYSECTION 228 1 229everything should be copied 230 0 231ENDSEC 232 0 233SECTION 234 2 235ALPHASECTION 236 1 237everything should be copied 238 0 239ENDSEC 240 0 241SECTION 242 2 243OMEGASECTION 244 1 245everything should be copied 246 0 247ENDSEC 248 0 249EOF 250""" 251