summaryrefslogtreecommitdiff
path: root/tests/unit/test_io.py
blob: a4479c860378d0acbdffc4e74dfd652d8057b282 (plain)
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
import sys
from unittest.mock import patch

import pytest

from isort import io


class TestFile:
    @pytest.mark.skipif(sys.platform == "win32", reason="Can't run file encoding test in AppVeyor")
    def test_read(self, tmpdir):
        test_file_content = """# -*- encoding: ascii -*-

import Ὡ
"""
        test_file = tmpdir.join("file.py")
        test_file.write(test_file_content)
        with pytest.raises(Exception):
            with io.File.read(str(test_file)) as file_handler:
                file_handler.stream.read()

    def test_from_content(self, tmpdir):
        test_file = tmpdir.join("file.py")
        test_file.write_text("import os", "utf8")
        file_obj = io.File.from_contents("import os", filename=str(test_file))
        assert file_obj
        assert file_obj.extension == "py"

    def test_open(self, tmpdir):
        with pytest.raises(Exception):
            io.File._open("THISCANTBEAREALFILEὩὩὩὩὩὩὩὩὩὩὩὩ.ὩὩὩὩὩ")

        def raise_arbitrary_exception(*args, **kwargs):
            raise RuntimeError("test")

        test_file = tmpdir.join("file.py")
        test_file.write("import os")
        assert io.File._open(str(test_file))

        # correctly responds to error determining encoding
        with patch("tokenize.detect_encoding", raise_arbitrary_exception):
            with pytest.raises(Exception):
                io.File._open(str(test_file))