> -----Original Message-----
> From: Edward Welbourne
> Sent: Wednesday, 3 April 2019 5:07 PM
> To: Mitch Curtis <[email protected]>
> Cc: [email protected]; Joerg Bornemann
> <[email protected]>
> Subject: Re: [Development] Supporting helper functions in auto tests by
> providing throwing Qt Test macros
> 
> On 4/2/19 5:14 PM, Mitch Curtis wrote:
> > >> As described in https://bugreports.qt.io/browse/QTBUG-66320,
> > >> currently Qt users are on their own if they want to call helper
> > >> functions that can fail a test. The reason is documented:
> > >>
> > >>      Note: This macro can only be used in a test function that is
> > >>      invoked by the test framework.
> 
> Edward Welbourne (3 April 2019 12:07 PM)
> > This note is not strictly true.  You can use it in any function that 
> > returns void.
> > However, the *caller* won't return in response to it, which means it
> > doesn't work *fully* in a helper.
> 
> Mitch Curtis (3 April 2019 12:27) replied:
> > It's true enough that we would never recommend users to use it in a
> > helper function, hence the note.
> 
> There is a whole world of difference between "can only be used in" and "is
> not recommended for use outside".  The note is incorrect: if you use these
> macros inside a helper function, they do cause the test system to know the
> test has failed.  They merely don't cause the caller of the helper to return
> prematurely, unless the helper checks for whether they failed.

It doesn't really matter if they've always been documented that way. Users 
should follow the documentation, not the implementation.

> It's probably worth having a macro with which to wrap code, that'll catch any
> exception it raises, add the current location to what'll be output to log the
> failure and then rethrows.  This would give us the extra file/line information
> that your proposed macro gives, compared to a naive throw/catch solution
> (where the failure throws and TestLib's driver system catches, reporting the
> helper but not its caller).

What would the effective difference be from QCHECK_EXCEPTION in the proposed 
patch, in terms of behaviour and output?

> I think the idea of rewriting TestLib (including the existing QFAIL, QCOMPARE,
> QVERIFY and friends) to use exceptions in Qt6 is a good way forward; adding
> some convenience macro for currentTestFailed() checks is probably sufficient
> to make helper functions easier to use until then.

The currentTestFailed() macro is a nice idea, but it's not sufficient if your 
helpers call other functions, because then you have to wrap every call site of 
those functions with the macro.

>       Eddy.
_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to