aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/windows/ut/test_windows.py
blob: 516dfa4bb40b73be2a2198b08546e6d42d9fdec4 (plain) (blame)
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
# coding=utf-8 
 
import errno 
import os 
import pytest 
 
import library.python.strings
import library.python.windows
 
 
def gen_error_access_denied(): 
    if library.python.windows.on_win():
        err = WindowsError() 
        err.errno = errno.EACCES 
        err.strerror = '' 
        err.winerror = library.python.windows.ERRORS['ACCESS_DENIED']
    else: 
        err = OSError() 
        err.errno = errno.EACCES 
        err.strerror = os.strerror(err.errno) 
    err.filename = 'unknown/file' 
    raise err 
 
 
def test_errorfix_buggy(): 
    @library.python.windows.errorfix
    def erroneous_func(): 
        gen_error_access_denied() 
 
    with pytest.raises(OSError) as errinfo: 
        erroneous_func() 
    assert errinfo.value.errno == errno.EACCES 
    assert errinfo.value.filename == 'unknown/file' 
    assert isinstance(errinfo.value.strerror, basestring) 
    assert errinfo.value.strerror 
 
 
def test_errorfix_explicit(): 
    @library.python.windows.errorfix
    def erroneous_func(): 
        if library.python.windows.on_win():
            err = WindowsError() 
            err.winerror = library.python.windows.ERRORS['ACCESS_DENIED']
        else: 
            err = OSError() 
        err.errno = errno.EACCES 
        err.strerror = 'Some error description' 
        err.filename = 'unknown/file' 
        raise err 
 
    with pytest.raises(OSError) as errinfo: 
        erroneous_func() 
    assert errinfo.value.errno == errno.EACCES 
    assert errinfo.value.filename == 'unknown/file' 
    assert errinfo.value.strerror == 'Some error description' 
 
 
def test_errorfix_decoding_cp1251(): 
    @library.python.windows.errorfix
    def erroneous_func(): 
        model_msg = u'Какое-то описание ошибки' 
        if library.python.windows.on_win():
            err = WindowsError() 
            err.strerror = library.python.strings.to_str(model_msg, 'cp1251')
        else: 
            err = OSError() 
            err.strerror = library.python.strings.to_str(model_msg)
        raise err 
 
    with pytest.raises(OSError) as errinfo: 
        erroneous_func() 
    error_msg = errinfo.value.strerror 
    if not isinstance(errinfo.value.strerror, unicode): 
        error_msg = library.python.strings.to_unicode(error_msg)
    assert error_msg == u'Какое-то описание ошибки' 
 
 
def test_diehard(): 
    @library.python.windows.diehard(library.python.windows.ERRORS['ACCESS_DENIED'], tries=5)
    def erroneous_func(errors): 
        try: 
            gen_error_access_denied() 
        except Exception as e: 
            errors.append(e) 
            raise 
 
    raised_errors = [] 
    with pytest.raises(OSError) as errinfo: 
        erroneous_func(raised_errors) 
    assert errinfo.value.errno == errno.EACCES 
    assert any(e.errno == errno.EACCES for e in raised_errors) 
    assert raised_errors and errinfo.value == raised_errors[-1] 
    if library.python.windows.on_win():
        assert len(raised_errors) == 5 
    else: 
        assert len(raised_errors) == 1