[Bash-completion-commits] [SCM] bash-completion branch, master, updated. 453a55e9c8da9e03fbb735946bacd51fefd36380

Freddy Vulto fvulto at gmail.com
Fri Oct 2 08:53:37 UTC 2009


The following commit has been merged in the master branch:
commit 453a55e9c8da9e03fbb735946bacd51fefd36380
Author: Freddy Vulto <fvulto at gmail.com>
Date:   Fri Oct 2 10:53:00 2009 +0200

    (testsuite) Fix assert_bash_exec to match prompt
    Added documentation to "Testing" chapter:
    - Running tests via cron
    - Specifying bash binary

diff --git a/doc/html~/main.html b/doc/html~/main.html
index 86ce6d8..a4e5d6e 100644
--- a/doc/html~/main.html
+++ b/doc/html~/main.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bash-completion</title><link rel="stylesheet" href="./docbook-xsl.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /></head><body><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id2603628"></a>Bash-completion</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Freddy</span> <span class="othername">Vulto</span> <span class="surname">(FVu)</span></h3></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="3"><b>Revision History</b></th></tr><tr><td align="left">Revision 1.0</td><td align="left">Mar 2009</td><td align="left">FV(</td></tr></table></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#_preface">Preface</a></span></dt><dt><span class="part"><a href="#_bash_completion">I. Bash completion</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_environment_variables">1. Environment variables</a></span></dt></dl></dd><dt><span class="part"><a href="#_coding_style_guide">II. Coding Style Guide</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_introduction">2. Introduction</a></span></dt></dl></dd><dt><span class="part"><a href="#_automated_testing">III. Automated testing</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_introduction_2">3. Introduction</a></span></dt><dt><span class="chapter"><a href="#_installing_dejagnu">4. Installing DejaGnu</a></span></dt><dd><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_structure">5. Structure</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt><dt><span class="section"><a href="#_running_the_tests">5.2. Running the tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_maintenance">6. Maintenance</a></span></dt><dd><dl><dt><span class="section"><a href="#_adding_a_completion_test">6.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">6.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">6.3. Fixing a unit test</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_rationale">7. Rationale</a></span></dt><dd><dl><dt><span class="section"><a href="#_naming_conventions">7.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">7.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">7.1.2. script/generate</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_reference">8. Reference</a></span></dt><dt><span class="chapter"><a href="#Test_context">9. Test context</a></span></dt><dd><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">9.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">9.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">9.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">9.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">9.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">9.3. inputrc</a></span></dt></dl></dd></dl></dd><dt><span class="index"><a href="#_index">Index</a></span></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>9.1. <a href="#id2644163">What happens when completion tests are run?</a></dt><dt>9.2. <a href="#id2646974">What happens when install tests are run?</a></dt><dt>9.3. <a href="#id2636096">What happens when unit tests are run?</a></dt></dl></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_preface"></a>Preface</h2></div></div></div><p>Bash completion extends bashs standard completion behavior to achieve
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bash-completion</title><link rel="stylesheet" href="./docbook-xsl.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /></head><body><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="id3008517"></a>Bash-completion</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Freddy</span> <span class="othername">Vulto</span> <span class="surname">(FVu)</span></h3></div></div><div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="3"><b>Revision History</b></th></tr><tr><td align="left">Revision 1.0</td><td align="left">Mar 2009</td><td align="left">FV(</td></tr></table></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#_preface">Preface</a></span></dt><dt><span class="part"><a href="#_bash_completion">I. Bash completion</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_environment_variables">1. Environment variables</a></span></dt></dl></dd><dt><span class="part"><a href="#_coding_style_guide">II. Coding Style Guide</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_introduction">2. Introduction</a></span></dt></dl></dd><dt><span class="part"><a href="#_automated_testing">III. Automated testing</a></span></dt><dd><dl><dt><span class="chapter"><a href="#_introduction_2">3. Introduction</a></span></dt><dt><span class="chapter"><a href="#_installing_dependencies">4. Installing dependencies</a></span></dt><dd><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt><dt><span class="section"><a href="#_fedora_rhel_centos">4.2. Fedora/RHEL/CentOS</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_structure">5. Structure</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_running_the_tests">6. Running the tests</a></span></dt><dd><dl><dt><span class="section"><a href="#_running_tests_via_cron">6.1. Running tests via cron</a></span></dt><dt><span class="section"><a href="#_specifying_bash_binary">6.2. Specifying bash binary</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_maintenance">7. Maintenance</a></span></dt><dd><dl><dt><span class="section"><a href="#_adding_a_completion_test">7.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">7.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">7.3. Fixing a unit test</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_rationale">8. Rationale</a></span></dt><dd><dl><dt><span class="section"><a href="#_naming_conventions">8.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">8.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">8.1.2. script/generate</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_reference">9. Reference</a></span></dt><dt><span class="chapter"><a href="#Test_context">10. Test context</a></span></dt><dd><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">10.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">10.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">10.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">10.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">10.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">10.3. inputrc</a></span></dt></dl></dd></dl></dd><dt><span class="index"><a href="#_index">Index</a></span></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>10.1. <a href="#id3041757">What happens when completion tests are run?</a></dt><dt>10.2. <a href="#id3052229">What happens when install tests are run?</a></dt><dt>10.3. <a href="#id3055853">What happens when unit tests are run?</a></dt></dl></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_preface"></a>Preface</h2></div></div></div><p>Bash completion extends bashs standard completion behavior to achieve
 complex command lines with just a few keystrokes.  This project was
 conceived to produce programmable completion routines for the most
 common Linux/UNIX commands, reducing the amount of typing sysadmins
@@ -33,7 +33,7 @@ and programmers need to do on a daily basis.</p></div><div class="part" lang="en
     will do correct path completion for tar file contents.  If unset or null,
     `tar’ completion will do correct completion for paths to tar files.  See
     also README.
-</dd></dl></div></div></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="_coding_style_guide"></a>Part II. Coding Style Guide</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#_introduction">2. Introduction</a></span></dt></dl></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_introduction"></a>Chapter 2. Introduction</h2></div></div></div><p>This document attempts to explain the basic styles and patterns that are used in the bash completion.  New code should try to conform to these standards so that it is as easy to maintain as existing code.  Of course every rule has an exception, but it’s important to know the rules nonetheless!</p><p>This is particularly directed at people new to the bash completion codebase, who are in the process of getting their code reviewed.  Before getting a review, please read over this document and make sure your code conforms to the recommendations here.</p></div></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="_automated_testing"></a>Part III. Automated testing</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#_introduction_2">3. Introduction</a></span></dt><dt><span class="chapter"><a href="#_installing_dejagnu">4. Installing DejaGnu</a></span></dt><dd><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_structure">5. Structure</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt><dt><span class="section"><a href="#_running_the_tests">5.2. Running the tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_maintenance">6. Maintenance</a></span></dt><dd><dl><dt><span class="section"><a href="#_adding_a_completion_test">6.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">6.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">6.3. Fixing a unit test</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_rationale">7. Rationale</a></span></dt><dd><dl><dt><span class="section"><a href="#_naming_conventions">7.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">7.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">7.1.2. script/generate</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_reference">8. Reference</a></span></dt><dt><span class="chapter"><a href="#Test_context">9. Test context</a></span></dt><dd><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">9.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">9.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">9.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">9.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">9.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">9.3. inputrc</a></span></dt></dl></dd></dl></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_introduction_2"></a>Chapter 3. Introduction</h2></div></div></div><p>The bash-completion package contains an automated test suite.  Running the tests should help verifying that bash-completion works as expected.  The tests are also very helpful in uncovering software regressions at an early stage.</p><p>The bash-completion test suite is written on top of the <a class="ulink" href="http://www.gnu.org/software/dejagnu/" target="_top">DejaGnu</a> testing framework.  DejaGnu is written in <a class="ulink" href="http://expect.nist.gov" target="_top">Expect</a>, which in turn uses <a class="ulink" href="http://tcl.sourceforge.net" target="_top">Tcl</a> — Tool command language.</p></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_installing_dejagnu"></a>Chapter 4. Installing DejaGnu</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt></dl></div><p>Installing DejaGnu should be easy using your local package manager.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_debian_ubuntu"></a>4.1. Debian/Ubuntu</h2></div></div></div><p>On Debian/Ubuntu you can use <code class="literal">apt-get</code>:</p><pre class="screen">sudo apt-get install dejagnu</pre><p>This should also install the necessary <code class="literal">expect</code> and <code class="literal">tcl</code> packages.</p></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_structure"></a>Chapter 5. Structure</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt><dt><span class="section"><a href="#_running_the_tests">5.2. Running the tests</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_main_areas_dejagnu_tools"></a>5.1. Main areas (DejaGnu tools)</h2></div></div></div><p>The tests are grouped into different areas, called <span class="emphasis"><em>tool</em></span> in DejaGnu:</p><div class="variablelist"><dl><dt><span class="term">
+</dd></dl></div></div></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="_coding_style_guide"></a>Part II. Coding Style Guide</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#_introduction">2. Introduction</a></span></dt></dl></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_introduction"></a>Chapter 2. Introduction</h2></div></div></div><p>This document attempts to explain the basic styles and patterns that are used in the bash completion.  New code should try to conform to these standards so that it is as easy to maintain as existing code.  Of course every rule has an exception, but it’s important to know the rules nonetheless!</p><p>This is particularly directed at people new to the bash completion codebase, who are in the process of getting their code reviewed.  Before getting a review, please read over this document and make sure your code conforms to the recommendations here.</p></div></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="_automated_testing"></a>Part III. Automated testing</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="#_introduction_2">3. Introduction</a></span></dt><dt><span class="chapter"><a href="#_installing_dependencies">4. Installing dependencies</a></span></dt><dd><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt><dt><span class="section"><a href="#_fedora_rhel_centos">4.2. Fedora/RHEL/CentOS</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_structure">5. Structure</a></span></dt><dd><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_running_the_tests">6. Running the tests</a></span></dt><dd><dl><dt><span class="section"><a href="#_running_tests_via_cron">6.1. Running tests via cron</a></span></dt><dt><span class="section"><a href="#_specifying_bash_binary">6.2. Specifying bash binary</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_maintenance">7. Maintenance</a></span></dt><dd><dl><dt><span class="section"><a href="#_adding_a_completion_test">7.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">7.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">7.3. Fixing a unit test</a></span></dt></dl></dd><dt><span class="chapter"><a href="#_rationale">8. Rationale</a></span></dt><dd><dl><dt><span class="section"><a href="#_naming_conventions">8.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">8.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">8.1.2. script/generate</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#_reference">9. Reference</a></span></dt><dt><span class="chapter"><a href="#Test_context">10. Test context</a></span></dt><dd><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">10.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">10.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">10.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">10.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">10.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">10.3. inputrc</a></span></dt></dl></dd></dl></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_introduction_2"></a>Chapter 3. Introduction</h2></div></div></div><p>The bash-completion package contains an automated test suite.  Running the tests should help verifying that bash-completion works as expected.  The tests are also very helpful in uncovering software regressions at an early stage.</p><p>The bash-completion test suite is written on top of the <a class="ulink" href="http://www.gnu.org/software/dejagnu/" target="_top">DejaGnu</a> testing framework.  DejaGnu is written in <a class="ulink" href="http://expect.nist.gov" target="_top">Expect</a>, which in turn uses <a class="ulink" href="http://tcl.sourceforge.net" target="_top">Tcl</a> — Tool command language.</p></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_installing_dependencies"></a>Chapter 4. Installing dependencies</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_debian_ubuntu">4.1. Debian/Ubuntu</a></span></dt><dt><span class="section"><a href="#_fedora_rhel_centos">4.2. Fedora/RHEL/CentOS</a></span></dt></dl></div><p>Installing dependencies should be easy using your local package manager.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_debian_ubuntu"></a>4.1. Debian/Ubuntu</h2></div></div></div><p>On Debian/Ubuntu you can use <code class="literal">apt-get</code>:</p><pre class="screen">sudo apt-get install dejagnu tcllib</pre><p>This should also install the necessary <code class="literal">expect</code> and <code class="literal">tcl</code> packages.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fedora_rhel_centos"></a>4.2. Fedora/RHEL/CentOS</h2></div></div></div><p>On Fedora and RHEL/CentOS (with EPEL) you can use <code class="literal">yum</code>:</p><pre class="screen">sudo yum install dejagnu tcllib</pre><p>This should also install the necessary <code class="literal">expect</code> and <code class="literal">tcl</code> packages.</p></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_structure"></a>Chapter 5. Structure</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_main_areas_dejagnu_tools">5.1. Main areas (DejaGnu tools)</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_main_areas_dejagnu_tools"></a>5.1. Main areas (DejaGnu tools)</h2></div></div></div><p>The tests are grouped into different areas, called <span class="emphasis"><em>tool</em></span> in DejaGnu:</p><div class="variablelist"><dl><dt><span class="term">
 <span class="strong"><strong>completion</strong></span>
 </span></dt><dd>
   Functional tests per completion.
@@ -45,11 +45,14 @@ and programmers need to do on a daily basis.</p></div><div class="part" lang="en
 <span class="strong"><strong>unit</strong></span>
 </span></dt><dd>
   Unit tests for bash-completion helper functions.
-</dd></dl></div><p>Each tool has a slightly different way of loading the test fixtures, see <a class="link" href="#Test_context" title="Chapter&#xA0;9.&#xA0;Test context">Test context</a> below.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_the_tests"></a>5.2. Running the tests</h2></div></div></div><p>The tests are run by calling <code class="literal">runtest</code> in the test directory:</p><pre class="screen">runtest --outdir log --tool completion
+</dd></dl></div><p>Each tool has a slightly different way of loading the test fixtures, see <a class="link" href="#Test_context" title="Chapter&#xA0;10.&#xA0;Test context">Test context</a> below.</p></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_running_the_tests"></a>Chapter 6. Running the tests</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_running_tests_via_cron">6.1. Running tests via cron</a></span></dt><dt><span class="section"><a href="#_specifying_bash_binary">6.2. Specifying bash binary</a></span></dt></dl></div><p>The tests are run by calling <code class="literal">runtest</code> in the test directory:</p><pre class="screen">runtest --outdir log --tool completion
 runtest --outdir log --tool install
 runtest --outdir log --tool unit</pre><p>The commands above are already wrapped up in shell scripts within the <code class="literal">test</code> directory:</p><pre class="screen">./runCompletion
 ./runInstall
-./runUnit</pre></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_maintenance"></a>Chapter 6. Maintenance</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_adding_a_completion_test">6.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">6.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">6.3. Fixing a unit test</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_adding_a_completion_test"></a>6.1. Adding a completion test</h2></div></div></div><p>You can run <code class="literal">cd test &amp;&amp; ./generate</code> to add a test.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fixing_a_completion_test"></a>6.2. Fixing a completion test</h2></div></div></div><p>Let’s consider this real-life example where an ssh completion bug is fixed.  First you’re triggered by unsuccessful tests:</p><pre class="screen">$ ./runCompletion
+./runUnit</pre><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_running_tests_via_cron"></a>6.1. Running tests via cron</h2></div></div></div><p>The test suite requires a connected terminal (tty).  When invoked via cron, no tty is connected and the test suite may respond with this error:</p><pre class="screen">can't read "multipass_name": no such variable</pre><p>To run the tests successfully via cron, connect a terminal by redirecting stdin from a tty, e.g. /dev/tty50:</p><pre class="screen">./runUnit &lt; /dev/tty50</pre><p>If the process doesn’t run as root, root will have to change the owner and
+permissions of the tty.</p><p>In Linux, you can press alt-Fx or ctrl-alt-Fx to switch the console from
+/dev/tty1 to tty7.  There are many more /dev/tty* which are not accessed via
+function keys.  To be safe, use a tty greater than tty7?</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_specifying_bash_binary"></a>6.2. Specifying bash binary</h2></div></div></div><p>The test suite standard uses <code class="literal">bash</code> as found in the tcl path (/bin/bash).  Using <code class="literal">--tool_exec</code> you can specify which bash binary you want to run the test suite against, e.g.:</p><pre class="screen">./runUnit --tool_exec /opt/bash-4.0/bin/bash</pre></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_maintenance"></a>Chapter 7. Maintenance</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_adding_a_completion_test">7.1. Adding a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_completion_test">7.2. Fixing a completion test</a></span></dt><dt><span class="section"><a href="#_fixing_a_unit_test">7.3. Fixing a unit test</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_adding_a_completion_test"></a>7.1. Adding a completion test</h2></div></div></div><p>You can run <code class="literal">cd test &amp;&amp; ./generate</code> to add a test.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fixing_a_completion_test"></a>7.2. Fixing a completion test</h2></div></div></div><p>Let’s consider this real-life example where an ssh completion bug is fixed.  First you’re triggered by unsuccessful tests:</p><pre class="screen">$ ./runCompletion
 ...
                 === completion Summary ===
 
@@ -78,7 +81,7 @@ expect: does "ssh -F fixtures/ssh/config ls\r\nls           lsattr       lsb_rel
 ...
                 === completion Summary ===
 
-# of expected passes            2</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fixing_a_unit_test"></a>6.3. Fixing a unit test</h2></div></div></div><p>Now let’s consider a unit test failure.  First you’re triggered by unsuccessful tests:</p><pre class="screen">$ ./runUnit
+# of expected passes            2</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_fixing_a_unit_test"></a>7.3. Fixing a unit test</h2></div></div></div><p>Now let’s consider a unit test failure.  First you’re triggered by unsuccessful tests:</p><pre class="screen">$ ./runUnit
 ...
                 === unit Summary ===
 
@@ -90,9 +93,9 @@ FAIL: Environment should stay clean</pre><p>In this case it appears <code class=
                 === completion Summary ===
 
 # of expected passes            1
-# of unexpected failures        1</pre><p>Now, if we haven’t already figured out the problem, we can have a detailed look in <code class="literal">dbg.log</code> to find out what’s going wrong.  Open <code class="literal">dbg.log</code> and search for <code class="literal">UNRESOLVED</code> (or <code class="literal">FAIL</code> if that’s what you’re looking for):</p><pre class="screen">FAIL: Environment should stay clean</pre><p>From there, search up for the first line saying:</p><pre class="screen">expect: does "..." match regular expression "..."</pre><p>This tells you where the actual output differs from the expected output.  In this case it looks like the the function <code class="literal">_known_hosts_real</code> is unexpectedly modifying global variables <code class="literal">cur</code> and <code class="literal">flag</code>.  In case you need to modify the test:</p><pre class="screen">$ vi lib/unit/_known_hosts_real.exp</pre></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_rationale"></a>Chapter 7. Rationale</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_naming_conventions">7.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">7.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">7.1.2. script/generate</a></span></dt></dl></dd></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_naming_conventions"></a>7.1. Naming conventions</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_test_suite_or_testsuite"></a>7.1.1. Test suite or testsuite</h3></div></div></div><p>The primary Wikipedia page is called
+# of unexpected failures        1</pre><p>Now, if we haven’t already figured out the problem, we can have a detailed look in <code class="literal">dbg.log</code> to find out what’s going wrong.  Open <code class="literal">dbg.log</code> and search for <code class="literal">UNRESOLVED</code> (or <code class="literal">FAIL</code> if that’s what you’re looking for):</p><pre class="screen">FAIL: Environment should stay clean</pre><p>From there, search up for the first line saying:</p><pre class="screen">expect: does "..." match regular expression "..."</pre><p>This tells you where the actual output differs from the expected output.  In this case it looks like the the function <code class="literal">_known_hosts_real</code> is unexpectedly modifying global variables <code class="literal">cur</code> and <code class="literal">flag</code>.  In case you need to modify the test:</p><pre class="screen">$ vi lib/unit/_known_hosts_real.exp</pre></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_rationale"></a>Chapter 8. Rationale</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_naming_conventions">8.1. Naming conventions</a></span></dt><dd><dl><dt><span class="section"><a href="#_test_suite_or_testsuite">8.1.1. Test suite or testsuite</a></span></dt><dt><span class="section"><a href="#_script_generate">8.1.2. script/generate</a></span></dt></dl></dd></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_naming_conventions"></a>8.1. Naming conventions</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_test_suite_or_testsuite"></a>8.1.1. Test suite or testsuite</h3></div></div></div><p>The primary Wikipedia page is called
 <a class="ulink" href="http://en.wikipedia.org/wiki/Test_suite" target="_top">test suite</a> and not testsuite, so that’s what this
-document sticks to.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_script_generate"></a>7.1.2. script/generate</h3></div></div></div><p>The name and location of this code generation script come from Ruby on Rails' <a class="ulink" href="http://en.wikibooks.org/wiki/Ruby_on_Rails/Tools/Generators" target="_top">script/generate</a>.</p></div></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_reference"></a>Chapter 8. Reference</h2></div></div></div><p>Within test scripts the following library functions can be used:</p></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="Test_context"></a>Chapter 9. Test context</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">9.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">9.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">9.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">9.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">9.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">9.3. inputrc</a></span></dt></dl></div><p>The test environment needs to be put to fixed states when testing.  For instance the bash prompt (PS1) is set to the current test directory, followed by an ampersand (@).  The default settings for <code class="literal">bash</code> reside in <code class="literal">config/bashrc</code> and <code class="literal">config/inputrc</code>.</p><p>For each tool (completion, install, unit) a slightly different context is in effect.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_what_happens_when_tests_are_run"></a>9.1. What happens when tests are run?</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_completion"></a>9.1.1. completion</h3></div></div></div><p>When the completions are tested, invoking DejaGnu will result in a call to <code class="literal">completion_start()</code> which in turn will start <code class="literal">bash --rcfile config/bashrc</code>.</p><div class="example"><a id="id2644163"></a><p class="title"><b>Example 9.1. What happens when completion tests are run?</b></p><div class="example-contents"><pre class="screen">               | runtest --tool completion
+document sticks to.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_script_generate"></a>8.1.2. script/generate</h3></div></div></div><p>The name and location of this code generation script come from Ruby on Rails' <a class="ulink" href="http://en.wikibooks.org/wiki/Ruby_on_Rails/Tools/Generators" target="_top">script/generate</a>.</p></div></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="_reference"></a>Chapter 9. Reference</h2></div></div></div><p>Within test scripts the following library functions can be used:</p></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="Test_context"></a>Chapter 10. Test context</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#_what_happens_when_tests_are_run">10.1. What happens when tests are run?</a></span></dt><dd><dl><dt><span class="section"><a href="#_completion">10.1.1. completion</a></span></dt><dt><span class="section"><a href="#_install">10.1.2. install</a></span></dt><dt><span class="section"><a href="#_unit">10.1.3. unit</a></span></dt></dl></dd><dt><span class="section"><a href="#_bashrc">10.2. bashrc</a></span></dt><dt><span class="section"><a href="#_inputrc">10.3. inputrc</a></span></dt></dl></div><p>The test environment needs to be put to fixed states when testing.  For instance the bash prompt (PS1) is set to the current test directory, followed by an ampersand (@).  The default settings for <code class="literal">bash</code> reside in <code class="literal">config/bashrc</code> and <code class="literal">config/inputrc</code>.</p><p>For each tool (completion, install, unit) a slightly different context is in effect.</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_what_happens_when_tests_are_run"></a>10.1. What happens when tests are run?</h2></div></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_completion"></a>10.1.1. completion</h3></div></div></div><p>When the completions are tested, invoking DejaGnu will result in a call to <code class="literal">completion_start()</code> which in turn will start <code class="literal">bash --rcfile config/bashrc</code>.</p><div class="example"><a id="id3041757"></a><p class="title"><b>Example 10.1. What happens when completion tests are run?</b></p><div class="example-contents"><pre class="screen">               | runtest --tool completion
                V
     +----------+-----------+
     |  lib/completion.exp  |
@@ -117,7 +120,7 @@ document sticks to.</p></div><div class="section" lang="en" xml:lang="en"><div c
     +----------+-----------+
     |   completion_exit()  |
     | (lib/completion.exp) |
-    +----------------------+</pre></div></div><br class="example-break" /><p>Setting up bash once within <code class="literal">completion_start()</code> has the speed advantage that bash - and bash-completion - need only initialize once when testing multiple completions, e.g.:</p><pre class="screen">    runtest --tool completion alias.exp cd.exp</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_install"></a>9.1.2. install</h3></div></div></div><div class="example"><a id="id2646974"></a><p class="title"><b>Example 9.2. What happens when install tests are run?</b></p><div class="example-contents"><pre class="screen">                 | runtest --tool install
+    +----------------------+</pre></div></div><br class="example-break" /><p>Setting up bash once within <code class="literal">completion_start()</code> has the speed advantage that bash - and bash-completion - need only initialize once when testing multiple completions, e.g.:</p><pre class="screen">    runtest --tool completion alias.exp cd.exp</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_install"></a>10.1.2. install</h3></div></div></div><div class="example"><a id="id3052229"></a><p class="title"><b>Example 10.2. What happens when install tests are run?</b></p><div class="example-contents"><pre class="screen">                 | runtest --tool install
                  V
             +----+----+
             | DejaGnu |
@@ -131,7 +134,7 @@ document sticks to.</p></div><div class="section" lang="en" xml:lang="en"><div c
                  V
     +------------+------------+
     | (file: lib/install.exp) |
-    +-------------------------+</pre></div></div><br class="example-break" /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_unit"></a>9.1.3. unit</h3></div></div></div><div class="example"><a id="id2636096"></a><p class="title"><b>Example 9.3. What happens when unit tests are run?</b></p><div class="example-contents"><pre class="screen">               | runtest --tool unit
+    +-------------------------+</pre></div></div><br class="example-break" /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="_unit"></a>10.1.3. unit</h3></div></div></div><div class="example"><a id="id3055853"></a><p class="title"><b>Example 10.3. What happens when unit tests are run?</b></p><div class="example-contents"><pre class="screen">               | runtest --tool unit
                V
           +----+----+
           | DejaGnu |
@@ -141,10 +144,7 @@ document sticks to.</p></div><div class="section" lang="en" xml:lang="en"><div c
     +----------+-----------+
     |          -           |
     | (file: lib/unit.exp) |
-    +----------------------+</pre></div></div><br class="example-break" /></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_bashrc"></a>9.2. bashrc</h2></div></div></div><p>This is the bash configuration file (bashrc) used for testing:</p><pre class="programlisting"># -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
-# ex: ts=8 sw=8 noet filetype=sh
-#
-# bashrc file for DejaGnu testsuite
+    +----------------------+</pre></div></div><br class="example-break" /></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_bashrc"></a>10.2. bashrc</h2></div></div></div><p>This is the bash configuration file (bashrc) used for testing:</p><pre class="programlisting"># bashrc file for DejaGnu testsuite
 
         # Use emacs key bindings
 set -o emacs
@@ -171,10 +171,15 @@ unset -v \
     COMP_TAR_INTERNAL_PATHS
 
         # Load bash testsuite helper functions
-. lib/library.sh</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_inputrc"></a>9.3. inputrc</h2></div></div></div><p>This is the readline configuration file (inputrc) used for testing:</p><pre class="programlisting"># -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
-# ex: ts=8 sw=8 noet filetype=sh
-#
-# Readline init file for DejaGnu testsuite
+. lib/library.sh
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 8
+# sh-indent-comment: t
+# indent-tabs-mode: t
+# End:
+# ex: ts=8 sw=8 noet filetype=sh</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_inputrc"></a>10.3. inputrc</h2></div></div></div><p>This is the readline configuration file (inputrc) used for testing:</p><pre class="programlisting"># Readline init file for DejaGnu testsuite
 # See: info readline
 
         # Press TAB once (instead of twice) to auto-complete
@@ -186,4 +191,12 @@ set completion-query-items -1
         # Display completions sorted horizontally, not vertically
 set print-completions-horizontally on
         # Don't use pager when showing completions
-set page-completions off</pre></div></div></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a id="_index"></a>Index</h2></div></div></div><div class="index"></div></div></div></body></html>
+set page-completions off
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 8
+# sh-indent-comment: t
+# indent-tabs-mode: t
+# End:
+# ex: ts=8 sw=8 noet filetype=sh</pre></div></div></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a id="_index"></a>Index</h2></div></div></div><div class="index"></div></div></div></body></html>
diff --git a/doc/testing.txt b/doc/testing.txt
index 14cf6ff..b54779a 100644
--- a/doc/testing.txt
+++ b/doc/testing.txt
@@ -21,7 +21,7 @@ Debian/Ubuntu
 
 On Debian/Ubuntu you can use `apt-get`:
 -------------
-sudo apt-get install dejagnu
+sudo apt-get install dejagnu tcllib
 -------------
 This should also install the necessary `expect` and `tcl` packages.
 
@@ -54,8 +54,11 @@ The tests are grouped into different areas, called _tool_ in DejaGnu:
 
 Each tool has a slightly different way of loading the test fixtures, see <<Test_context,Test context>> below.
 
+
+
+
 Running the tests
-~~~~~~~~~~~~~~~~~
+-----------------
 
 The tests are run by calling `runtest` in the test directory:
 -----------------------
@@ -71,6 +74,37 @@ The commands above are already wrapped up in shell scripts within the `test` dir
 -----------------------
 
 
+Running tests via cron
+~~~~~~~~~~~~~~~~~~~~~~
+
+The test suite requires a connected terminal (tty).  When invoked via cron, no tty is connected and the test suite may respond with this error:
+---------------------------------------------
+can't read "multipass_name": no such variable
+---------------------------------------------
+
+To run the tests successfully via cron, connect a terminal by redirecting stdin from a tty, e.g. /dev/tty50:
+----------------------
+./runUnit < /dev/tty50
+----------------------
+
+If the process doesn't run as root, root will have to change the owner and
+permissions of the tty.
+
+In Linux, you can press alt-Fx or ctrl-alt-Fx to switch the console from
+/dev/tty1 to tty7.  There are many more /dev/tty* which are not accessed via
+function keys.  To be safe, use a tty greater than tty7?
+
+
+Specifying bash binary
+~~~~~~~~~~~~~~~~~~~~~~
+
+The test suite standard uses `bash` as found in the tcl path (/bin/bash).  Using `--tool_exec` you can specify which bash binary you want to run the test suite against, e.g.:
+
+----------------
+./runUnit --tool_exec /opt/bash-4.0/bin/bash
+----------------
+
+
 
 
 Maintenance
diff --git a/test/lib/library.exp b/test/lib/library.exp
index 10d4dda..4ca6b96 100644
--- a/test/lib/library.exp
+++ b/test/lib/library.exp
@@ -31,7 +31,7 @@ proc assert_bash_exec {{aCmd ""} {title ""} {prompt /@} {out -1}} {
         # Remove $prompt suffix from output
     set results [
         string range $results 0 [
-            expr [string length $results] - [string length "/@"] - 1
+            expr [string length $results] - [string length $prompt] - 1
         ]
     ]
     if {$out == -1 && [string length $results] > 0} {

-- 
bash-completion



More information about the Bash-completion-commits mailing list