/Lib/ctypes/test/test_errno.py

http://unladen-swallow.googlecode.com/ · Python · 76 lines · 56 code · 20 blank · 0 comment · 7 complexity · 6db0aac0ddb46a19d708777dfef8be43 MD5 · raw file

  1. import unittest, os, errno
  2. from ctypes import *
  3. from ctypes.util import find_library
  4. import threading
  5. class Test(unittest.TestCase):
  6. def test_open(self):
  7. libc_name = find_library("c")
  8. if libc_name is not None:
  9. libc = CDLL(libc_name, use_errno=True)
  10. if os.name == "nt":
  11. libc_open = libc._open
  12. else:
  13. libc_open = libc.open
  14. libc_open.argtypes = c_char_p, c_int
  15. self.failUnlessEqual(libc_open("", 0), -1)
  16. self.failUnlessEqual(get_errno(), errno.ENOENT)
  17. self.failUnlessEqual(set_errno(32), errno.ENOENT)
  18. self.failUnlessEqual(get_errno(), 32)
  19. def _worker():
  20. set_errno(0)
  21. libc = CDLL(libc_name, use_errno=False)
  22. if os.name == "nt":
  23. libc_open = libc._open
  24. else:
  25. libc_open = libc.open
  26. libc_open.argtypes = c_char_p, c_int
  27. self.failUnlessEqual(libc_open("", 0), -1)
  28. self.failUnlessEqual(get_errno(), 0)
  29. t = threading.Thread(target=_worker)
  30. t.start()
  31. t.join()
  32. self.failUnlessEqual(get_errno(), 32)
  33. set_errno(0)
  34. if os.name == "nt":
  35. def test_GetLastError(self):
  36. dll = WinDLL("kernel32", use_last_error=True)
  37. GetModuleHandle = dll.GetModuleHandleA
  38. GetModuleHandle.argtypes = [c_wchar_p]
  39. self.failUnlessEqual(0, GetModuleHandle("foo"))
  40. self.failUnlessEqual(get_last_error(), 126)
  41. self.failUnlessEqual(set_last_error(32), 126)
  42. self.failUnlessEqual(get_last_error(), 32)
  43. def _worker():
  44. set_last_error(0)
  45. dll = WinDLL("kernel32", use_last_error=False)
  46. GetModuleHandle = dll.GetModuleHandleW
  47. GetModuleHandle.argtypes = [c_wchar_p]
  48. GetModuleHandle("bar")
  49. self.failUnlessEqual(get_last_error(), 0)
  50. t = threading.Thread(target=_worker)
  51. t.start()
  52. t.join()
  53. self.failUnlessEqual(get_last_error(), 32)
  54. set_last_error(0)
  55. if __name__ == "__main__":
  56. unittest.main()