| # REQUIRES: python, system-windows | |
| # RUN: %python %s lldb-dap > %t.out 2>&1 | |
| # RUN: FileCheck %s --check-prefix=ERROR --allow-empty < %t.out | |
| # ERROR-NOT: DAP session error: | |
| # Test that we can successfully start the dap server from the console on Windows. | |
| import sys | |
| import subprocess | |
| import os | |
| lldb_dap_path = sys.argv[1] | |
| if lldb_dap_path.startswith('%'): | |
| lldb_dap_path = lldb_dap_path[1:] | |
| lldb_dap_path = os.path.normpath(lldb_dap_path) | |
| import ctypes | |
| from ctypes import wintypes | |
| import msvcrt | |
| GENERIC_READ = 0x80000000 | |
| GENERIC_WRITE = 0x40000000 | |
| OPEN_EXISTING = 3 | |
| FILE_SHARE_READ = 0x00000001 | |
| FILE_SHARE_WRITE = 0x00000002 | |
| kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) | |
| conin_handle = kernel32.CreateFileW( | |
| "CONIN$", | |
| GENERIC_READ | GENERIC_WRITE, | |
| FILE_SHARE_READ | FILE_SHARE_WRITE, | |
| None, | |
| OPEN_EXISTING, | |
| 0, | |
| None | |
| ) | |
| if conin_handle == -1: | |
| print("Failed to open CONIN$", file=sys.stderr) | |
| sys.exit(1) | |
| conin_fd = msvcrt.open_osfhandle(conin_handle, os.O_RDONLY) | |
| proc = subprocess.Popen( | |
| [lldb_dap_path], | |
| stdin=conin_fd, | |
| stdout=subprocess.PIPE, | |
| stderr=subprocess.STDOUT | |
| ) | |
| os.close(conin_fd) | |
| try: | |
| output, _ = proc.communicate(timeout=2) | |
| except subprocess.TimeoutExpired: | |
| proc.kill() | |
| output, _ = proc.communicate() | |
| sys.stdout.buffer.write(output) | |
| sys.stdout.flush() |