<pre style='margin:0'>
Rainer Müller (raimue) pushed a commit to branch master
in repository macports-guide.

</pre>
<p><a href="https://github.com/macports/macports-guide/commit/1f87edeb1a2394d72d8fe1d9508a8ea81edab0a0">https://github.com/macports/macports-guide/commit/1f87edeb1a2394d72d8fe1d9508a8ea81edab0a0</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 1f87ede  Import documentation for Tests from wiki
</span>1f87ede is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 1f87edeb1a2394d72d8fe1d9508a8ea81edab0a0
</span>Author: Rainer Müller <raimue@macports.org>
AuthorDate: Tue Mar 20 20:29:02 2018 +0100

<span style='display:block; white-space:pre;color:#404040;'>    Import documentation for Tests from wiki
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This section was originally found at [1], but is now moving to the guide
</span><span style='display:block; white-space:pre;color:#404040;'>    to consolidate our documentation.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    [1] https://trac.macports.org/wiki/Tests
</span>---
 guide/xml/internals-tests.xml | 236 ++++++++++++++++++++++++++++++++++++++++++
 guide/xml/internals.xml       |   2 +
 2 files changed, 238 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/guide/xml/internals-tests.xml b/guide/xml/internals-tests.xml
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..e35dbb3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/guide/xml/internals-tests.xml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,236 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<?xml version="1.0" encoding="UTF-8"?>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V5.0//EN"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"http://docbook.org/xml/5.0/dtd/docbook.dtd">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<section xml:id="internals.tests">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <title>Tests</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    The MacPorts testing framework uses <link xlink:href="http://wiki.tcl.tk/1502">tcltest</link> for its unit tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    as well as regression tests. The framework was developed during Google Summer of Code 2013 by Marius Coțofană (marius@).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    To keep things simple, each module of MacPorts (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/tree/master/src/macports1.0">macports1.0</link>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/tree/master/src/package1.0">package1.0</link>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/tree/master/src/port1.0">port1.0</link>,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/tree/master/src/registry2.0">registry2.0</link>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ) has its own <filename>tests/</filename> directory. Each Tcl script in a module (e.g.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/macports.tcl">macports.tcl</link>)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    has its own test script located in the <filename>tests</filename> directory, with the same name and the '.test' extension (e.g.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/tests/macports.test">macports.test</link>).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Every proc in a script (e.g. <code>proc macports::findBinary</code>) should have its own test proc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    (e.g. <code>test findBinary</code>) in the corresponding test file. Test procs should maintain the order in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    original script and should be independent one of another.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <section xml:id="internals.tests.running">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <title>Running tests</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tests can be run only on an installed version of MacPorts (so make sure you have run <command>sudo make install</command>). 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        The easiest way to run all the tests, is to use the target in the Makefile.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <programlisting><prompt>$ </prompt><userinput>make test</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Each <filename>tests/</filename> directory has a <filename>test.tcl</filename> file, used by the make target to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        run all tests and format the output, making it easy to read. The script just runs the tests individually,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printing the test file name, the total number of tests, number of passed, skipped, failed as well as constraints
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        or errors of failed tests. This is one possible output when running <filename>macports.test</filename>:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <screen>Total:31 Passed:31 Failed:0 Skipped:0  macports.test</screen>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Many tests need root privileges to run correctly, but will be auto skipped in the other case. Constraints are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        printed just below the final result, together with the number of test cases that require it, as so:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <screen>Total:31 Passed:24 Failed:0 Skipped:7  macports.test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--         -->    Constraint: 7    root</screen>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        The stack trace of an error that occurs during a test is printed below the constraints (if any). 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        The file can be used also to:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    run all tests:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <programlisting><prompt>$</prompt> <userinput>tclsh test.tcl</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    get debug info:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <programlisting><prompt>$</prompt> <userinput>tclsh test.tcl -debug \[0-3\]</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    list individual test files:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <programlisting><prompt>$</prompt> <userinput>tclsh test.tcl -l</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    run specific test files:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <programlisting><prompt>$</prompt> <userinput>tclsh test.tcl -t macports.test</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    print help message:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                <programlisting><prompt>$</prompt> <userinput>tclsh test.tcl -h</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            </listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Specific test cases can be run using the <command>'-match'</command> argument for the file that contains the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        test, from its parent directory.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <programlisting><prompt>$</prompt> <userinput>tclsh macports.test -match mportclose</userinput></programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            Regression tests can be found in <link xlink:href="https://github.com/macports/macports-base/tree/master/tests/test/">tests/test/</link>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        and can be run just as unit tests, using <command>make test</command> from the parent directory. 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </para>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </section>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <section xml:id="internals.tests.mustknow">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <title>Must know</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>regression tests have their own directory, found in <link xlink:href="https://github.com/macports/macports-base/tree/master/tests/test/">trunk/base/tests/test</link></para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>each module of MacPorts (port1.0, macports1.0, package1.0) has its own ‘tests/’ directory where the test files are located and also additional files needed (Portfile, test.tcl)</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>each file in a module has a corresponding test file (.test extension) in the ‘tests/’ directory</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>each proc in a file has a corresponding test case (test proc_name) in the</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>each test case must be independent from each other, so they can be run individually if needed</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>each test must clean all auxiliary files or directories it creates and revert all ports it installs</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>use a single test proceduce for each tested proc; sub-test cases should be included in the same body</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>when adding new regression tests, make sure to specify its name in the test_suite list of 'trunk/base/tests/test.tcl'</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>variables used in tests can be set at install-time using the '[module]_test_autoconf.tcl.in' file in each module (macports_autoconf.tcl.in, port_autoconf.tcl.in)</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>for some tests in package1.0, an update of the ports tree is required; this is done automatically if they are run using the 'test' target in the Makefile, with root privileges </para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </section>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <section xml:id="internals.tests.sample-file">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <title>Sample file</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <programlisting># include required tcltest package and set namespace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->package require tcltest 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->namespace import tcltest::*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># get absolute path to current ‘tests/’ directory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->set pwd [file normalize $argv0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->set pwd [eval file join {*}[lrange [file split $pwd] 0 end-1]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># the macports_fastload.tcl file needs to be sourced so we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># can directly require packages later on; we can use the autoconf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># file to get the path to the file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->source ../port_test_autoconf.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->source $macports::autoconf::macports_tcl_dir/macports1.0/macports_fastload.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->package require macports 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># source/require tested/needed files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># source ../../port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->package require portutil 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># use custom macports.conf and sources.conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># you need to provide the sources.conf (see additional files) file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->makeDirectory $pwd/tmpdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->makeDirectory $pwd/tmpdir/share
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->makeDirectory $pwd/tmpdir/var/macports/registry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->set fd [open $pwd/tmpdir/macports.conf w+]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "portdbpath $pwd/tmpdir/var/macports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "prefix $pwd/tmpdir"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "variants_conf $pwd/tmpdir/variants.conf"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "sources_conf $pwd/sources.conf"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "applications_dir $pwd/tmpdir/Applications"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->puts $fd "frameworks_dir $pwd/tmpdir/Library/Frameworks"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->set env(PORTSRC) $pwd/tmpdir/macports.conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->file link -symbolic $pwd/tmpdir/share/macports $macports::autoconf::prefix/share/macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->close [open $pwd/tmpdir/variants.conf w+]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># debug options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># ports_debug and ports_verbose are commented out as default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># need to be set before ‘mportinit’
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->array set ui_options {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->#set ui_options(ports_debug)   yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->#set ui_options(ports_verbose) yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->mportinit ui_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># if you need to use procs from macports namespace, that are just aliases, you can
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># always source library.tcl (see additional files) which provides a copy macports::worker_init
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># without sub-interpreters; it also sets some important environment variables like
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># os.platform, os.major, os.arch, workpath, destpath, portpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># some other option would be to get the $workername from a $mport and use it directly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># additional procs needed for testing go before the actual test cases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># test case example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># the test name must reflect the tested proc (remove namespaces if any)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># the test description should list specific values from the tested proc on which it depends
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># or the partial cases it tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->test mportclose {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    Mport close unit test.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># this branch is optional and you can use other constraints too
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->} -constraints {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    root
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># the setup branch is optional
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->} -setup {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    set mport [mportopen file://.]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># please make output as useful as possible (even error cases)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># all sub-test cases should be part of the body branch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->} -body {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    if {[catch {mportclose $mport}] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->        return "FAIL: cannot run mportclose"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    return "Mport close successful."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># the cleanup branch is optional
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->} -cleanup {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->    file delete -force $pwd/work
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->} -result "Mport close successful."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     --># print test results
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!--     -->cleanupTests</programlisting>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </section>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <section xml:id="internals.tests.addtional-files">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <title>Additional files</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>In all tests we use this <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/tests/Portfile">Portfile</link>.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>This is the <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/tests/test.tcl">test.tcl</link> file used to run and parse the output of all the tests in a module.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>A worker_init copy, without using sub-interpreters <link xlink:href="https://github.com/macports/macports-base/blob/master/src/package1.0/tests/library.tcl">library.tcl</link>.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>Example of <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/tests/sources.conf">sources.conf</link>.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>An example of a test file <link xlink:href="https://github.com/macports/macports-base/blob/master/src/macports1.0/tests/macports.test">macports.test</link>.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para>A <link xlink:href="https://github.com/macports/macports-base/blob/master/tests/test/library.tcl">library.tcl</link> of useful procs in regression testing.</para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </section>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    <section xml:id="internals.tests.resources">
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <title>Resources</title>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        <itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para><link xlink:href="http://wiki.tcl.tk/1502">Tcltest official wiki page</link></para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para><link xlink:href="http://web.archive.org/web/20080617153002/www.tclscripting.com/articles/apr06/article1.html">Getting started with tcltest</link></para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            <listitem><para><link xlink:href="http://www.tcl.tk/man/tcl8.5/TclCmd/tcltest.htm">Official tcltest documentation</link></para></listitem>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        </itemizedlist>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    </section>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+</section>
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/guide/xml/internals.xml b/guide/xml/internals.xml
</span><span style='display:block; white-space:pre;color:#808080;'>index 13be48a..4ab53ba 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/guide/xml/internals.xml
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/guide/xml/internals.xml
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -650,4 +650,6 @@
</span>     </section>
   </section>
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+  <xi:include href="internals-tests.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> </chapter>
</pre><pre style='margin:0'>

</pre>