[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