<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://groups.drupal.org" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Testing and Quality Assurance</title>
 <link>http://groups.drupal.org/testing-qa</link>
 <description>For talk about testing frameworks and other quality assurance initiatives.</description>
 <language>en</language>
<item>
 <title>Functional SimpleTest Status - List of all tests</title>
 <link>http://groups.drupal.org/node/9408</link>
 <description>&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;This list serves as on overview of the current functional testing status. This will help keep track of who is writing tests and what tests are left to be written.&lt;/p&gt;
&lt;h2&gt;How you can help&lt;/h2&gt;
&lt;p&gt;We need people to help write tests. If you can program then feel free to write some tests. If you are not into coding you can help with running &lt;a href=&quot;http://drupal.org/project/simpletest_automator &quot;&gt; simpletest_automator&lt;/a&gt; and recording tests.&lt;/p&gt;
&lt;h2&gt;Maintainer&lt;/h2&gt;
&lt;p&gt;Jimmy Berry (&lt;a href=&quot;http://drupal.org/user/214218&quot;&gt;boombatower&lt;/a&gt;) is maintaining this list. If you begin work on a test please contact me and I will be happy to update the list. If there is any information that is incorrect please notify me.&lt;/p&gt;
&lt;p&gt;If you have any questions please contact me.&lt;/p&gt;
&lt;h2&gt;Status&lt;/h2&gt;
&lt;p&gt;We currently have 38 tests taken out of 43 for a test coverage of 88%. This will change when the misnamed tests are merged.&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;img src=&quot;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:38,5&amp;amp;chs=250x100&amp;amp;chl=Taken|Free&quot; alt=&quot;Taken vs. Free&quot;&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;img src=&quot;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:2,1,35&amp;amp;chs=500x100&amp;amp;chl=In Progress|Pending Review|Completed&quot; alt=&quot;Status Overview&quot;&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;List&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;    Module name &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Status  &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Issue   &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Author(s)   &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Misnamed    &lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    aggregator  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/231481&quot; title=&quot;http://drupal.org/node/231481&quot;&gt;http://drupal.org/node/231481&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   csevb10, kscheirer, poetro  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    block   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/231313&quot; title=&quot;http://drupal.org/node/231313&quot;&gt;http://drupal.org/node/231313&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower, KentBye    &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    blog    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240644&quot; title=&quot;http://drupal.org/node/240644&quot;&gt;http://drupal.org/node/240644&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   solotandem  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    blogapi &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/209146&quot; title=&quot;http://drupal.org/node/209146&quot;&gt;http://drupal.org/node/209146&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    book    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/207192&quot; title=&quot;http://drupal.org/node/207192&quot;&gt;http://drupal.org/node/207192&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    color   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    comment &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/212261&quot; title=&quot;http://drupal.org/node/212261&quot;&gt;http://drupal.org/node/212261&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    contact &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/232665&quot; title=&quot;http://drupal.org/node/232665&quot;&gt;http://drupal.org/node/232665&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    dblog   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/241467&quot; title=&quot;http://drupal.org/node/241467&quot;&gt;http://drupal.org/node/241467&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   solotandem  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    filter  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/210666&quot; title=&quot;http://drupal.org/node/210666&quot;&gt;http://drupal.org/node/210666&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    forum   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/244602&quot; title=&quot;http://drupal.org/node/244602&quot;&gt;http://drupal.org/node/244602&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   solotandem  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    help    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/242475&quot; title=&quot;http://drupal.org/node/242475&quot;&gt;http://drupal.org/node/242475&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   solotandem  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    locale  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/206342&quot; title=&quot;http://drupal.org/node/206342&quot;&gt;http://drupal.org/node/206342&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   chx &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    menu    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/245226&quot; title=&quot;http://drupal.org/node/245226&quot;&gt;http://drupal.org/node/245226&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   solotandem  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node    &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (node_revisions)   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/201138&quot; title=&quot;http://drupal.org/node/201138&quot;&gt;http://drupal.org/node/201138&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   cwgordon7   &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (node_teaser)  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/210184&quot; title=&quot;http://drupal.org/node/210184&quot;&gt;http://drupal.org/node/210184&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   bevan   &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (page_creation)    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/212123&quot; title=&quot;http://drupal.org/node/212123&quot;&gt;http://drupal.org/node/212123&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   beeradb &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (page_view)    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (story_edit)   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/196700&quot; title=&quot;http://drupal.org/node/196700&quot;&gt;http://drupal.org/node/196700&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   corniI  &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node (story_preview)    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/196700&quot; title=&quot;http://drupal.org/node/196700&quot;&gt;http://drupal.org/node/196700&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   corniI  &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    openid  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    path    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/207196&quot; title=&quot;http://drupal.org/node/207196&quot;&gt;http://drupal.org/node/207196&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    php &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/243813&quot; title=&quot;http://drupal.org/node/243813&quot;&gt;http://drupal.org/node/243813&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    poll    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/205014&quot; title=&quot;http://drupal.org/node/205014&quot;&gt;http://drupal.org/node/205014&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   chx &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    profile &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    search  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    search (search_match)   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/205631&quot; title=&quot;http://drupal.org/node/205631&quot;&gt;http://drupal.org/node/205631&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   steven  &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    statistics  &lt;/td&gt;
&lt;td&gt;   Stub + initial test committed   &lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;http://drupal.org/node/248436&quot; title=&quot;http://drupal.org/node/248436&quot;&gt;http://drupal.org/node/248436&lt;/a&gt;     &lt;/td&gt;
&lt;td&gt;   vonster &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    syslog  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/243861&quot; title=&quot;http://drupal.org/node/243861&quot;&gt;http://drupal.org/node/243861&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    system  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/243367&quot; title=&quot;http://drupal.org/node/243367&quot;&gt;http://drupal.org/node/243367&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    system (modules_system) &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/201134&quot; title=&quot;http://drupal.org/node/201134&quot;&gt;http://drupal.org/node/201134&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   Smartys     &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    taxonomy    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    taxonomy (taxonomy.module)  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    throttle    &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    tracker &lt;/td&gt;
&lt;td&gt;   Pending Review  &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/239455&quot; title=&quot;http://drupal.org/node/239455&quot;&gt;http://drupal.org/node/239455&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   dmitrig01   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    translation &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/207385&quot; title=&quot;http://drupal.org/node/207385&quot;&gt;http://drupal.org/node/207385&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    trigger &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    trigger (content_actions)   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/201139&quot; title=&quot;http://drupal.org/node/201139&quot;&gt;http://drupal.org/node/201139&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   cwgordon7   &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    update  &lt;/td&gt;
&lt;td&gt;   In Progress &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/253501&quot; title=&quot;http://drupal.org/node/253501&quot;&gt;http://drupal.org/node/253501&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   dmitrig01   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    upload  &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/234642&quot; title=&quot;http://drupal.org/node/234642&quot;&gt;http://drupal.org/node/234642&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   boombatower &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    upload (upload_tests)   &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   x   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    user    &lt;/td&gt;
&lt;td&gt;   Completed   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/203780&quot; title=&quot;http://drupal.org/node/203780&quot;&gt;http://drupal.org/node/203780&lt;/a&gt;   &lt;/td&gt;
&lt;td&gt;   chx &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;Test State&lt;/h2&gt;
&lt;p&gt;Below is listed each of the written tests and their current status. This list needs to move towards all passes and reviewed.&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;img src=&quot;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:20,6&amp;amp;chs=250x100&amp;amp;chl=Pass|Fail&quot; alt=&quot;Pass vs. Fail&quot;&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;img src=&quot;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:13,13&amp;amp;chs=500x100&amp;amp;chl=Reviewed|Un-Reviewed&quot; alt=&quot;Reviewed Tests&quot;&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;    Module name &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Written &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Merged  &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Passes  &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Reviewed    &lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;  Issue   &lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    aggregator  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/239197&quot; title=&quot;http://drupal.org/node/239197&quot;&gt;http://drupal.org/node/239197&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    block   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240362&quot; title=&quot;http://drupal.org/node/240362&quot;&gt;http://drupal.org/node/240362&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    blog    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/243966&quot; title=&quot;http://drupal.org/node/243966&quot;&gt;http://drupal.org/node/243966&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    blogapi &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/245955&quot; title=&quot;http://drupal.org/node/245955&quot;&gt;http://drupal.org/node/245955&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    book    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240378&quot; title=&quot;http://drupal.org/node/240378&quot;&gt;http://drupal.org/node/240378&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    color   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    comment &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240599&quot; title=&quot;http://drupal.org/node/240599&quot;&gt;http://drupal.org/node/240599&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    contact &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240278&quot; title=&quot;http://drupal.org/node/240278&quot;&gt;http://drupal.org/node/240278&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    dblog   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    filter  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/240635&quot; title=&quot;http://drupal.org/node/240635&quot;&gt;http://drupal.org/node/240635&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    forum   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    help    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    locale  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    menu    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    node    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    openid  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    path    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    php &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/243969&quot; title=&quot;http://drupal.org/node/243969&quot;&gt;http://drupal.org/node/243969&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    poll    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    profile &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    search  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/244603&quot; title=&quot;http://drupal.org/node/244603&quot;&gt;http://drupal.org/node/244603&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    statistics  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    syslog  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    system  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    taxonomy    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/245887&quot; title=&quot;http://drupal.org/node/245887&quot;&gt;http://drupal.org/node/245887&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    throttle    &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    tracker &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    translation &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/244704&quot; title=&quot;http://drupal.org/node/244704&quot;&gt;http://drupal.org/node/244704&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    trigger &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    update  &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    upload  &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;    user    &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;       &lt;/td&gt;
&lt;td&gt;   X   &lt;/td&gt;
&lt;td&gt;   &lt;a href=&quot;http://drupal.org/node/244763&quot; title=&quot;http://drupal.org/node/244763&quot;&gt;http://drupal.org/node/244763&lt;/a&gt;   &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 05 Mar 2008 16:48:43 +0000</pubDate>
 <dc:creator>boombatower@drupal.org</dc:creator>
 <guid isPermaLink="false">9408 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Rename the &quot;Unit Testing&quot; group to &quot;Testing&quot;</title>
 <link>http://groups.drupal.org/node/12875</link>
 <description>&lt;p&gt;Today the Drupal Testing framework is many an UI (&quot;functional&quot;) testing. Should we rename this group to simply &quot;Testing&quot;?&lt;/p&gt;
&lt;p&gt;Damien Tournoud&lt;br /&gt;
&lt;a href=&quot;http://drupalfr.org&quot; title=&quot;http://drupalfr.org&quot;&gt;http://drupalfr.org&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/12875#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 02 Jul 2008 15:19:25 +0000</pubDate>
 <dc:creator>Damien Tournoud</dc:creator>
 <guid isPermaLink="false">12875 at http://groups.drupal.org</guid>
</item>
<item>
 <title>SimpleTest module&#039;s faults at first sight</title>
 <link>http://groups.drupal.org/node/12462</link>
 <description>&lt;p&gt;1. Too heavy to write simple test&lt;/p&gt;
&lt;p&gt;if I changed code in blog_link to remove author&#039;s blog link, how can I write a small code to ensure it? logic as&lt;/p&gt;
&lt;p&gt;testnode = new node;&lt;br /&gt;
node-&amp;gt;type = blog;&lt;br /&gt;
testlink = blog_link(&#039;node&#039;, testnode);&lt;br /&gt;
assertNotContains(&#039;tom&#039;s blog&#039;, testlink);&lt;/p&gt;
&lt;p&gt;2. Not IDE friendly, even for simpletest series.&lt;/p&gt;
&lt;p&gt;Using simpletest eclipse plugin, you can&#039;t run test file because of the .test extention, have to rename to .php. After renaming, it still can be run because of complex file including.&lt;/p&gt;
&lt;p&gt;Any thoughts?&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/12462#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Mon, 16 Jun 2008 04:31:34 +0000</pubDate>
 <dc:creator>internal@drupal.org</dc:creator>
 <guid isPermaLink="false">12462 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Tests that fail by design</title>
 <link>http://groups.drupal.org/node/12051</link>
 <description>&lt;p&gt;We&#039;re down to under 60 core test failures, and there&#039;s at least four RTBC patches in the queue which will reduce that further, meaning we&#039;ll be down to 5-6 unresolved issues dealing with core test patch failures pretty soon.&lt;/p&gt;
&lt;p&gt;At the moment, there&#039;s only one test that fails by design - for the &lt;a href=&quot;http://drupal.org/node/161217&quot;&gt;url filter&lt;/a&gt;. However that core bug is likely to get fixed before all tests are working again, so it&#039;s unlikely to impact on much.&lt;/p&gt;
&lt;p&gt;However, once we &lt;em&gt;do&lt;/em&gt; have all tests working, and some coverage gaps filled, then there&#039;s bound to be some tests we&#039;ll want to write that fail by design - when just running all tests, it&#039;s almost impossible to tell that this is the case though, so I&#039;m wondering how best to deal with it.&lt;/p&gt;
&lt;p&gt;We could put a note in code comments, or maybe in the assertion response text, link to an issue nid for the bug (that could be left in as documentation for the test even when it&#039;s fixed). Either way I&#039;d be interested to see what people think about this, and different ways to handle it. I&#039;m also not sure how it&#039;ll play with the DrupalTestBed which I guess assumes 100% pass rate?&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/12051#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Fri, 06 Jun 2008 12:14:03 +0000</pubDate>
 <dc:creator>catch</dc:creator>
 <guid isPermaLink="false">12051 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Known test failures</title>
 <link>http://groups.drupal.org/node/11993</link>
 <description>&lt;p&gt;&lt;strong&gt;If you&#039;re looking for current status, look at the most recent comment&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since we&#039;ve still got core test failures, and no automated patch testing, I thought it&#039;d be worth doing a snapshot of tests that pass week by week (or more frequently if there&#039;s lots of commits). This allows us to keep a historical overview of where bugs have been introduced into either core code, simpletest.module or tests themselves. It should also hopefully help to reduce duplicate issues about broken tests (since a test failure can be down to any one of those conditions).&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11993#comments</comments>
 <group domain="http://groups.drupal.org/quality-assurance">Quality Assurance</group>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 04 Jun 2008 10:43:54 +0000</pubDate>
 <dc:creator>catch</dc:creator>
 <guid isPermaLink="false">11993 at http://groups.drupal.org</guid>
</item>
<item>
 <title>XML output for simpletest requests</title>
 <link>http://groups.drupal.org/node/11979</link>
 <description>&lt;p&gt;I have created a feature request at &lt;a href=&quot;http://drupal.org/node/266220&quot; title=&quot;http://drupal.org/node/266220&quot;&gt;http://drupal.org/node/266220&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feedback please.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11979#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Tue, 03 Jun 2008 17:49:41 +0000</pubDate>
 <dc:creator>dropcube@drupal.org</dc:creator>
 <guid isPermaLink="false">11979 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Getting Involved in SimpleTest</title>
 <link>http://groups.drupal.org/node/11636</link>
 <description>&lt;p&gt;Now that SimpleTest is apart of Drupal core issues related to the 7.x development have been moved to the core issue queue. If you would like to be involved I have included two links which will filter the issues to only display SimpleTest related issue. You can obviously used the advanced search feature to narrow your results to the SimpleTest related components instead of using the links.&lt;/p&gt;
&lt;h2&gt;7.x Related Issues&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;SimpleTest module:&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Component:&lt;/i&gt; simpletest.module&lt;br /&gt;
&lt;a href=&quot;http://drupal.org/project/issues?projects=3060&amp;amp;components=simpletest.module&amp;amp;states=1,16,8,13,14,15,2,4&amp;amp;priorities=&amp;amp;categories=&amp;amp;users=&quot; title=&quot;http://drupal.org/project/issues?projects=3060&amp;amp;components=simpletest.module&amp;amp;states=1,16,8,13,14,15,2,4&amp;amp;priorities=&amp;amp;categories=&amp;amp;users=&quot;&gt;http://drupal.org/project/issues?projects=3060&amp;amp;components=simpletest.mod...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Tests&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;Component:&lt;/i&gt; tests&lt;br /&gt;
&lt;a href=&quot;http://drupal.org/project/issues?projects=3060&amp;amp;components=tests&amp;amp;states=1,16,8,13,14,15,2,4&amp;amp;priorities=&amp;amp;categories=&amp;amp;users=&quot; title=&quot;http://drupal.org/project/issues?projects=3060&amp;amp;components=tests&amp;amp;states=1,16,8,13,14,15,2,4&amp;amp;priorities=&amp;amp;categories=&amp;amp;users=&quot;&gt;http://drupal.org/project/issues?projects=3060&amp;amp;components=tests&amp;amp;states=1...&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;5.x and 6.x&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;All issues&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://drupal.org/project/issues/simpletest&quot; title=&quot;http://drupal.org/project/issues/simpletest&quot;&gt;http://drupal.org/project/issues/simpletest&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11636#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/357">simpletest</category>
 <category domain="http://groups.drupal.org/taxonomy/term/359">unit testing</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 21 May 2008 21:35:13 +0000</pubDate>
 <dc:creator>boombatower@drupal.org</dc:creator>
 <guid isPermaLink="false">11636 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Undefined index exceptions</title>
 <link>http://groups.drupal.org/node/11501</link>
 <description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;I keep getting &#039;Undefined index&#039; exceptions in my tests:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;Unexpected PHP error [Undefined index: weight] severity [E_NOTICE] in [/Applications/MAMP/htdocs/drupal-5.7/modules/taxonomy/taxonomy.module line 502]&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;As you all know, they occur in this kind of situations:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;$example = array(&amp;#039;name&amp;#039; =&amp;gt; &amp;#039;example&amp;#039;);&lt;br /&gt;if ($example[&amp;#039;weight&amp;#039;]) {&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;One option to avoid this is to check if the variable is set:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;if (isset($example[&amp;#039;weight&amp;#039;])) {&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;However, this is not done in the Drupal core code, so we will keep getting the exceptions when using functions like &#039;save_node&#039; or &#039;taxonomy_save_term&#039;.&lt;/p&gt;
&lt;p&gt;The other option is to define EVERY index in our arrays, and just leave empty the ones we are not going to use. This is annoying and makes the code less legible.&lt;/p&gt;
&lt;p&gt;What is the right way to proceed to avoid these exceptions?&lt;/p&gt;
&lt;p&gt;Thank you!&lt;br /&gt;
Ángel.-&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11501#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Thu, 15 May 2008 09:55:18 +0000</pubDate>
 <dc:creator>angeliti@drupal.org</dc:creator>
 <guid isPermaLink="false">11501 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Correct simpletest syntax for adding tags to a story/page form?</title>
 <link>http://groups.drupal.org/node/11469</link>
 <description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;I&#039;m having problems when trying to add tags to the story/page creation form using simpletest.&lt;/p&gt;
&lt;p&gt;I have a vocabulary which uses FREE TAGGING, and I want create a new page with the tag &quot;cat&quot;. The vid of the vocabulary is stored in the class attribute &#039;free_tagging_voc&#039;. What I&#039;ve been trying to do is the following:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;$edit = array();&lt;br /&gt;$edit[&amp;#039;title&amp;#039;] = $this-&amp;gt;randomName(10);&lt;br /&gt;$edit[&amp;#039;body&amp;#039;] = &amp;#039;&amp;#039;;&lt;br /&gt;$edit[&amp;#039;taxonomy&amp;#039;][&amp;#039;tags&amp;#039;][$this-&amp;gt;free_tagging_voc] = &amp;#039;cat&amp;#039;;&lt;br /&gt;$this-&amp;gt;drupalPostRequest(&amp;#039;node/add/page&amp;#039;, $edit, &amp;#039;Submit&amp;#039;);&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;However, this results in the following error message when running the test:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;[browser] Setting taxonomy=&amp;quot;Array&amp;quot; at [/Applications/MAMP/htdocs/drupal-5.7/sites/all/modules/simpletest/drupal_test_case.php line 111]&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Anybody can please tell me what&#039;s the right way of doing what I&#039;m trying to do?&lt;/p&gt;
&lt;p&gt;Thanks!&lt;br /&gt;
Ángel.-&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11469#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/148">free tagging</category>
 <category domain="http://groups.drupal.org/taxonomy/term/357">simpletest</category>
 <category domain="http://groups.drupal.org/taxonomy/term/197">taxonomy</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 14 May 2008 07:24:52 +0000</pubDate>
 <dc:creator>angeliti@drupal.org</dc:creator>
 <guid isPermaLink="false">11469 at http://groups.drupal.org</guid>
</item>
<item>
 <title>SimpleTest handbook pages - lots of updates to do</title>
 <link>http://groups.drupal.org/node/11283</link>
 <description>&lt;p&gt;So in the process of writing &lt;a href=&quot;http://groups.drupal.org/node/11121&quot;&gt;my first test&lt;/a&gt; I found a bunch of documentation discrepancies at &lt;a href=&quot;http://drupal.org/simpletest&quot; title=&quot;http://drupal.org/simpletest&quot;&gt;http://drupal.org/simpletest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&#039;m not yet familiar enough with everything to know exactly what&#039;s deprecated, what&#039;s best practices/optional etc. so starting this to bring them up - then we can just edit stuff directly on the page once it&#039;s confirmed it needs changing. Or if they&#039;re not salvageable, just archive them quick so we&#039;re not presenting misleading information and replace with &lt;a href=&quot;http://groups.drupal.org/node/11020&quot; title=&quot;http://groups.drupal.org/node/11020&quot;&gt;http://groups.drupal.org/node/11020&lt;/a&gt; when it&#039;s ready.&lt;/p&gt;
&lt;p&gt;Here&#039;s a quick run-down:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/30023&quot; title=&quot;http://drupal.org/node/30023&quot;&gt;http://drupal.org/node/30023&lt;/a&gt; - looks old.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DrupalTestCase&lt;/strong&gt;  should be &lt;code&gt;DrupalWebTestCase&lt;/code&gt; ?&lt;br /&gt;
&lt;code&gt;drupalModuleEnable($name)&lt;/code&gt; - this is still available but should we be using parent setUp($name) for most tests instead? If so this isn&#039;t mentioned either in the handbook or the phpdoc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;drupalVariableSet&lt;/strong&gt; - this is just variable_set() now right? I&#039;m unclear whether this should be used in setUp or at the beginning of the test functions or wherever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;drupalCreateUserRolePerm&lt;/strong&gt; - should be &lt;code&gt;drupalCreateUser&lt;/code&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/30010&quot; title=&quot;http://drupal.org/node/30010&quot;&gt;http://drupal.org/node/30010&lt;/a&gt; - also looks old.&lt;/p&gt;
&lt;p&gt;DrupalTestCase again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;assertWantedText&lt;/strong&gt; - should be assertText and assertRaw no?&lt;br /&gt;
&lt;strong&gt;drupalPostRequest&lt;/strong&gt; - should be drupalPost&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/30008&quot; title=&quot;http://drupal.org/node/30008&quot;&gt;http://drupal.org/node/30008&lt;/a&gt; - more oldness, but also short.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/30021&quot; title=&quot;http://drupal.org/node/30021&quot;&gt;http://drupal.org/node/30021&lt;/a&gt; - ditto&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://drupal.org/node/30004&quot; title=&quot;http://drupal.org/node/30004&quot;&gt;http://drupal.org/node/30004&lt;/a&gt; - archived.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11283#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/357">simpletest</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 07 May 2008 11:12:34 +0000</pubDate>
 <dc:creator>catch</dc:creator>
 <guid isPermaLink="false">11283 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Selenium and Drupal</title>
 <link>http://groups.drupal.org/node/11186</link>
 <description>&lt;p&gt;First, for those that don&#039;t want to read the full post, here&#039;s the &quot;30-second elevator speech&quot;:&lt;br /&gt;
This post to to discuss using Seleinum with Drupal. Specifically using Maven to run the selenium tests and writing the Selenium tests in Java.&lt;br /&gt;
The example code be downloaded from the Workhabit Inc. public repository here: &lt;a href=&quot;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&quot; title=&quot;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&quot;&gt;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&lt;/a&gt;&lt;br /&gt;
One must have the following installed to run:&lt;br /&gt;
1. Firefox&lt;br /&gt;
2. Java 1.5+&lt;br /&gt;
3. Maven&lt;br /&gt;
All 3 are easy to install and aquire. Once you download the code from the repository, you can just navigate to the directory and run:&lt;br /&gt;
&lt;code&gt;mvn -P drupal integration-test&lt;/code&gt;&lt;br /&gt;
Maven and writing tests are beyond the scope of this blog post.&lt;br /&gt;
&lt;em&gt;I&#039;m writing this up for comments, thoughts, and hopefully for others to use and/or contribute.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ok, now the long winded version:&lt;/p&gt;
&lt;p&gt;I&#039;ve been in the Java world for a bit and I&#039;m now bringing my self back into the PHP/Drupal realm.&lt;br /&gt;
With that said on my last project we had to validate ALL code with unit tests, and then we did fully functional integration tests using Selenium.&lt;/p&gt;
&lt;p&gt;The Build management tool we used was Maven ( way past the scope of discussion here ). However, what I have done is GREATLY simplified down what we used into a very short, simple, and small file which allows one to run Selenium tests out of the box. It uses Maven/Java to do the tests...but, that&#039;s neither here nor there.&lt;br /&gt;
It is available here: &lt;a href=&quot;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&quot; title=&quot;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&quot;&gt;https://svn.workhabit.com/svn/public/drupal/selenium/trunk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I know that there is a Selenium module for Drupal...however when I thought about this, I also felt that this was an inherit problem. This dawned on me when I read the link that there is a patch to port it to 5.x. There in lies the problem. As we move versions/etc., we&#039;re updating the testing frame-work instep with the item we&#039;re testing. E.g. PHPUnit may be at 2.3, and we can still use PHPUnit 2.3 for Drupal 4.7, 5.1, 6.x, etc. However, by tightly integrating the testing frame work into the item we are testing, I feel one is creating a cyclic-redundancy in which the end result is chaos.&lt;/p&gt;
&lt;h1&gt;Goals&lt;/h1&gt;
&lt;p&gt;My only goals of this project is 2 fold:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Give a solid base so that anyone can download the drupal-seleinum project and write tests for their drupal site.&lt;/li&gt;
&lt;li&gt;The community should have an entire suite of tests to test the Drupal installation as a base install ( I have currently started these in the com.workhabit.drupal.selenium.core package. Inside the package, it think they should be split into their subsystems, e.g. Authentication, Taxonomy, CCK, etc.).
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Why Java/Maven?&lt;/h2&gt;
&lt;p&gt;Well, there are a number of reasons; I will not list/discuss all of them here as they are not really part of this post. But on the short list; Java allows one to set break points where Selenium is running to see why a test may be failing ( it should be noted you can also do this with PHP; if you setup your IDE correct and get xdebug installed/setup correctly also).&lt;br /&gt;
Also, by using Maven, one doesn&#039;t have to worry about dependencies with the unit testing suite (versions, etc.) as Maven takes care of all of that. Java/Maven will also allow us to do more in terms of continuous-build integration. Further, writing tests in Java is not that much harder/different that writing them in PHP. The Selenium IDE gives code in many languages (HTML, PHP, Java, Ruby, etc.) so anyone should be able to create tests easily. I&#039;m hoping to write a post of how to write/add tests in Java. Most of the hard work has already been setup in the code, so all one has to do for a new test pretty much is create a new class and create an annotated java method, such as:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;@Test&lt;br /&gt;public void myDrupalTest() {&lt;br /&gt;&amp;nbsp; BROWSER.open(&amp;quot;/path/to/my/site&amp;quot;);&lt;br /&gt;&amp;nbsp; // ....other browser test code from Selenium IDE&lt;br /&gt;&amp;nbsp; // ...Assertions&lt;br /&gt;&amp;nbsp; return;&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Also, in the coming days, I shall be adding to this suite a &quot;MockSoapServer&quot;. This will allow you to hit a webservice in point (in this case the MockSoapServer), and it will return &quot;canned&quot; results. Maven will fire up both the Selenium server AND the MockSoapServer BEFORE running the test suites. It will then create a report and take down both after the tests are run.&lt;/p&gt;
&lt;h2&gt;Environment Setup&lt;/h2&gt;
&lt;p&gt;First things first, you will need to have Maven installed on your local machine in order to use the Drupal-Seleinum tests. Installing maven is very simple and straight forward. See the &lt;a href=&quot;http://maven.apache.org/download.html&quot;&gt;Apache Maven Site&lt;/a&gt; for more information on installing Maven.&lt;/p&gt;
&lt;h2&gt;Setup your Tests&lt;/h2&gt;
&lt;p&gt;So, lets be real; Usually when we are developing, we are changing some of the default workings of Drupal; So we will need to have a some-what custom test suite for each site we develop; or at least we will be extending the tests with more/new tests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
*EXPORT* the base Selenium maven build from the Workhabit repository.&lt;br /&gt;
&lt;code&gt;svn export https://svn.workhabit.com/svn/public/sandbox/earnest/drupal/drupal-selenium&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Update the POM (If you are unfamiliar with Maven, ignore this step)&lt;br /&gt;
You can update the POM if you want to better describe you project.
&lt;/li&gt;
&lt;li&gt;
&lt;h3&gt;Modify the &quot;setup.xml&quot;&lt;/h3&gt;
&lt;p&gt;You will notice when you download the code that there is a file called &quot;setup-example.xml&quot; in the src/test/resources folder. This file is read by the test suite and contains some general settings regarding your site. The settings are pretty self explanatory. The main ones you will need to change out of the box are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;siteRootPath&lt;/li&gt;
&lt;li&gt;siteDomain&lt;/li&gt;
&lt;li&gt;testUsername&lt;/li&gt;
&lt;li&gt;testPassword&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will hopefully be documenting the settings further, but for now, I apologize that the documentation is a bit sparse.
&lt;/li&gt;
&lt;li&gt;Test to see that you have everything setup correctly by running a maven integration test (Note: All tests are done with the drupal plugin)&lt;br /&gt;
&lt;code&gt;mvn -P drupal integration-test&lt;/code&gt;&lt;br /&gt;
This should run the DrupalLoginTest which will bring up your Drupal site, and login a user.
&lt;/li&gt;
&lt;li&gt;Add the package to your own repository.&lt;br /&gt;
&lt;code&gt;svn add drupal-selenium &amp;amp;&amp;amp; svn commit -m &amp;quot;Adding the drupal-selenium package to my site&amp;quot;&lt;/code&gt;&lt;br /&gt;
You now have a customized maven/Selenium test suite for the project that you are working on.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/usability&quot;&gt;Usability&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11186#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/5036">selenium</category>
 <category domain="http://groups.drupal.org/taxonomy/term/356">testing</category>
 <group domain="http://groups.drupal.org/change-management-systems">Build Systems &amp;amp; Change Management</group>
 <group domain="http://groups.drupal.org/enterprise">Enterprise</group>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <group domain="http://groups.drupal.org/usability">Usability</group>
 <pubDate>Sat, 03 May 2008 16:03:04 +0000</pubDate>
 <dc:creator>Souvent22@drupal.org</dc:creator>
 <guid isPermaLink="false">11186 at http://groups.drupal.org</guid>
</item>
<item>
 <title>My first SimpleTest</title>
 <link>http://groups.drupal.org/node/11121</link>
 <description>&lt;p&gt;Having not written a single test yet I figured it&#039;d be a good idea to document the process, and I happen to have an issue in the queue which is &lt;em&gt;perfect&lt;/em&gt; for doing so.&lt;/p&gt;
&lt;p&gt;Background:&lt;br /&gt;
* &lt;a href=&quot;http://drupal.org/node/228594&quot;&gt;Access rules were removed from core&lt;/a&gt;&lt;br /&gt;
* Statistics module had a direct call to the {access} table which I knew nothing bout, so is now &lt;a href=&quot;http://drupal.org/node/248436&quot;&gt;broken&lt;/a&gt;&lt;br /&gt;
* Dries said &quot;We should probably write a test for it too so we don&#039;t reintroduce this problem.&quot;&lt;/p&gt;
&lt;p&gt;Everything I know about unit testing has been from the past year or so as it&#039;s been discussed in relation to Drupal. I&#039;ve read odd bits of the docs, read through some core tests, but not written any tests yet or played around with simpletest.module much. I imagine this is the same for a lot of people.&lt;/p&gt;
&lt;p&gt;These are any issues I managed to come up with before trying to write the patch, note I&#039;m being deliberately dumb about some of this to try to find what the roadblocks are, and if I appear to be talking to myself, then I probably am.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IP blocking doesn&#039;t have any tests existing tests&lt;/strong&gt; for it within system.module (because that patch (by me) got accepted without tests) - so nothing to build on there.&lt;br /&gt;
&lt;strong&gt;Statistics.module doesn&#039;t have any existing tests&lt;/strong&gt; either (issue here: &lt;a href=&quot;http://drupal.org/node/253121&quot; title=&quot;http://drupal.org/node/253121&quot;&gt;http://drupal.org/node/253121&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;(These are both temporary conditions hopefully, but important at this stage of trying to get people involved. If I didn&#039;t already know what was going on with this, Dries&#039; statement would have stumped me completely.)&lt;/p&gt;
&lt;p&gt;There&#039;s a whole bunch of steps - like enabling statistics module, then enabling access logging and having some data in two different tables before you can test the page in question. I know you can set variables and create nodes and users cleanly but &lt;strong&gt;do I insert arbitrary data into the accesslog and blocked_ips table or just test if the page displays ok or what?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; - I couldn&#039;t find the answer to this in the docs, so asked chx, who confirmed I need to use db_query() to insert/delete the data manually for these cases (in the absence of mocking). We probably need to come up with some documentation for that - I can think of {accesslog}, {watchdog}, maybe {history} where such information might need to be faked.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The patch to fix the issue changes 10 lines of code, the SimpleTest is going to be a lot more than this.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; - if there&#039;d been a SimpleTest for this already I wouldn&#039;t be writing a 10 line patch to fix something I broke writing a much bigger one that&#039;s already committed. This is why testing is good.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do I put this test in system.test or statistics.test?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; - I think this particular issue needs an integration test and we don&#039;t have any of those yet. So I&#039;ll put it in statistics, or split it between the two for now.&lt;/p&gt;
&lt;p&gt;---&lt;br /&gt;
This is a very rough log of the process of actually writing a test for the first time:&lt;/p&gt;
&lt;p&gt;Stuff I looked at in order of frequency:&lt;br /&gt;
1. core tests&lt;br /&gt;
2. simpletest handbook page.&lt;/p&gt;
&lt;p&gt;Since there was no statistics.test to work with I copied user.test into a new file to get the basic structure to fill in.&lt;/p&gt;
&lt;p&gt;Not entirely clear whether I should be using &lt;code&gt;setUp(&amp;#039;module&amp;#039;)&lt;/code&gt; or &lt;code&gt;drupalModuleEnable&lt;/code&gt;. The handbook says drupalModuleEnable but the tests say setUp() - so I went for setUp().&lt;/p&gt;
&lt;p&gt;drupalCreateUser() is entirely self explanatory, which is nice. Handbook says I should&#039;ve used drupalCreateUserRolePerm though - which appears to be deprecated as well.&lt;/p&gt;
&lt;p&gt;I have to insert some dummy accesslog information - only way to do this is via db_query(), meh.&lt;/p&gt;
&lt;p&gt;Handbook says use $this-&amp;gt;drupalVariableSet($name, $value) but I picked up from somewhere that this is deprecated, and the tests say the same thing, so I just use variable_set.&lt;/p&gt;
&lt;p&gt;Using the internal browser is the easy bit - do stuff, see what happens, do more stuff, see what happens.&lt;/p&gt;
&lt;p&gt;Since there&#039;s not existing tests for this bit of core it&#039;s hard to know how much or how little to test. I figure I&#039;ll test as much as possible and cut it down later if told, for practice if nothing else.&lt;/p&gt;
&lt;p&gt;Can&#039;t see an obvious way to test whether the #default_value in my form is getting set or not, will skip that for now.&lt;/p&gt;
&lt;p&gt;So now I have my first test ready to try out. I wasn&#039;t on my development machine when writing this so as yet I&#039;ve just got something completely untested which vaguely resembles some other tests.&lt;/p&gt;
&lt;p&gt;1st run: &lt;em&gt;19 passes, 14 fails and 0 exceptions.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Not so bad for running blind. Turned out I&#039;d missed a capital letter in an assertText. s/block/Block.&lt;/p&gt;
&lt;p&gt;Nice to see what the error is, which line etc., make things much easier to fix.&lt;/p&gt;
&lt;p&gt;Fix that, next run:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;23 passes, 11 fails and 2 exceptions.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ok so now it looks like I&#039;ve got the drupalPost  messed up somehow. Ah - no I haven&#039;t, I&#039;m rolling this test along with a patch, and I&#039;d done something stupid with my menu definition - so my test is actually failing due to my sloppy code!!&lt;/p&gt;
&lt;p&gt;Fix that and check manually that my menu item is appearing this time, one more pass on running the test.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;24 passes, 8 fails and 2 exceptions.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;However I&#039;ve got two exceptions - looks like I&#039;m using assertRaw/assertText incorrectly or some other issue - fiddling about with it didn&#039;t do me any good, so time to ask for help on IRC.&lt;/p&gt;
&lt;p&gt;More fiddling, I was using 12.34.56.789 as my IP address for testing. This, of course, isn&#039;t a valid IP address, so it&#039;s not getting saved, because the validation works. That was stupid. Note to self - follow the exact steps you&#039;re trying to test manually too.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;31 passes, 3 fails and 4 exceptions.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Got it to all passes, no fails but still 4 exceptions. Turns out clickLink() isn&#039;t handling query strings quite right: &lt;a href=&quot;http://drupal.org/node/255613&quot; title=&quot;http://drupal.org/node/255613&quot;&gt;http://drupal.org/node/255613&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Final test is on this issue: &lt;a href=&quot;http://drupal.org/node/248436&quot; title=&quot;http://drupal.org/node/248436&quot;&gt;http://drupal.org/node/248436&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 30 Apr 2008 15:07:21 +0000</pubDate>
 <dc:creator>catch</dc:creator>
 <guid isPermaLink="false">11121 at http://groups.drupal.org</guid>
</item>
<item>
 <title>broken tests? </title>
 <link>http://groups.drupal.org/node/11104</link>
 <description>&lt;p&gt;see:  &lt;a href=&quot;http://drupal.org/node/252920&quot; title=&quot;http://drupal.org/node/252920&quot;&gt;http://drupal.org/node/252920&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This profile module test suite also has a lot of redundant code.&lt;/p&gt;
&lt;p&gt;Are other tests broken?  Is it possible that I&#039;m the first one noticing this?&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11104#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 30 Apr 2008 01:09:43 +0000</pubDate>
 <dc:creator>pwolanin</dc:creator>
 <guid isPermaLink="false">11104 at http://groups.drupal.org</guid>
</item>
<item>
 <title>HOWTO: Submit tests with your patch</title>
 <link>http://groups.drupal.org/node/11020</link>
 <description>&lt;p&gt;&lt;em&gt;Note: This document is under development and targeted towards Drupal 7&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;intro&quot;&gt;What is Automated Testing?&lt;/h3&gt;
&lt;p&gt;Automated testing encompasses UI, API and unit tests. It&#039;s a technique for testing small sections of code to ensure it works as expected. For example, a UI test might check a form submission process to ensure form display, validation of input and submission works as expected. A unit test might test  a function for checking street addresses by passing a variety of well-formed and mal-formed addresses to ensure it handles them properly.&lt;/p&gt;
&lt;p&gt;Automated tests are used to aid debugging, ensure compatibility with other elements of the application, and assist in maintaining backward compatibility as code develops.&lt;/p&gt;
&lt;h3&gt;Why Test?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Modules and patches can be quickly reviewed and committed.&lt;/li&gt;
&lt;li&gt;Tests provide insight into how code is expected to perform.&lt;/li&gt;
&lt;li&gt;Tests help avoid introducing bugs when developing new features or modifying existing code.&lt;/li&gt;
&lt;li&gt;Code that has been developed with testing in mind tends to be easier to maintain and understand.&lt;/li&gt;
&lt;li&gt;Bug patches submitted with a test ensure the bug remains fixed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SimpleTest: A Tool for Unit Testing&lt;/h3&gt;
&lt;p&gt;Drupal comes with the SimpleTest module, which is based on the &lt;a href=&quot;http://simpletest.org/&quot;&gt;SimpleTest framework&lt;/a&gt;. The SimpleTest module is off by default and can be enabled through the module administration screen, although it&#039;s recommended that the SimpleTest module only be enabled on development systems, as unit tests may affect data in unexpected ways.&lt;/p&gt;
&lt;h3 id=&quot;types&quot;&gt;Types of Tests&lt;/h3&gt;
&lt;p&gt;There are three types of tests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UI tests&lt;/strong&gt;: These are &quot;black box&quot; tests that simulate the user clicking on various links and buttons in order to test module functionality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API tests&lt;/strong&gt;: For API functions that aren&#039;t easily represented in the UI,  functions that are called by other modules, and so on, API-level tests may also be written. These are &quot;white box&quot; tests which will check database state and so on in order to ensure that APIs are working as expected.  They can also serve as a form of documentation for how the API is supposed to behave, as they serve as examples of how functions are supposed to work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unit tests&lt;/strong&gt;: These types of tests test a part of the system in isolation from other parts so that system inter-dependencies don&#039;t come into play. In most cases, this requires mocking functions (via runkit or other methods).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Drupal community is initially focusing on UI and API testing in order to get maximum coverage in those areas,  with as low a barrier to writing and running tests as possible.&lt;/p&gt;
&lt;p&gt;This tutorial will focus on writing both API and UI level tests.&lt;/p&gt;
&lt;h3 id=&quot;files&quot;&gt;Where do test files go and what do I call them?&lt;/h3&gt;
&lt;p&gt;Most of the time, you want to test a single module, in which case you simply create a file called &lt;strong&gt;&lt;em&gt;module&lt;/em&gt;.test&lt;/strong&gt; in the module&#039;s directory.&lt;/p&gt;
&lt;p&gt;One exception to this rule is for various core library files, such as those files found in the /includes directory. For these you would create a file called &lt;em&gt;filename&lt;/em&gt;.test in the /includes directory.&lt;/p&gt;
&lt;p&gt;Modules that wish to have multiple test files (for example, both a .test file for the module itself and a .test file to ensure the module conforms to external RFCs or specifications) may also create a &quot;tests&quot; subdirectory and place multiple .test files within it.&lt;/p&gt;
&lt;h3 id=&quot;tour&quot;&gt;Taking a tour: What&#039;s in a test file?&lt;/h3&gt;
&lt;h4 id=&quot;testcase&quot;&gt;TestCase classes (test groupings)&lt;/h4&gt;
&lt;p&gt;Each .test file must contain one or more TestCase classes which hold groups of tests. TestCase classes appear in the testing module user interface, checkboxes for each class allow different combinations to be run for each test run.&lt;/p&gt;
&lt;p&gt;An example TestCase class declaration is:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ModuleNameTestCase &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;extends &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;DrupalWebTestCase &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;A typical simple module can get away with having only one TestCase class to hold all of its tests. However, there are circumstances where you may want to add additional TestCase classes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If it&#039;s conceivable that someone would want to test different parts of your module independently of one another; for example, it makes sense to have different test groupings for system module&#039;s module-related tests vs. its theme-related tests.&lt;/li&gt;
&lt;li&gt;If there would be performance impacts of running all of the tests at once (for example, all node module or all database system tests), it makes sense to split them up into separate groupings.&lt;/li&gt;
&lt;li&gt;If the module just plain does a lot of stuff and you want to break things up a bit to make them more manageable, additional test groupings also can make sense.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When creating multiple testing groups in a single .test file, use a &lt;strong&gt;&lt;em&gt;ModuleNameDescriptionOfTest&lt;/em&gt;TestCase&lt;/strong&gt; naming convention instead (for example, DatabaseSelectTestCase, DatabaseFetchTestCase, DatabaseInsertTestCase, etc.).&lt;/p&gt;
&lt;h4 id=&quot;getinfo&quot;&gt;getInfo() method (metadata about test group)&lt;/h4&gt;
&lt;p&gt;Each TestCase class requires a getInfo() method, which returns meta-data about the test: its name, description, and what &quot;group&quot; it belongs to (such as the module it&#039;s written for).&lt;/p&gt;
&lt;p&gt;An example getInfo() method is:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Inside TestCase class...&lt;/p&gt;
&lt;p&gt;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Implementation of getInfo().&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;getInfo&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return array(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// &#039;name&#039; should start with what is being tested (menu item) followed by what about it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // is being tested (creation/deletion).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;name&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Noun verbion&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// &#039;description&#039; should be one or more complete sentences that provide more details on what&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // exactly is being tested.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;description&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Create a custom whoozit, add thingies to the stuff, and clean up afterwards.&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// &#039;group&#039; should be a logical grouping of test cases, like a category.&amp;nbsp; In most cases, that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // is the module the test case is for.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;group&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Module&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h4 id=&quot;methods&quot;&gt;Test methods (the tests themselves)&lt;/h4&gt;
&lt;p&gt;The vast bulk of .test files are the test methods, which contain the tests themselves. At the heart of all test methods are &lt;strong&gt;assertions&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A list of all available assertions can be found at &lt;a href=&quot;http://drupal.org/node/265828&quot; title=&quot;http://drupal.org/node/265828&quot;&gt;http://drupal.org/node/265828&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are example test methods in a typical TestCase:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Inside TestCase class...&lt;/p&gt;
&lt;p&gt;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * One-sentence description of test.&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;testModuleNameTaskVariation&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Code that does something to be tested.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Test that the code did what it was supposed to do.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;assertEquals&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$some_value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$another_value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Testing equality of some value and another value&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * One-sentence description of test.&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;testModuleNameTaskVariation&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;assertNotEquals&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$some_value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$another_value&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;Testing inequality of some value and another value&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Some guidelines about test methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aim for each test method to test only one thing. This makes it much easier to hone in on what was being tested when failures appear. For example, rather than an enormous testUserLogin() function with several variations, instead do testUserLoginDuplicateUser() and testUserLoginRequiredFieldsMissing().&lt;/li&gt;
&lt;li&gt;For UI tests, name the methods &lt;strong&gt;test&lt;em&gt;ModuleVerbVariation()&lt;/em&gt;&lt;/strong&gt;, such as testUserLoginDuplicateUser().&lt;/li&gt;
&lt;li&gt;For API tests, name the methods &lt;strong&gt;test&lt;em&gt;FunctionNameVariation&lt;/em&gt;&lt;/strong&gt;, such as testVariableGetMissingValue().&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;setup&quot;&gt;setUp()/tearDown() methods (setup and/or cleanup after tests)&lt;/h4&gt;
&lt;p&gt;setUp() and tearDown() are two optional methods that perform setup tasks and cleanup tasks, respectively. These methods run before and after &lt;em&gt;each&lt;/em&gt; test method.&lt;/p&gt;
&lt;p&gt;An example:&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Inside TestCase class...&lt;br /&gt;&amp;nbsp; /**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Implementation of setUp().&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setUp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// The first thing a setUp() method should always do is call its parent setUp() method.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If you need to enable any modules (including the one being tested),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // add them as function parameters.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;setUp&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;statistics&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Next, perform any required steps for the test methods within this test grouping.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;variable_set&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;some_variable&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Implementation of tearDown().&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;tearDown&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// Perform any clean-up tasks.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;variable_del&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;some_variable&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #FF8000&quot;&gt;// The last thing a tearDown() method should always do is call its parent tearDown() method.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parent&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;tearDown&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;If you only call parent: setUp(); and nothing else in your setUp() function, then you do not need to call tearDown() since SimpleTest module handles this basic cleanup automatically.&lt;/p&gt;
&lt;h3&gt;References on unit testing and Drupal:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://api.drupal.org/api/file/modules/simpletest/simpletest.module/7&quot;&gt;SimpleTest Module functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://simpletest.sourceforge.net/&quot;&gt;SimpleTest PHP Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lullabot.com/articles/introduction-unit-testing&quot;&gt;Lullabot: An Introduction to Unit Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lullabot.com/articles/drupal-module-developer-guide-simpletest&quot;&gt;Lullabot: A Drupal Module Developer&#039;s Guide to SimpleTest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.garfieldtech.com/blog/testable-apis&quot;&gt;Testable API&#039;s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/files/simpletest_presentation.pdf&quot;&gt;Simpletest and Drupal: A Presentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lullabot.com/blog/drupalcon-simpletest-and-future-test-driven-development&quot;&gt;Notes from the SimpleTest Presentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.drupal.org/node/9408&quot;&gt;Functional Simpletest Status&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.drupal.org/unit-testing&quot;&gt;Unit Testing Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/11020#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Sat, 26 Apr 2008 04:58:27 +0000</pubDate>
 <dc:creator>webchick</dc:creator>
 <guid isPermaLink="false">11020 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Tests in core: What&#039;s next?</title>
 <link>http://groups.drupal.org/node/10970</link>
 <description>&lt;p&gt;We now have a testing framework in Drupal core. What we need to move forward is some structure that makes writing tests easy and efficient so that we can go towards our 100% code coverage goal without wasting development resources.&lt;/p&gt;
&lt;p&gt;After today&#039;s IRC conversation on the topic of unit testing, the decision was taken to implement unit tests the same way as functional tests are currently implemented, without mock objects or functional overrides at runtime (see this issue for an explanation: &lt;a href=&quot;http://groups.drupal.org/node/10957&quot; title=&quot;http://groups.drupal.org/node/10957&quot;&gt;http://groups.drupal.org/node/10957&lt;/a&gt;). However, the discussion also touched on many key points that are relevant no matter what approach we take, so here&#039;s a summary for those who weren&#039;t there.&lt;/p&gt;
&lt;p&gt;One of the main outcomes was the need for a better organization of the various kinds of tests that we have. With a clear structure in place, we could put test files in place with minimal code, thus making it easier for contributors to create patches without having to figure out where to add files or how to trick cvs into creating a patch for new files. These basic files would also make it easier to point people to simple tasks that can be processed in a short amount of time without the need for an extensive understanding of the code.&lt;/p&gt;
&lt;p&gt;In order for tests to be easy to write, they must be easy to read and easy to understand. The existing tests are the best documentation that we have for contributors who are new to automated testing. We currently have many tests that try to cover a whole module&#039;s functionalities with a long list of assertions. The problem with such tests is that they make it hard to track down what is happening when a test fails (even if we know what assertion failed, we might need to debug the code that sets the &lt;em&gt;fixture&lt;/em&gt; – the environment in which the test is run). It is also a lot easier to create a small test than it is to make a small addition to an existing mastodon. In other words, tests need to be refactored, just like code.&lt;/p&gt;
&lt;p&gt;Besides reorganizing the structure of the tests, it is also important to make a distinction between the different kinds of tests. It&#039;s not because we are using the same mechanism to process “unit” tests as we do for functional tests that they are the same thing. We currently have tests that simulate specific sequences of user actions (like user.test), tests that simulate the execution of code with specific parameters (like search.test), and some that are somewhere in between (path.test). In order to better structure our tests, we need to be able to indicate what kind of simulation they perform. Should unit tests be in separate files, separate classes, or even simply separate methods? Wherever we put that separation, we also need to make sure that the naming conventions reflect it.&lt;/p&gt;
&lt;p&gt;Finally, making Drupal testable requires refactoring code, and refactoring code breaks existing tests, but this is what is supposed to happen. The whole reason to use automated tests is to be agile and make this kind of overhaul possible by making us aware of how we break things. Converting Drupal to a fully tested framework is a big task, but the work we do now will make future work easier and our testing system (both the testing framework and the tests themselves) will get more stable, to the point where we can make big improvements without breaking everything.&lt;/p&gt;
&lt;p&gt;Note: Credits for many of these points go to the people involved in the IRC discussion (mainly webchick and chx), but I&#039;ve mixed in my own opinion so criticisms go to me.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/10970#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/1280">coding standards</category>
 <category domain="http://groups.drupal.org/taxonomy/term/97">planning</category>
 <category domain="http://groups.drupal.org/taxonomy/term/356">testing</category>
 <category domain="http://groups.drupal.org/taxonomy/term/359">unit testing</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Thu, 24 Apr 2008 07:46:28 +0000</pubDate>
 <dc:creator>flobruit</dc:creator>
 <guid isPermaLink="false">10970 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Unit testing plan</title>
 <link>http://groups.drupal.org/node/10957</link>
 <description>&lt;p&gt;We are pretty ahead with functional tests but unit tests are a completely different problem. The function we want to test calls other functions and so on. While theoretically one can unit test the leaves of the call tree and work from there, saying &quot;drupal_validate_utf8 is already tested and we know it works. So when testing check_plain, I can rely on the fact that drupal_validate_utf8 works as it should so I will just call check_plain with various values and test with assertEqual whether the return value is what I want.&quot; However, you need to unit test every code flow and some parts might be incredibly hard to reach. For example, drupal_get_form calls form_get_cache, drupal_prepare_form, drupal_process_form, form_set_cache, drupal_rebuild_form, drupal_render_form. Even if all these called functions (and everything &quot;below&quot;) them are unit tested, providing an environment (database, other loaded functions for hooks and various callbacks, files)  that will actually result in certain variables having the value we want might be incredibly difficult.&lt;/p&gt;
&lt;p&gt;The traditional solution is to create mock objects, in our case, mock functions. Create a version of drupal_prepare_form which returns exactly the value we want for a particular test and move on. This is not easy with PHP. Once the function is loaded, you can&#039;t override it unless you are using runkit which is a PHP extension from PECL. I am aware of two solutions besides runkit, both of which requires Drupal being parsed.&lt;/p&gt;
&lt;ol&gt;
&lt;lI&gt;Put every function in a separate file, when you want to use the mock version of a function, load that instead of the original. This is just a bit more difficult than runkit, because you can override only on loadtime not runtime but at least you can override.&lt;/li&gt;
&lt;li&gt;Generate mock functions for every Drupal function, load these into memory. Generate a copy of Drupal functions with an original_ prefix, load these too. Call the original function which will in turn will call the mock versions.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Advantages/disadvantages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When you need the original again to be tested, you need a different PHP instance. However, this also allows to change the mock functions from one test to the next. You can even generate them on the fly, either by copying files or just running eval. So you can have a drupal_validate_utf8 which is mocked to a function which returns TRUE and you can have a version which returns FALSE.&lt;/li&gt;
&lt;li&gt;As you need the mock versions to do different (but fixed!) things from one test to the next and unlike the previous ones, these stay in memory, you probably need to call a central function -- which I call the clearinghouse -- which says what this function needs to do.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You basically need to encode some way &quot;I need db_fetch_object to return an object on the first two calls and FALSE on the third&quot;. You can call a &quot;createMockFunction&quot; method with the necessary arguments which describe such a thing. Or you can&lt;/p&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;array(&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;incoming&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;db_fetch_object&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;return&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$object1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;),&lt;br /&gt;array(&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;incoming&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;db_fetch_object&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;return&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$object2&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;),&lt;br /&gt;array(&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;incoming&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;db_fetch_object&#039;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&#039;return&#039; &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;=&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;FALSE&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,&lt;br /&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;The first solution described above better yields to the &quot;createMockFunction&quot; function which in this case would probably load the necessary code from some include, slap the necessary function header on it and eval. The second solution works better with the array as it literally describes what the central function can expect as the test runs. However, the array can be iterated and createMockFunction calls can be issued for the first solution. Or you can build the array as createMockFunction calls arrive and then as the test starts, the central function can pull the array in and act accordingly. createMockFunction is a bit more like what other systems do. The array version is probably a bit more easier to write on the other hand. The difference is not that big.&lt;/p&gt;
&lt;p&gt;And of course, you can always say no to mock functions and just test with the assumption that you have the underlying functions tested and set up the surrounding environment (database, loaded functions, files) so that the code flows the way you wanted. This is the worst, IMO. The load time overrides (first method) is quite a bit cumbersome despite it is what other systems do. Those systems, however, are likely using classes which are more easily overrideable. The central clearinghouse seems to be best suited for Drupal even if the tests are strange arrays.&lt;/p&gt;
&lt;p&gt;Note that this is not unlike what happened to our unique form API: that also uses arrays, it&#039;s totally unique to Drupal but at the end it proved itself to be a very strong tool.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/10957#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 23 Apr 2008 15:21:34 +0000</pubDate>
 <dc:creator>chx</dc:creator>
 <guid isPermaLink="false">10957 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Unit Test Failure Plan</title>
 <link>http://groups.drupal.org/node/10686</link>
 <description>&lt;p&gt;I ran all the unit tests and I get&lt;br /&gt;
  Test cases run: 57/58, Passes: 3123, Failures: 282, Exceptions: 34&lt;br /&gt;
Is this what other folks get?&lt;/p&gt;
&lt;p&gt;Question 1: Do we need to coordinate the fixing of them now?&lt;br /&gt;
Question 2: Are we striving for 0 failures at the end of all this?&lt;/p&gt;
&lt;p&gt;For me question 2 comes first.  Unless we decide we&#039;re striving for 0 failures (and I think we should) then if someone puts the time in now to fix tests, tomorrow they may break again and no one will notice. If no one notices, we cannot correlate commits to unit test failures which is an important part of testing, if not the most important part.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/10686#comments</comments>
 <enclosure url="http://groups.drupal.org/files/unit-test-pass-fail.txt" length="3446" type="text/plain" />
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Mon, 14 Apr 2008 03:41:40 +0000</pubDate>
 <dc:creator>dlhubler</dc:creator>
 <guid isPermaLink="false">10686 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Drupal 7 Automated Testing Sprint in Paris Funding proposal</title>
 <link>http://groups.drupal.org/node/10382</link>
 <description>&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; 20 000 patches submitted by 1200 contributors for Drupal 7 will require:&lt;br /&gt;
* testing tools development with patch testing automation&lt;br /&gt;
* 1200 core contributors to be trained on how to write and maintain core tests&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The tantalizing goal&lt;/strong&gt; The Drupal project lead has presented an interesting challenge to the Drupal project&#039;s core development contributors.  If contributors add 100% testing coverage to Drupal 7, they can reap the benefits of automated testing by having four more months of feature improvements in the development cycle.  Dries has left the Drupal community drooling for more development time.&lt;br /&gt;
&lt;img src=&quot;http://buytaert.net/images/drupal/timeline-drupal-7-testing.jpg&quot;&gt;&lt;/p&gt;
&lt;h1&gt;Current state&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;The problem with Drupal testing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Drupal community has already begun to embrace testing for Drupal 7.  Core contributors are beginning to provide additional tests, or improvements to existing tests along with their patches.  If the Drupal 6 development cycle grew to 9425 patches submitted by 741 unique developers, then it&#039;s possible the Drupal 7 development cycle will have 20 000 patches with 1200 or more core contributors based on growth rates between previous releases.  This presents two challenges for the Drupal community. First, test creation tools, patch testing automation, functional test creation, unit test creation, and maintenance of those tests against the HEAD branch present serious systems integration and collaboration challenges.  Second, assuming this complex infrastructure is working flawlessly then we must go about training 1200 potential core contributors. Contributors will need to make a huge initial investment in test driven development and change the way they contribute to Drupal.  This may takes years. We are going to need a full suite of development best practices and techniques to succeed.&lt;/p&gt;
&lt;p&gt;The primarily method for developer communication is the project module that runs on Drupal.org. We had approximately 200 000 issues and follow-ups in 2007.  Thanks to great maintenance by Derek Wright, Chad Phillips, Adam Light, and Jimmy Berry the project module should scale to handle significant growth. Our infrastructure team lead by Gerhard Killesreiter with lots of leadership by Narayan Newton and backed by reviews from Jeremy Andrews and David Strauss should allow the Drupal infrastructure to scale to meet increases in both patch submissions and testing.&lt;/p&gt;
&lt;p&gt;Stephen Peck and the documentation team continue to make great progress on the huge challenge of gardening Drupal&#039;s documentation.  They will continue to provide a solid framework for patching and test creation documentation to be created.  The popular Drupal dojo is a great model for trainin. Charlie Gordon and as well as others will step up to bootstrap the Drupal communities test creation and test maintenance instruction with Drupal dojo.  Don&#039;t get me wrong, none of these efforts are without their own great challenges, and we are relying on dozens of contributors to perform as admirably as they have in the past.  The beating heart of Drupal is the 24/7 banter and friendly collaborative discussion that go into IRC channel #drupal, now one of half a dozen specialized Drupal channels.  The #drupal IRC channel will continue to be the friendly introduction for person to person support, and test development training, the community does so well.&lt;/p&gt;
&lt;p&gt;However, there one is technique the Drupal community has relied on to make great progress on in the past that we can use again. That&#039;s the Drupal developer sprint.  We&#039;ve done sprints at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drupalcon Amsterdam 1 day bug-fix sprint for 4.7&lt;/li&gt;
&lt;li&gt;OSCMS Yahoo had a sprint&lt;/li&gt;
&lt;li&gt;St. Charles, Illinois lead to Forms API III&lt;/li&gt;
&lt;li&gt;At Drupalcon Barcelona, the CCK redesign efforts are proving to be successful&lt;/li&gt;
&lt;li&gt;The Data architecture sprint in Chicago led to Database TNG and the registry patches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A testing sprint could be critical technique for ensuring the complex infrastructure we are building is ready to support 100% test coverage.&lt;/p&gt;
&lt;h1&gt;Solution&lt;/h1&gt;
&lt;p&gt;We are currently proposing that we conduct a testing sprint with at least four key testing infrastructure developers at DrupalCamp Paris. The sprint offers a mid way point between testing contributors Karoly and Rok, who are both located in Eastern Europe and who recently traveled to Drupalcon Boston.&lt;/p&gt;
&lt;p&gt;The sprint aims to accelerate progress across 5 different testing projects that will support the Drupal 7 testing initiative.  In person communication, will allow for decisions and problems solving to occur at an accelerated rate.&lt;/p&gt;
&lt;h2&gt;Outcomes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;integrated plan for testing, including
&lt;ul&gt;
&lt;li&gt;unit testing&lt;/li&gt;
&lt;li&gt;functional testing&lt;/li&gt;
&lt;li&gt;automated patch testing&lt;/li&gt;
&lt;li&gt;javascript testing plan&lt;/li&gt;
&lt;li&gt;improve automated test creation tools&lt;/li&gt;
&lt;li&gt;infrastructure testing plan&lt;/li&gt;
&lt;li&gt;coverage metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;find ways to improve consistency and quality of tests&lt;/li&gt;
&lt;li&gt;better understanding of current state of testing&lt;/li&gt;
&lt;li&gt;increased test coverage for critical areas; larger number and variety of tests&lt;/li&gt;
&lt;li&gt;infrastructure for accepting and integrating community developed tests&lt;/li&gt;
&lt;li&gt;improvements for &lt;a href=&quot;http://testing.drupal.org&quot; title=&quot;http://testing.drupal.org&quot;&gt;http://testing.drupal.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Deliverables&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;high-level plan for testing&lt;/li&gt;
&lt;li&gt;standards / guidelines / best practices / templates&lt;/li&gt;
&lt;li&gt;significant number of new tests to increase coverage, focusing on key areas&lt;/li&gt;
&lt;li&gt;review / state of current tests report&lt;/li&gt;
&lt;li&gt;plan for and initial implementation for test submission and management process&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Budget&lt;/h2&gt;
&lt;p&gt;There are many expenses with international travel and meeting. We&#039;ve found one opportunity for testing sprinters to meet.  DrupalCamp Paris is taking place April 19th. The organizers of DrupalCamp Paris, Ori and Louis from AF83, have been working with us to provide space, food, and partial accommodations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To bring 4 sprinters together for Drupalcamp Paris we estimate airfare for 4 people to be $3000 US. For 6 people, $5000.&lt;/li&gt;
&lt;li&gt;Hotel accommodation should be $400 for Friday, Saturday, and Sunday.&lt;/li&gt;
&lt;li&gt;Some meals will be provided by AF83, and the Drupalcamp Paris organizers&lt;/li&gt;
&lt;li&gt;Developers are volunteering their time.  The developers are taking 1-2 days off work to travel to the event and volunteering for a full weekend.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Logistics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://tinyurl.com/673kxs&quot;&gt;Map of sprint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arrive the evening of the 18th in Paris.  Depart Monday afternoon the 21st.&lt;/li&gt;
&lt;li&gt;List of potential hotels.&lt;br /&gt;
Friday arrival times by time of arrival from the wiki page:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Morning:&lt;br /&gt;
Charlie: Arrives Thursday morning, ~7-8 AM. Will likely be zonked at that time, though, as it will feel ~midnight. Staying with grandparents.&lt;br /&gt;
Douglas: Arrive Fri 825 AM. staying at Hotel Cyrnos, leave Monday 1:40PM&lt;br /&gt;
Kevin: Arrive Friday 11:05 AM CDG. staying at Hotel Cyrnos, leave Monday 12:55 PM CDG&lt;/p&gt;
&lt;p&gt;Afternoon:&lt;br /&gt;
Jimmy: Arrive Friday 2:55 pm (local) staying at Hotel Acadia Opera, and will leave 12:50 pm (local) on Monday.&lt;/p&gt;
&lt;p&gt;Evening, saturday&lt;br /&gt;
Rok: Arrive Friday 9pm CDG staying at Hotel Acadia Opera, leave Monday 9.20pm CDG&lt;br /&gt;
Karoly: Arrive Friday 9pm CDG staying at Hotel Acadia Opera, leave Monday 8:20pm CDG&lt;br /&gt;
Dries: 12pm saturday&lt;/p&gt;
&lt;h2&gt;Sprinters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Karoli Negyesi - confirmed, funded by NowPublic, country Hungary&lt;/li&gt;
&lt;li&gt;Rok Žlender - confirmed, funded by NowPublic, country Slovenia&lt;/li&gt;
&lt;li&gt;Charlie Gordon - accomodation secured, Google sponsored, country USA&lt;/li&gt;
&lt;li&gt;Jimmy Berry - Confirmed, sponsored by Google, USA&lt;/li&gt;
&lt;li&gt;Kevin Bridges - Confirmed, funding by pingVision, USA&lt;/li&gt;
&lt;li&gt;Douglas Hubler - confirmed, funding by Acquia, USA&lt;/li&gt;
&lt;li&gt;Dries Buytaert - confirmed, funded by Acquia, Belgium&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Results&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://buytaert.net/a-test-framework-in-drupal-7&quot; title=&quot;http://buytaert.net/a-test-framework-in-drupal-7&quot;&gt;http://buytaert.net/a-test-framework-in-drupal-7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cwgordon.com/paris-simpletest-sprint-day-1&quot; title=&quot;http://cwgordon.com/paris-simpletest-sprint-day-1&quot;&gt;http://cwgordon.com/paris-simpletest-sprint-day-1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cwgordon.com/paris-simpletest-sprint-day-2&quot; title=&quot;http://cwgordon.com/paris-simpletest-sprint-day-2&quot;&gt;http://cwgordon.com/paris-simpletest-sprint-day-2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Others???&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 02 Apr 2008 17:15:57 +0000</pubDate>
 <dc:creator>Amazon</dc:creator>
 <guid isPermaLink="false">10382 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Unit -vs- UI testing</title>
 <link>http://groups.drupal.org/node/10107</link>
 <description>&lt;p&gt;Please correct me if I&#039;m wrong, but it seems that this group&#039;s purpose is to concentrate on unit testing and code coverage. Excellent. This is a definite sign of maturity for Drupal.&lt;/p&gt;
&lt;p&gt;But I also see some posts in here that refer more to UI centric testing. Is there yet an effort for organizing this testing as well?&lt;/p&gt;
&lt;p&gt;Unit testing is a great way to find problems that may not always be obvious in the UI, but they are not always the best way to catch problems which may be obvious in the UI. For example, the unit tests for the forms API may confirm that the form tokens are being generated properly but not pick up on the fact that another module alters the token (making this up here :) and so the form submission ultimately fails. At the end of the day, you really need to run through use cases to make sure it all works.&lt;/p&gt;
&lt;p&gt;Typically, folks will run functional/UI tests by hand (create, edit, delete a node by hand, etc...). This is OK, but not ideal. Manual testing is time consuming and difficult to reproduce.&lt;/p&gt;
&lt;p&gt;I&#039;ve done testing of applications where automation was not an option, and as standardized as I tried to make the list of tests I ran, they were never run the same way twice, leaving little crevices for regression to creep through.&lt;/p&gt;
&lt;p&gt;I believe we should consider trying to automate UI testing as well as unit testing. This would give us a gorgeous set of regression tests.&lt;/p&gt;
&lt;p&gt;I guess my main question is whether this is the place/time to bring that up. I don&#039;t think it would take any attention/resources away from the unit testing efforts here.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/10107#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/359">unit testing</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Tue, 25 Mar 2008 03:16:29 +0000</pubDate>
 <dc:creator>Harry Slaughter</dc:creator>
 <guid isPermaLink="false">10107 at http://groups.drupal.org</guid>
</item>
<item>
 <title>SimpleTest Roadmap for Drupal 7</title>
 <link>http://groups.drupal.org/node/10099</link>
 <description>&lt;p&gt;There are many things that need to be done to &lt;a href=&quot;http://drupal.org/project/simpletest&quot;&gt;SimpleTest&lt;/a&gt; is to provide full test coverage, as requested by Dries, and be placed in the core. A lot of work has already been completed and we are making great strives towards making this a reality, but there is still much to do.&lt;/p&gt;
&lt;p&gt;I have provided a general overview of what needs to be accomplished.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Complete functional tests. (&lt;a href=&quot;http://groups.drupal.org/node/9408&quot;&gt;list&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Review functional tests and ensure that they pass against HEAD and test necessary functionality.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/237959&quot;&gt;Plan unit testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Generate stub unit tests using &lt;a href=&quot;http://drupal.org/project/simpletest_unit&quot;&gt;SimpleTest Unit Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Write unit tests.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are a number of tasks that need to be completed to accomplish the goals above. This list is by no means final and will most likely grow with time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/244741&quot;&gt;#244741&lt;/a&gt;: Remove drupalVariableSet&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/244701&quot;&gt;#244701&lt;/a&gt;: Internal browser doesn&#039;t select first option and ignores selected options&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/243769&quot;&gt;#243769&lt;/a&gt;: Reset Environment&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/243367&quot;&gt;#243367&lt;/a&gt;: System tests are broken&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/243532&quot;&gt;#243532&lt;/a&gt;: Parse drupal errors&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/242958&quot;&gt;#242958&lt;/a&gt;: Clean up the modules code a bit&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/242843&quot;&gt;#242843&lt;/a&gt;: Clean up database table from crashed tests&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/242934&quot;&gt;#242934&lt;/a&gt;: Polish profile test&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/239358&quot;&gt;#239358&lt;/a&gt;: Get tests working for upload module&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/241956&quot;&gt;#241956&lt;/a&gt;: Do not call exit in simpletest module for CLI&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/242069&quot;&gt;#242069&lt;/a&gt;: Simpletest should include exception data in reporting&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/242474&quot;&gt;#242474&lt;/a&gt;: Using fnmatch breaks simpletest on windows&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/240619&quot;&gt;#240619&lt;/a&gt;: Default assertText Message&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/240590&quot;&gt;#240590&lt;/a&gt;: Remove various cleanup variables from DrupalTestCa&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/240590&quot;&gt;#240590&lt;/a&gt;: Remove depreciated method names&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/238379&quot;&gt;#238379&lt;/a&gt;: A little cleanup of the new UA code&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/239565&quot;&gt;#239565&lt;/a&gt;: Multiple test functions and db_prefixing cause error&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/238640&quot;&gt;#238640&lt;/a&gt;: Assert function for checking the non-existance of fields&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/238538&quot;&gt;#238538&lt;/a&gt;: Story is now article&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/203784&quot;&gt;#203784&lt;/a&gt;: Upload settings test&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/234409&quot;&gt;#234409&lt;/a&gt;: Create Group Convention&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/212351&quot;&gt;#212351&lt;/a&gt;: Polish the crap out of SimpleTest module&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/237964&quot;&gt;#237964&lt;/a&gt;: Clean up documentaion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/237963&quot;&gt;#237963&lt;/a&gt;: Get coding standards into Coder Module&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/234405&quot;&gt;#234405&lt;/a&gt;: Coding Standards&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237931&quot;&gt;#237931&lt;/a&gt;: Support for file input type in the new internal browser&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/233161&quot;&gt;#233161&lt;/a&gt;: Tests for issues&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/179534&quot;&gt;#179534&lt;/a&gt;: Use a separate test database, transactional/rollback&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/231348&quot;&gt;#231348&lt;/a&gt;: Find a consistent naming convention for the *.test&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/235013&quot;&gt;#235013&lt;/a&gt;: desc is not Drupalish, use description&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237940&quot;&gt;#237940&lt;/a&gt;: drupalPost throws exception in new browser&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237934&quot;&gt;#237934&lt;/a&gt;: assertFieldById throws exception&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237667&quot;&gt;#237667&lt;/a&gt;: get_info to getInfo&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237407&quot;&gt;#237407&lt;/a&gt;: assertField() is broken&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/237369&quot;&gt;#237369&lt;/a&gt;: Clean up user-related functions&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/236535&quot;&gt;#236535&lt;/a&gt;: Consistent usage of t()&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/236131&quot;&gt;#236131&lt;/a&gt;: Create dummy files that can be used by tests for u&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/232109&quot;&gt;#232109&lt;/a&gt;: Replace SimpleTest browser with our own&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/59505&quot;&gt;#59505&lt;/a&gt;: Taxonomy tests need updating&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/209297&quot;&gt;#209297&lt;/a&gt;: New param in drupalGet&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/230138&quot;&gt;#230138&lt;/a&gt;: Absence defaults[&#039;created&#039;] in drupalCreateNode&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/229179&quot;&gt;#229179&lt;/a&gt;: Wrong format in drupalCreateNode&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;b&gt;Large number of test issues.&lt;/b&gt;&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a list of issues that need to be decided.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/214028&quot;&gt;#214028&lt;/a&gt;: Break Tests up by method&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;a href=&quot;http://drupal.org/node/199880&quot;&gt;#199880&lt;/a&gt;: Call to undefined method BadGroupTest::getTestIns&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/214570&quot;&gt;#214570&lt;/a&gt;: Replicate &#039;Begin&#039; button at the top of the page&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/212304&quot;&gt;#212304&lt;/a&gt;: drupalCreateNode does not use the internal browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/230269&quot;&gt;#230269&lt;/a&gt;: Generate urls for running tests directly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/212415&quot;&gt;#212415&lt;/a&gt;: Use hook_requirements() rather than odd simpletest&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/233161&quot;&gt;#233161&lt;/a&gt;: Tests for issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following are fixed issues that have comments that need to be looked at for possible problems found through testing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/245955&quot;&gt;#245955&lt;/a&gt;: Review: BlogAPI Module Test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/244763&quot;&gt;#244763&lt;/a&gt;: Review: User Module Test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/245904&quot;&gt;#245904&lt;/a&gt;: XMLRPC doesn&#039;t check for NULL error object&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/242475&quot;&gt;#242475&lt;/a&gt;: Help module test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/241467&quot;&gt;#241467&lt;/a&gt;: DBLog module test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/240644&quot;&gt;#240644&lt;/a&gt;: Blog module test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/244602&quot;&gt;#244602&lt;/a&gt;: Forum test&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/237336&quot;&gt;#237336&lt;/a&gt;: Url Aliases no longer work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Things to remember to fix/change.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/node/244763&quot;&gt;#244763&lt;/a&gt;: Move unit tests out of user functional tests&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Mon, 24 Mar 2008 20:45:29 +0000</pubDate>
 <dc:creator>boombatower@drupal.org</dc:creator>
 <guid isPermaLink="false">10099 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Develop an xss and sql injection scanner based on SimpleTest</title>
 <link>http://groups.drupal.org/node/9798</link>
 <description>&lt;p&gt;What I wanna develop for SOC 2008 is a module called security (or add security function to simpletest existing module) to enable users checking their drupal installation against xss and sql injection vulnerabilities.&lt;br /&gt;
It will be also good for module developers, in fact they can check their module before submitting them to drupal website. Users could be more protected against vulnerabilities that became from third part modules.&lt;br /&gt;
The objective of this work is to realize automated penetration test on drupal installation.&lt;/p&gt;
&lt;p&gt;It will be based upon SimpleTest, already used by Rasmus (php core developer) to develop his own closed source xss scanner. SimpleTest is a jUnit similar library written for php.&lt;/p&gt;
&lt;p&gt;My module could easily been extended to add more functionalities about security, but basically I think that this two are the most important.&lt;br /&gt;
If someone has functionality ideas to improve my project and make it better I&#039;m here, listening for more proposal.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/coding-standards-and-performance-optimization&quot;&gt;Coding Standards and Performance Optimization&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/9798#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/4450">soc2008 xss scanner sqlinjection</category>
 <group domain="http://groups.drupal.org/soc-2008">SoC 2008</group>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <group domain="http://groups.drupal.org/coding-standards-and-performance-optimization">Coding Standards and Performance Optimization</group>
 <pubDate>Fri, 14 Mar 2008 15:02:03 +0000</pubDate>
 <dc:creator>ingo86</dc:creator>
 <guid isPermaLink="false">9798 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Drupal QA in the Next Year</title>
 <link>http://groups.drupal.org/node/9727</link>
 <description>&lt;p&gt;By: Robin Monks&lt;/p&gt;
&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Drupal is community. It&amp;#8217;s a community of visionaries that make Drupal what it is, we all want to see Drupal be more powerful, more flexible, and just plain better than the competition!&lt;/p&gt;
&lt;p&gt;That said we need to be aware that the more popular our product gets, the more we need to test for various scenarios; and not just from the developers point of view, but from the users. This is where Quality Assurance comes into play. QA can help give Drupal core that extra level of stability and sanity, and the good news is we&amp;#8217;ve already taken the first steps.&lt;/p&gt;
&lt;h2&gt;Non-Interactive Functionality Testing (Unit Tests) [Already Happening]&lt;/h2&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://drupal.org/project/simpletest&quot;&gt;http://drupal.org/project/simpletest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://drupal.org/project/Drupaltestbed&quot;&gt;http://drupal.org/project/Drupaltestbed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://drupal.org/project/project_issue_file_test&quot;&gt;http://drupal.org/project/project_issue_file_test&lt;/a&gt; (aka. PIFT)&lt;/p&gt;
&lt;p&gt;Non-interactive testing via projects such as &lt;a href=&quot;http://testing.drupal.org&quot;&gt;http://testing.drupal.org&lt;/a&gt; will go a long ways toward eliminating the need for developers to manually test each submitted patch for syntax quality and general &amp;#8220;does it run?&amp;#8221;-ability. It will be sure to allow patches to be processed much faster.&lt;/p&gt;
&lt;h2&gt;Smoke Testing [Concept]&lt;/h2&gt;
&lt;p&gt;We need a list of common tasks that volunteers can perform on various host and browser environments to test for broken or unexpected functionality. I plan to make some further guidelines, and perhaps some tools, for this shortly.&lt;/p&gt;
&lt;h2&gt;User Interface Quality [Partially Complete]&lt;/h2&gt;
&lt;p&gt;The g.d.o &lt;a href=&quot;http://groups.drupal.org/usability&quot;&gt;Usability Group&lt;/a&gt; has made great progress to this goal, here is some of their fine work:&lt;/p&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://groups.drupal.org/node/8428&quot;&gt;Views 2.0 UI guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://drupal.org/about/authoring&quot;&gt;Handbook style guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#183; &lt;a href=&quot;http://drupal.org/documentation-writers-guide&quot;&gt;Documentation writer&amp;#8217;s guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are some things I&amp;#8217;d like to see added:&lt;/p&gt;
&lt;p&gt;&amp;#183; Style guide for help text and prompts in Drupal (eg, the confusing password strength &amp;#8220;error&amp;#8221; during install)&lt;/p&gt;
&lt;p&gt;&amp;#183; Module and form description style guide&lt;/p&gt;
&lt;p&gt;&amp;#183; A general UI element style guide a la Gnome&lt;/p&gt;
&lt;h3&gt;Disability Usability&lt;/h3&gt;
&lt;p&gt;We need to ensure all Drupal features can be access by those with screen readers, or with color blindness.&lt;/p&gt;
&lt;h2&gt;Full Standard Compliance [Partially Complete]&lt;/h2&gt;
&lt;p&gt;We need to monitor to ensure that current Drupal features (HTML, JS, CSS) meet existing standards; we also need to make sure as we enter the world of the semantic web, where data is free-for-all, that we also stick to know standards and conventions so as to allow the presented data to be as interoperable as possible.&lt;/p&gt;
&lt;h2&gt;Community-powered Quality Events [Concept]&lt;/h2&gt;
&lt;p&gt;Bug-a-tons, bugdays; prizes for those who process the most bugs, etc. These could all be means to get more people involved in the issue queues, and to enhance the overall quality of Drupal.&lt;/p&gt;
&lt;h2&gt;Central Source of Information [Concept]&lt;/h2&gt;
&lt;p&gt;There needs to be a central location where everyone interested in Drupal quality can find out information, and participate. The great thing about quality testing is those involved don&amp;#8217;t necessarily have to be developers. It&amp;#8217;s a great way to get more people involved in the Drupal development process!&lt;/p&gt;
&lt;p&gt;I think the g.d.o &amp;#8220;Quality Assurance&amp;#8221; group has the potential to be that place. I&amp;#8217;ll be making myself active in that group and will help co-ordinate changes to implement the items in this &amp;#8220;rough guide&amp;#8221; I&amp;#8217;ve outlined. None of it should be considered &amp;#8220;official&amp;#8221;, but I believe it will serve as a great guide for future QA efforts.&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/quality-assurance&quot;&gt;Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/9727#comments</comments>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <group domain="http://groups.drupal.org/quality-assurance">Quality Assurance</group>
 <pubDate>Wed, 12 Mar 2008 21:16:45 +0000</pubDate>
 <dc:creator>Robin Monks@drupal.org</dc:creator>
 <guid isPermaLink="false">9727 at http://groups.drupal.org</guid>
</item>
<item>
 <title>Test stub generator...</title>
 <link>http://groups.drupal.org/node/9726</link>
 <description>&lt;p&gt;Hello, I&#039;ve written a perl script (fastens fire-proof suit) that generates module files as well as a test file complete with a test class and stubbed methods. I&#039;ve posted the code as an issue to the simpletest module as webchick suggested: &lt;a href=&quot;http://drupal.org/node/233261&quot; title=&quot;http://drupal.org/node/233261&quot;&gt;http://drupal.org/node/233261&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the documentation:&lt;/p&gt;
&lt;p&gt;Features:&lt;br /&gt;
 - creates a module folder and associated file skeletons&lt;br /&gt;
 - generates a test class and test methods and places them in a test file&lt;br /&gt;
 recognized by SimpleTest. This currently only covers unit tests,&lt;br /&gt;
 and not higher level tests like functional or integration tests.&lt;br /&gt;
 - can be re-run throughout module development&lt;br /&gt;
 - if you add a new function to a module, rerun the script and a test&lt;br /&gt;
 stub will be generated and placed in the appropriate test class&lt;br /&gt;
 - works with existing modules&lt;br /&gt;
 - adds hook_simpletest to an existing module&lt;/p&gt;
&lt;p&gt;Issues:&lt;br /&gt;
 - test stubs intentionally fail. I tried replicating PHPUnit&#039;s&lt;br /&gt;
 TestNotImplementedException, but I didn&#039;t find a similar facility&lt;/p&gt;
&lt;p&gt;Assumptions:&lt;br /&gt;
 - the drupal coding standard is followed (generally, 1 tab == 2 spaces)&lt;br /&gt;
 - a single module is defined per directory&lt;br /&gt;
 - the module has the same name as the directory&lt;/p&gt;
&lt;p&gt;Features Not Included:&lt;br /&gt;
 - getters and setters for classes defined in module file&lt;br /&gt;
 - class handling in general is not working, but the basic code is in place&lt;/p&gt;
&lt;p&gt;TODO:&lt;br /&gt;
 - complete handling for classes&lt;br /&gt;
 - add handling for function removal by developer&lt;br /&gt;
 - make template variables files - is this necessary?&lt;br /&gt;
 - create CRUD scaffolds a la Ruby on Rails&lt;br /&gt;
 - improve test coverage to include suites and further automation&lt;/p&gt;
&lt;p&gt;Anyway, I hope you find this useful. I&#039;m using it internally at my company.  It eliminates a lot of the tedium of creating the tests.  Note that it simply covers unit tests and not functional/regression/integration tests.  There&#039;s lots that could be added.  I&#039;m hoping to get lots of feedback on it.&lt;/p&gt;
&lt;p&gt;-Andy&lt;/p&gt;
&lt;div class=&quot;og_rss_groups&quot;&gt;&lt;a href=&quot;/testing-qa&quot;&gt;Testing and Quality Assurance&lt;/a&gt;&lt;/div&gt;</description>
 <comments>http://groups.drupal.org/node/9726#comments</comments>
 <category domain="http://groups.drupal.org/taxonomy/term/357">simpletest</category>
 <category domain="http://groups.drupal.org/taxonomy/term/359">unit testing</category>
 <group domain="http://groups.drupal.org/testing-qa">Testing and Quality Assurance</group>
 <pubDate>Wed, 12 Mar 2008 21:05:58 +0000</pubDate>
 <dc:creator>lego1974</dc:creator>
 <guid isPermaLink="false">9726 at http://groups.drupal.org</guid>
</item>
<item>
 <title>SimpleTest DROP Tasks</title>
 <link>http://groups.drupal.org/node/9625</link>
 <description>&lt;p&gt;Some SimpleTests would make great DROP tasks. So I propose we create a list of the most-needed SimpleTests, and at any given time, the top 3-5 are active DROP tasks. Edit the table below; I&#039;ll be updating the DROP issue queue(s) as necessary.&lt;/p&gt;
&lt;p&gt;Take a look at &lt;a href=&quot;http://groups.drupal.org/node/9408&quot; title=&quot;http://groups.drupal.org/node/9408&quot;&gt;http://groups.drupal.org/node/9408&lt;/a&gt; ... here are the first items from that list that I see ... chx has asked that he be contacted if you begin working on an item from his list&lt;/p&gt;
&lt;table width=&quot;100%&quot;&gt;
&lt;th&gt;
    Title
  &lt;/th&gt;
&lt;th&gt;
    Description
  &lt;/th&gt;
&lt;th&gt;
    Status
 &lt;/th&gt;
&lt;tr&gt;
&lt;td&gt;
      blog_module
    &lt;/td&gt;
&lt;td&gt;
&lt;ol&gt;
&lt;li&gt;User has access to create, edit or delete their own blog entries when given the permission.&lt;/li&gt;
&lt;li&gt;User has access to create, edit or delete any blog entries when given the permission.&lt;/li&gt;
&lt;li&gt;Verify the “View recent blog entries” links to the user&#039;s blog page. (Url: blog/%uid)&lt;/li&gt;
&lt;li&gt;Verify the “View recent blog entries” link is on the user page when they have permission to create blog entries.  (Url: user/%uid)&lt;/li&gt;
&lt;li&gt;Displays help information on the help page and only viewable for users that have access into the admin area. (Url: admin/help/blog)&lt;/li&gt;
&lt;li&gt;Display a blog editing form when viewing the url node/%nid/edit and the user has permission to edit blog entries.  Check for both permissions (edit own blog entries and edit any blog entry).&lt;/li&gt;
&lt;li&gt;Verify the breadcrumbs are being displayed on the blog pages.&lt;/li&gt;
&lt;li&gt;Adds a link to the user&#039;s blogs on the blog page and the full node view of the blog.&lt;/li&gt;
&lt;li&gt;Display a blog feed starting with the latest blog. (Url: blog/feed)&lt;/li&gt;
&lt;li&gt;Display a blog feed per user when that user has permission to create a blog. (Url: blog/%uid/feed)&lt;/li&gt;
&lt;li&gt;Display a blog page per user when that user has permission to create a blog. (Url: blog/%uid)&lt;/li&gt;
&lt;li&gt;Display a blog page containing all published blogs. (Url: blog)&lt;/li&gt;
&lt;li&gt;Display a recent blogs block when the block is enabled.&lt;/li&gt;
&lt;/ol&gt;
&lt;/td&gt;
&lt;td&gt;
      Posted to DROP site.
    &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
      color_module
    &lt;/td&gt;
&lt;td&gt;
      Suggested tests needed....
    &lt;/td&gt;
&lt;td&gt;
      Awaiting suggested tests.
    &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
      dblog_module
    &lt;/td&gt;
&lt;td&gt;
&lt;ol&gt;
&lt;li&gt;Displays help information on the help page and only viewable for users that have access into the admin area. (url: admin/help/blog)&lt;/li&gt;
&lt;li&gt;Setting the database logging settings to 100 (url: admin/reports/page-not-found).  Fill up the error log with more then 100 and verify that it only keeps hundred.&lt;/li&gt;
&lt;li&gt;Displays the database log and only user with admin rights are able to access it. (url: admin/reports/dblog)&lt;/li&gt;
&lt;li&gt;Display