[fpc-pascal] FPCUnit test + raise E;
Marcos Douglas
md at delfire.net
Sun Sep 15 03:21:26 CEST 2013
Hi,
1) I have a code like that:
procedure TghSQLConnector.Connect;
begin
try
FLib.Connect;
except
on E: Exception do
DoOnException(E);
end;
end;
https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L1565
2) DoOnException was implemented so:
procedure TghSQLHandler.DoOnException(E: Exception);
begin
if Assigned(FOnException) then
FOnException(Self, E)
else
raise E;
end;
https://github.com/mdbs99/Greyhound/blob/0.1.8/src/ghsql.pas#L443
So, as you see, if occurs a Exception the code checks if the event
(OnException) was setted. If yes, call user implementation; if no,
call raise E;
It works... but not when I uses in FPCUnit tests.
See a simple test (this works):
procedure TghSQLConnectorTest.TestOnException;
begin
// catch
FConn.OnException := @DoOnException;
FConn.Script.Text := 'foo';
FConn.Execute;
end;
https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L246
The code DoOnException is:
procedure TghSQLTest.DoOnException(Sender: TObject; E: Exception);
begin
AssertTrue(Assigned(E));
end;
https://github.com/mdbs99/Greyhound/blob/0.1.8/test/ghsqltest.pas#L141
So, if I change the test like bellow... BUM! SIGSEGV!!
procedure TghSQLConnectorTest.TestOnException;
begin
// removed >>> FConn.OnException := @DoOnException;
FConn.Script.Text := 'foo';
FConn.Execute;
end;
The ERROR is:
[Content]
Project test raised exception class 'External: SIGSEGV'.
At address 40B758
Can you explain this?
Marcos Douglas
More information about the fpc-pascal
mailing list