1# Created: 25.01.2018 2# Copyright (C) 2018-2019, Manfred Moitzi 3# License: MIT License 4import pytest 5from ezdxf.lldxf.tagger import internal_tag_compiler 6from ezdxf.lldxf.loader import load_dxf_structure 7from ezdxf.lldxf.const import DXFStructureError 8 9 10def test_loader(): 11 sections = load_dxf_structure(internal_tag_compiler(TEST_HEADER)) 12 assert len(sections) == 3 13 header = sections['HEADER'] 14 assert len(header) == 1 # header load_section has always only one entity 15 header_entity = header[0] 16 assert header_entity[0] == (0, 'SECTION') 17 assert header_entity[1] == (2, 'HEADER') 18 assert header_entity[2] == (9, '$ACADVER') 19 assert header_entity[-1] == (3, 'ANSI_1252') 20 21 tables = sections['TABLES'] 22 assert len(tables) == 1 23 tables_header = tables[0] 24 assert tables_header[0] == (0, 'SECTION') 25 assert tables_header[1] == (2, 'TABLES') 26 27 entities = sections['ENTITIES'] 28 assert len(entities) == 1 29 entities_header = entities[0] 30 assert entities_header[0] == (0, 'SECTION') 31 assert entities_header[1] == (2, 'ENTITIES') 32 33 34def test_error_section(): 35 with pytest.raises(DXFStructureError): 36 load_dxf_structure(internal_tag_compiler(SECTION_INVALID_NAME_TAG)) 37 38 with pytest.raises(DXFStructureError): 39 load_dxf_structure(internal_tag_compiler(SECTION_NO_NAME_TAG)) 40 41 42def validator(text): 43 tags = internal_tag_compiler(text) 44 return load_dxf_structure(tags) 45 46 47def test_valid_structure(): 48 sections = validator(" 0\nSECTION\n 2\nHEADER\n 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n 0\nENDSEC\n 0\nEOF\n") 49 assert len(sections) == 2 50 assert len(sections['HEADER']) == 1 # ENDSEC is not present 51 assert len(sections['CLASSES']) == 1 # ENDSEC is not present 52 53 54def test_eof_without_lineending(): 55 sections = validator(" 0\nSECTION\n 2\nHEADER\n 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n 0\nENDSEC\n 0\nEOF") 56 assert len(sections) == 2 57 assert len(sections['HEADER']) == 1 # ENDSEC is not present 58 assert len(sections['CLASSES']) == 1 # ENDSEC is not present 59 60 61def test_missing_eof(): 62 with pytest.raises(DXFStructureError): 63 validator("999\ncomment") 64 65 66def test_missing_endsec(): 67 with pytest.raises(DXFStructureError): 68 validator(" 0\nSECTION\n 2\nHEADER\n 0\nSECTION\n 2\nCLASSES\n 0\nENDSEC\n 0\nEOF\n") 69 70 with pytest.raises(DXFStructureError): 71 validator(" 0\nSECTION\n 2\nHEADER\n 0\nSECTION\n 2\nCLASSES\n 0\nEOF\n") 72 73 74def test_missing_endsec_and_eof(): 75 with pytest.raises(DXFStructureError): 76 validator(" 0\nSECTION\n 2\nHEADER\n 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n") 77 78 79def test_missing_section(): 80 with pytest.raises(DXFStructureError): 81 validator(" 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n 0\nENDSEC\n 0\nEOF\n") 82 83 84TEST_HEADER = """ 0 85SECTION 86 2 87HEADER 88 9 89$ACADVER 90 1 91AC1018 92 9 93$DWGCODEPAGE 94 3 95ANSI_1252 96 0 97ENDSEC 98 0 99SECTION 100 2 101TABLES 102 0 103ENDSEC 104 0 105SECTION 106 2 107ENTITIES 108 0 109ENDSEC 110 0 111EOF 112""" 113 114SECTION_INVALID_NAME_TAG = """ 0 115SECTION 116 3 117HEADER 118 0 119ENDSEC 120""" 121 122SECTION_NO_NAME_TAG = """ 0 123SECTION 124 0 125ENDSEC 126""" 127