File: test_open_exotic_dxf_files.py

package info (click to toggle)
ezdxf 1.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 104,528 kB
  • sloc: python: 182,341; makefile: 116; lisp: 20; ansic: 4
file content (133 lines) | stat: -rw-r--r-- 3,709 bytes parent folder | download
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Copyright (c) 2018-2020, Manfred Moitzi
# License: MIT License
import pytest
import ezdxf
from ezdxf import recover
import os

CP936_FILE = os.path.join(
    ezdxf.EZDXF_TEST_FILES, "ChineseChars_cp936_R2004.dxf"
)


@pytest.mark.skipif(
    not os.path.exists(CP936_FILE), reason=f"File {CP936_FILE} not found"
)
def test_read_plain_cp936_chinese():
    doc = ezdxf.readfile(CP936_FILE)
    assert doc.filename is not None
    assert doc.dxfversion is not None


CP936_ZIP_FILE = os.path.join(
    ezdxf.EZDXF_TEST_FILES, "ChineseChars_cp936_R2004.zip"
)


@pytest.mark.skipif(
    not os.path.exists(CP936_ZIP_FILE),
    reason=f"File {CP936_ZIP_FILE} not found",
)
def test_read_from_zip():
    doc = ezdxf.readzip(CP936_ZIP_FILE)
    assert doc.filename is not None
    assert doc.dxfversion is not None


PROE_FILE = os.path.join(ezdxf.EZDXF_TEST_FILES, "ProE_AC1018.dxf")


@pytest.mark.skipif(
    not os.path.exists(PROE_FILE), reason=f'File "{PROE_FILE}" not found'
)
class TestProE:
    @pytest.fixture
    def filename(self):
        return PROE_FILE

    def test_read_ProE_file(self, filename):
        doc = ezdxf.readfile(filename)
        assert doc.filename is not None
        assert doc.dxfversion is not None

    def test_recover_ProE_file(self, filename):
        doc, auditor = recover.readfile(filename)
        assert doc.filename == filename
        assert doc.dxfversion is not None
        assert len(auditor.errors) >= 2
        assert len(auditor.fixes) >= 9


FILE_CIVIL_3D = os.path.join(
    ezdxf.EZDXF_TEST_FILES, "AutodeskProducts/Civil3D_2018.dxf"
)


@pytest.mark.skipif(
    not os.path.exists(FILE_CIVIL_3D),
    reason=f'File "{FILE_CIVIL_3D}" not found',
)
class TestCorruptCivil3D:
    """The test file "AutodeskProducts/Civil3D_2018.dxf" contains binary data
    in XRECORDS and is not valid for TrueView 2020!

    """

    @pytest.fixture
    def filename(self):
        return FILE_CIVIL_3D

    def test_readfile_and_preserve_errors_by_surrogate_escape(self, filename):
        doc = ezdxf.readfile(filename, errors="surrogateescape")
        assert doc.filename == filename
        assert doc.dxfversion == "AC1032"

    def test_readfile_and_ignore_errors(self, filename):
        doc = ezdxf.readfile(filename, errors="ignore")
        assert doc.filename == filename
        assert doc.dxfversion == "AC1032"

    def test_readfile_and_raise_exception(self, filename):
        with pytest.raises(UnicodeDecodeError):
            ezdxf.readfile(filename, errors="strict")

        with pytest.raises(UnicodeDecodeError):
            recover.readfile(filename, errors="strict")

    def test_recover(self, filename):
        doc, auditor = recover.readfile(filename, errors="ignore")
        assert doc.filename == filename
        assert doc.dxfversion == "AC1032"
        assert auditor.has_errors is True
        assert len(auditor.errors) == 238, "expected decoding errors"
        assert len(auditor.fixes) == 536


FILE_MAP_3D = os.path.join(
    ezdxf.EZDXF_TEST_FILES, "AutodeskProducts/Map3D_2017.dxf"
)


@pytest.mark.skipif(
    not os.path.exists(FILE_MAP_3D), reason=f'File "{FILE_MAP_3D}" not found'
)
def test_read_map_3d():
    doc = ezdxf.readfile(FILE_MAP_3D)
    assert doc.filename == FILE_MAP_3D
    assert doc.dxfversion == "AC1027"


GERBER_FILE = os.path.join(ezdxf.EZDXF_TEST_FILES, "Gerber.dxf")


@pytest.mark.skipif(
    not os.path.exists(GERBER_FILE), reason=f'File "{GERBER_FILE}" not found'
)
def test_read_gerber_file():
    from ezdxf.lldxf.validator import is_dxf_file

    assert is_dxf_file(GERBER_FILE)

    doc = ezdxf.readfile(GERBER_FILE)
    assert doc.filename == GERBER_FILE
    assert doc.dxfversion == "AC1009"