0.8 (unreleased)
================

 * Better behavior for the error case where search path (-p option) 
   is nonexistent or not a directory (egj)

 * Add optional second argument to `url_qs` command in flunc.urlinspector
   which, if present, asserts the value of the given querystring parameter,
   as well as asserting its presence. (egj)

 * Add new command `css_len` in flunc.xpath which lets you test that 
   a given CSS selector matches exactly N elements in the page (egj)

0.7 (2009-10-05)
================

 * The -D (--define) command-line option now works as documented (egj)

0.6 (2009-07-06)
================

 * Add extension module flunc.urlinspector with a command `url_qs` for
   making simple assertions about the current url's query string (egj)

 * Add `notfind_in_css` command to flunc.xpath (egj)

 * Display a more meaningful error message for invalid argument-passing
   syntaxes (egj)

 * Add a `zope_cleanup.opencore_user_cleanup` method to flush the opencore
   member cleanup queue when deleting users. No hard failure if you have a
   version of opencore that doesn't support this (pw)

0.5 (2009-05-05)
================

 * Add `find_in_css` command to flunc.xpath module. Use it to find a regex
   within a given CSS selector, like find_in_xpath (egj)

 * Transfer binary data directly to the twill script for passed-in param
   values instead of escaping it as a string (cabraham)

0.4 (2008-12-18)
================

 * Add two twill extensions to checkbox.py: `not_selected`, `is_enabled` (pw)

 * Change is_selected to work correctly with checkboxes, I think (pw)

 * Change default host to http://localhost (pw)

0.3 (2008-06-25)
================

 * Add a twill extension (flunc.checkbox.is_selected) for making assertions
   about form defaults (pw)

0.2 (2008-04-14)
================

 * Don't display BadRequest exceptions when calling zope_delobject() -- those
   are normal and just add a lot of noise (pw)

 * Added twill extension to support xpath. This introduces a dependency on lxml.
   There is one function added: find_in_xpath (rmarianski)

   find_in_xpath runs a find command on the html result of an xpath expression
   For example:
   {{{
   extend_with flunc.xpath
   find_in_xpath "People" "//div[@id='oc-pageNav']"
   }}}

 * Altered the namespace behavior; now there is no leading dot to
   specify the global namespace. (jhammel)

   Instead, we use a scope-based model:

   1. items (tests, suites, configuration) is first looked up relavent to
      the current (local) namespace

   2. if they are not found locally, they are looked up in the global namespace

   The dot is still used for namespace separation.  So looking up foo.bar
   will first look for the namespace foo in the local namespace;  if this
   exists, it will try to look up bar in that.  If foo is not a namespace
   relavent to the current one, it will try to look up foo.bar in the
   global namespace.

 * Added hierarchal namespaces to tests (jhammel)

   Formerly, tests lived in a flat namespace.  Using --recursive, one
   could put all tests under the root directory into a single namespace.
   Now each directory has a namespace associated with it.  Tests or
   suites with single names refer to items in the same namespace (that
   is, the same directory).  You may refer to the bar test or suite in
   the foo subdirectory as 

   foo.bar

   If a suite has the same name as the subdirectory name, you may refer
   to it either with the full specification

   foo.foo

   or with shorthand

   foo

   To refer to the global namespace, preface the name of the test, suite,
   or path with a dot

   .foo.bar

   refers to the bar suite or test under the foo directory under the root
   directory.  

   These changes should be backwards compatible with existing tests and
   were made to facilitate test organization with the hope of providing
   the flexibility to manipulate namespaces when tests live in multiple
   locations on disc.
