On Wed, 25 Oct 2006, Federico Mena Quintero wrote:

> On Wed, 2006-10-25 at 17:52 +0200, Tim Janik wrote:

>> - GLib based test programs should never produce a "CRITICAL **:" or
>>    "WARNING **:" message and succeed.
>
> Definitely.  I have some simple code in autotestfilechooser.c to catch
> this and fail the tests if we get warnings/criticals.

oh? hm, looking at the code, it doesn't seem to be significantly superior 
to --g-fatal-warnings:
       fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
       fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
       g_log_set_always_fatal (fatal_mask);
or am i missing something?
note that the error counting in your code doesn't funciton beyond 1, because
g_log always treats errors as FATAL, that behaviour is not configurable.

>> 5- simple helper macros to indicate test start/progress/assertions/end.
>>     (we've at least found these useful to have in Beast.)
>
> For the file chooser tests, I just return a boolean from the test
> functions, which obviously indicates if the test passed or not.  What
> sort of macros are you envisioning?

just a very few and simple ones that are used to beautify progress 
indication, e.g.:

TSTART(printfargs)      - print info about the test being run
TOK()                   - print progress hyphen unconditionally: '-'
TASSERT(cond)           - print progress hyphen if cond==TRUE, abort otherwise
TCHECK(cond)            - like TASSERT() but skip hyphen printing
TDONE()                 - finish test info / progress bar

for simple tests, i just use TSTART/TASSERT/TDONE, but for tests that explore
a wide range of numbers in a loop, a combination of TCHECK/TOK works better
to avoid excess progress indication. e.g.:

   TSTART ("unichar isalnum");
   TASSERT (g_unichar_isalnum ('A') == TRUE);   // prints hypen: '-'
   TASSERT (g_unichar_isalnum ('?') == FALSE);  // prints hypen: '-'
   for (uint i = 0; i < 1000000; i++)
     {
       gunichar uc = rand() % (0x100 << (i % 24));
       if (i % 20000 == 0)
         TOK();                                 // prints hypen: '-'
       gboolean bb = Unichar::isalnum (uc);
       gboolean gb = g_unichar_isalnum (uc);
       TCHECK (bb == gb);                       // silent assertion
     }
   TDONE();

produces:

unichar isalnum: [----------------------------------------------------]

if any of the checks fail, all of __FILE__, __LINE__, __PRETTY_FUNCTION__
and cond are printed of course, e.g.:
** ERROR **: strings.cc:270:int main(int, char**)(): assertion failed: 
g_unichar_isalnum ('?') == true

having java-style TASSERT_EQUAL(val1,val2) could probably also be nice,
in order to print the mismatching values with the error message.


>> - try setting & getting all widget properties on all widgets over the full
>>    value ranges (sparsely covered by means of random numbers for instance)
>> - try setting & getting all container child properties analogously
>
> I believe the OSDL tests do this already.  We should steal that code;
> there's a *lot* of properties to be tested!

not sure what code you're referring to. but what i meant here is code that
generically queries all properties and explores their value range. this
kind of generic querying code is available in a lot of places already (beast,
gle, gtk prop editor, libglade, gtk-doc, LBs, etc.)


>> - for all widget types, create and destroy them in a loop to:
>>    a) measure basic object setup performance
>>    b) catch obvious leaks
>>    (these would be slowcheck/perf tests)
>
> Yeah.  GtkWidgetProfiler (in gtk+/perf) will help with this.  Manu
> Cornet has improved it a lot for his theme engine torturer, so we should
> use *that* version :)

hm, i really have not much of an idea about what it does beyond exposing
the main window in a loop ;) 
gtk+/perf/README looks interesting though, are there any docs on this
beyond that file?

>  Federico

---
ciaoTJ
_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to