program winprobe; { Прогон WINDOWS-ветки SerialPort.pas на Linux. ★Компиляции мало. Соседняя проверка (-Cn) ловит синтаксис и разрешение имён, но не поведение, а под Windows у обёртки своя логика: перевод нулевого хендла RTL в SER_INVALID_HANDLE и свой ответ SerValid (ядро Windows нулевой хендл не выдаёт никогда, значит ноль там негоден — в отличие от Unix, где это законный дескриптор при закрытом стандартном вводе). Всё это чистая логика поверх заглушки модуля Serial, поэтому её можно и нужно прогнать здесь. } {$MODE Delphi} uses SysUtils, SerialPort; var Passed, Failed: Integer; procedure Check(const Name: string; Cond: Boolean; const Extra: string = ''); begin if Cond then begin Inc(Passed); WriteLn(' ok ', Name); end else begin Inc(Failed); if Extra <> '' then WriteLn(' FAIL ', Name, ' ', Extra) else WriteLn(' FAIL ', Name); end; end; begin Passed := 0; Failed := 0; WriteLn(' -- прогон WINDOWS-ветки SerialPort на заглушке'); // Заглушка Serial.SerOpen всегда отдаёт ноль — то есть «не открылось» по // соглашению RTL под Windows. Обёртка обязана перевести это в свой признак. Check('★отказ RTL (ноль) переводится в SER_INVALID_HANDLE', SerOpen('COM1') = SER_INVALID_HANDLE, IntToStr(SerOpen('COM1'))); Check('★нулевой хендл под Windows негоден', not SerValid(0)); Check('SER_INVALID_HANDLE негоден', not SerValid(SER_INVALID_HANDLE)); Check('обычный хендл годен', SerValid(5)); Check('COM1 остаётся коротким', SerWinDeviceName('COM1') = 'COM1'); Check('COM10 получает префикс', SerWinDeviceName('COM10') = '\\.\COM10'); WriteLn(Format(' -- ветка windows: %d проверок, провалено %d', [Passed + Failed, Failed])); if Failed > 0 then Halt(1); end.