Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

40 lines
1.2KB

  1. """
  2. Test utilities for error checking
  3. """
  4. from contextlib import contextmanager
  5. from typing import Iterator
  6. import subprocess
  7. from pathlib import Path
  8. import tempfile
  9. import os
  10. @contextmanager
  11. def expect_error_marker(expect: str) -> Iterator[None]:
  12. """
  13. A context-manager function that should wrap a scope that causes an error
  14. from ``dds``.
  15. :param expect: The error message ID string that is expected to appear.
  16. The wrapped scope should raise :class:`subprocess.CalledProcessError`.
  17. After handling the exception, asserts that the subprocess wrote an
  18. error marker containing the string given in ``expect``.
  19. """
  20. tdir = Path(tempfile.mkdtemp())
  21. err_file = tdir / 'error'
  22. try:
  23. os.environ['DDS_WRITE_ERROR_MARKER'] = str(err_file)
  24. yield
  25. assert False, 'dds subprocess did not raise CallProcessError'
  26. except subprocess.CalledProcessError:
  27. assert err_file.exists(), \
  28. f'No error marker file was generated, but dds exited with an error (Expected "{expect}")'
  29. marker = err_file.read_text().strip()
  30. assert marker == expect, \
  31. f'dds did not produce the expected error (Expected {expect}, got {marker})'
  32. finally:
  33. os.environ.pop('DDS_WRITE_ERROR_MARKER')