[fpc-pascal] Re: FPCUnit test + raise E;

Marcos Douglas md at delfire.net
Sun Sep 15 04:54:22 CEST 2013


On Sat, Sep 14, 2013 at 10:21 PM, Marcos Douglas <md at delfire.net> wrote:
> 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?

I forgot. I'm using Lazarus 1.1 r42461 FPC 2.6.2 i386-win32-win32/win64
I want to know if there is a problem in FPCUnit to catch some
exceptions. That's all.

Marcos Douglas



More information about the fpc-pascal mailing list