+=head1 NAME
+
+ZOOM::IRSpy::Node - node in a tree of names
+
+=head1 SYNOPSIS
+
+ $node1 = new ZOOM::IRSpy::Node("LowLevelTest");
+ $node2 = new ZOOM::IRSpy::Node("AnotherTest");
+ $node3 = new ZOOM::IRSpy::Node("Aggregate", $node1, $node2);
+ $node = new ZOOM::IRSpy::Node("Main", $node3);
+ $node->print(0);
+ $subnode = $node->select("0:1");
+ die "oops" if $subnode->name() ne "AnotherTest";
+
+=head1 DESCRIPTION
+
+IRSpy maintains a declarative hierarchy of the tests that each
+connection may be required to perform, which it compiles recursively
+from the C<subtests()> method of the top-level test and each of its
+subtests, sub-subtests, etc. The result of this compilation is a
+hierarchy represented by a tree of C<ZOOM::IRSpy::Node> objects.
+
+Note that each node contains a test I<name>, not an actual test
+object. Test objects are different, and are implemented by the
+C<ZOOM::IRSpy::Test> class its subclasses. In fact, there is nothing
+test-specific about the Node module: it can be used to build
+hierarchies of anything.
+
+You can't do much with a node. Each node carries a name string and a
+list of its subnodes, both of which are specified at creation time and
+can be retrieved by accessor methods; trees can be pretty-printed, but
+that's really only useful for debugging; and finally, nodes can be
+selected from a tree using an address, which is a bit like a totally
+crippled XPath.
+
+=head2 new()
+
+ $node = new ZOOM::IRSpy::Node($name, @subnodes);
+
+Creates a new node with the name specified as the first argument of
+the constructor. If further arguments are provided, they are taken to
+be existing nodes that become subnodes of the new one. Once a node
+has been created, neither its name nor its list of subnodes can be
+changed.
+
+=cut
+