with GNATCOLL.OS.Process; use GNATCOLL.OS.Process;
with GNATCOLL.OS;
with Test_Assert;
with Test_Python;
with Ada.Exceptions;
with GNAT.IO;
with GNAT.Task_Lock;
with GNATCOLL.OS.FS;
function Test return Integer is
package A renames Test_Assert;
package IO renames GNAT.IO;
package OS renames GNATCOLL.OS;
task User_Task is
entry Start_Task;
entry End_Task;
end User_Task;
task body User_Task is
begin
accept Start_Task do
IO.Put_Line ("Task starts");
end Start_Task;
GNAT.Task_Lock.Lock;
GNAT.Task_Lock.Unlock;
accept End_Task do
IO.Put_Line ("Task ends");
end End_Task;
end User_Task;
begin
IO.Put_Line
("Check that GNATCOLL.OS.Process release runtime lock in case of error");
declare
Args : Argument_List;
Status : Integer;
begin
Args.Append (Test_Python.Python_Executable);
Args.Append ("--version");
begin
Status := Run (Args, Stdin => OS.FS.Invalid_FD);
A.Assert
(False, "process should not run (got status:" & Status'Img & ")");
exception
when E : OS.OS_Error =>
A.Assert
(True,
"got expected exception OS_Error: " &
Ada.Exceptions.Exception_Message (E));
end;
Args.Clear;
Args.Append (Test_Python.Python_Executable & "-non-existant");
Args.Append ("--version");
begin
Status := Run (Args);
-- On some system we may just get a return status of 127
A.Assert
(Status, 127,
"process should not run (got status:" & Status'Img & ")");
exception
when E : OS.OS_Error =>
A.Assert
(True,
"got expected exception OS_Error: " &
Ada.Exceptions.Exception_Message (E));
end;
Args.Clear;
IO.Put_Line ("Check that GNAT lock can be acquired from another task");
User_Task.Start_Task;
User_Task.End_Task;
A.Assert (True, "lock acquired and released");
end;
return A.Report;
end Test;