89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Test the handling of errors.
|
|
|
|
"""
|
|
import pickle
|
|
|
|
from pyvisa import errors
|
|
from pyvisa.testsuite import BaseTestCase
|
|
|
|
|
|
class TestPicleUnpickle(BaseTestCase):
|
|
def _test_pickle_unpickle(self, instance):
|
|
pickled = pickle.dumps(instance)
|
|
unpickled = pickle.loads(pickled)
|
|
assert isinstance(unpickled, type(instance))
|
|
for attr in instance.__dict__:
|
|
assert getattr(instance, attr) == getattr(unpickled, attr)
|
|
|
|
def test_VisaIOError(self):
|
|
self._test_pickle_unpickle(errors.VisaIOError(0))
|
|
|
|
def test_VisaIOWarning(self):
|
|
self._test_pickle_unpickle(errors.VisaIOWarning(0))
|
|
|
|
def test_UnknownHandler(self):
|
|
self._test_pickle_unpickle(errors.UnknownHandler(0, 0, 0))
|
|
|
|
def test_OSNotSupported(self):
|
|
self._test_pickle_unpickle(errors.OSNotSupported(""))
|
|
|
|
def test_InvalidBinaryFormat(self):
|
|
self._test_pickle_unpickle(errors.InvalidBinaryFormat())
|
|
self._test_pickle_unpickle(errors.InvalidBinaryFormat("test"))
|
|
|
|
def test_InvalidSession(self):
|
|
self._test_pickle_unpickle(errors.InvalidSession())
|
|
|
|
|
|
class TestLibraryError(BaseTestCase):
|
|
"""Test the creation of Library errors."""
|
|
|
|
def test_from_exception_not_found(self):
|
|
"""Test handling a missing library file."""
|
|
exc = errors.LibraryError.from_exception(
|
|
ValueError("visa.dll: image not found"), "visa.dll"
|
|
)
|
|
assert "File not found" in str(exc)
|
|
|
|
def test_from_exception_wrong_arch(self):
|
|
"""Test handling a library that report the wrong bitness."""
|
|
exc = errors.LibraryError.from_exception(
|
|
ValueError("visa.dll: no suitable image found. no matching architecture"),
|
|
"visa.dll",
|
|
)
|
|
assert "No matching architecture" in str(exc)
|
|
|
|
def test_from_exception_wrong_filetype(self):
|
|
"""Test handling a library file of the wrong type."""
|
|
exc = errors.LibraryError.from_exception(
|
|
ValueError("visa.dll: no suitable image found."), "visa.dll"
|
|
)
|
|
assert "Could not determine filetype" in str(exc)
|
|
|
|
def test_from_exception_wrong_ELF(self):
|
|
"""Test handling a library file with a wrong ELF."""
|
|
exc = errors.LibraryError.from_exception(
|
|
ValueError("visa.dll: wrong ELF class"), "visa.dll"
|
|
)
|
|
assert "No matching architecture" in str(exc)
|
|
|
|
def test_from_exception_random(self):
|
|
"""Test handling a library for which the error is not a usual one."""
|
|
exc = errors.LibraryError.from_exception(ValueError("visa.dll"), "visa.dll")
|
|
assert "Error while accessing" in str(exc)
|
|
|
|
def test_from_exception_decode_error(self):
|
|
"""Test handling an error that decode to string."""
|
|
|
|
class DummyExc(Exception):
|
|
def __str__(self):
|
|
raise b"\xFF".decode("ascii")
|
|
|
|
exc = errors.LibraryError.from_exception(
|
|
DummyExc("visa.dll: wrong ELF class"), "visa.dll"
|
|
)
|
|
assert "Error while accessing visa.dll." == str(exc)
|
|
|
|
# from_wrong_arch is exercised through the above tests.
|