summaryrefslogtreecommitdiff
path: root/doc/guide/files/regression.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/guide/files/regression.xml')
-rw-r--r--doc/guide/files/regression.xml111
1 files changed, 111 insertions, 0 deletions
diff --git a/doc/guide/files/regression.xml b/doc/guide/files/regression.xml
new file mode 100644
index 00000000000..48a9b35f0ef
--- /dev/null
+++ b/doc/guide/files/regression.xml
@@ -0,0 +1,111 @@
+<!-- $NetBSD: regression.xml,v 1.1 2006/05/10 20:56:00 rillig Exp $ -->
+
+<chapter id="regression"> <?dbhtml filename="regression.html"?>
+<title>Regression tests</title>
+
+ <para>The pkgsrc infrastructure consists of a large codebase,
+ and there are many corners where every little bit of a file is
+ well thought out, making pkgsrc likely to fail as soon as
+ anything is changed near those parts. To prevent most changes
+ from breaking anything, a suite of regression tests should go
+ along with every important part of the pkgsrc infrastructure.
+ This chapter describes how regression tests work in pkgsrc and
+ how you can add new tests.</para>
+
+<sect1 id="regression.descr">
+<title>The regression tests framework</title>
+
+<para></para>
+
+</sect1>
+
+<sect1 id="regression.run">
+<title>Running the regression tests</title>
+
+ <para>You first need to install the <filename
+ role="pkg">pkgtools/pkg_regress</filename> package, which
+ provides the <command>pkg_regress</command> command. Then you
+ can simply run that command, which will run all tests in the
+ <filename>regress</filename> category.</para>
+
+</sect1>
+
+<sect1 id="regression.new">
+<title>Adding a new regression test</title>
+
+ <para>Every directory in the <filename>regress</filename>
+ category that contains a file called <filename>spec</filename>
+ is considered a regression test. This file is a shell program
+ that is included by the <command>pkg_regress</command> command.
+ The following functions can be overridden to suit your
+ needs.</para>
+
+<sect2 id="regression.fun.override">
+<title>Overridable functions</title>
+
+ <para>These functions do not take any parameters. They are all
+ called in <quote>set -e</quote> mode, so you should be careful
+ to check the exitcodes of any commands you run in the
+ test.</para>
+
+ <variablelist>
+
+ <varlistentry><term><varname>do_setup()</varname></term>
+ <listitem><para>This function prepares the environment for the
+ test. By default it does nothing.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><varname>do_test()</varname></term>
+ <listitem><para>This function runs the actual test. By default,
+ it calls <varname>TEST_MAKE</varname> with the arguments
+ <varname>MAKEARGS_TEST</varname> and writes its output including
+ error messages into the file
+ <varname>TEST_OUTFILE</varname>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><varname>check_result()</varname></term>
+ <listitem><para>This function is run after the test and is
+ typically used to compare the actual output from the one that is
+ expected. It can make use of the various helper functions from
+ the next section.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><varname>do_cleanup()</varname></term>
+ <listitem><para>This function cleans everything up after the
+ test has been run. By default it does nothing.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
+</sect2>
+
+<sect2 id="regression.fun.helper">
+<title>Helper functions</title>
+
+<variablelist>
+
+ <varlistentry><term><varname>exit_status(expected)</varname></term>
+ <listitem><para>This function compares the exitcode of the
+ <command>do_test()</command> function with its first parameter.
+ If they differ, the test will fail.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><varname>output_require(regex...)</varname></term>
+ <listitem><para>This function checks for each of its parameters
+ if the output from <command>do_test()</command> matches the
+ extended regular expression. If it does not, the test will
+ fail.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><varname>output_prohibit(regex...)</varname></term>
+ <listitem><para>This function checks for each of its parameters
+ if the output from <command>do_test()</command> does
+ <emphasis>not</emphasis> match the extended regular expression.
+ If any of the regular expressions matches, the test will
+ fail.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
+
+</sect2>
+</sect1>
+</chapter>