0.7.2 (2020-04-12)
    * Add `@parameterized_class` name function callback support (thanks
      @duncwebb et al; https://github.com/wolever/parameterized/pull/74)

0.7.1 (2019-11-19)
    * Fix #73: calling `setUp` and `tearDown` in parameterized classes

0.7.0 (2019-02-05)
    * Added parameterized_class feature, for parameterizing entire test
      classes (many thanks to @TobyLL for their suggestions and help testing!)
    * Fix DeprecationWarning on `inspect.getargs` (thanks @brettdh;
      https://github.com/wolever/parameterized/issues/67)

0.6.2 (2018-03-11)
    * Make sure that `setUp` and `tearDown` methods work correctly (#40)
    * Raise a ValueError when input is empty (thanks @danielbradburn;
      https://github.com/wolever/parameterized/pull/48)
    * Fix the order when number of cases exceeds 10 (thanks @ntflc;
      https://github.com/wolever/parameterized/pull/49)

0.6.1 (2017-03-21)
    * Rename package from nose-parameterized to parameterized. A
      nose-parameterized package will be released with a deprecation warning.
    * Rename testcase_func_doc and testcase_func_name methods to doc_func and
      name_func (a DeprecationWarning will be issued, to be removed in 1.0).
    * Include parameters in all docstrings, not just `parameterized.expand`
      docstrings.
    * Explicitly unwrap iterators and generators before the test run (thanks
      @chornsby; https://github.com/wolever/nose-parameterized/pull/31)
    * 0.6.1 instead of 0.6.0 because I'm a dumb and accidentally uploaded
      the wrong thing to PyPI under version 0.6.0.

0.5.0 (2015-06-09)
    * Support for nose2, py.test, unittest, and unittest2
      (nose2 support thanks to @marek-mazur;
      https://github.com/wolever/nose-parameterized/pull/26)

0.4.2 (2015-05-18)
    * Fix bug with expand + empty arguments (thanks @jikamens;
      https://github.com/wolever/nose-parameterized/pull/25)

0.4.1 (2015-05-17)
    * Fix bug with expand + empty docstring (thanks @jikamens;
      https://github.com/wolever/nose-parameterized/pull/24)

0.4.0 (2015-05-11)
    * Include parameters in ``parameterized.expand`` function docstrings
      (https://github.com/wolever/nose-parameterized/pull/22; thanks
      @smspillaz)
    * Drop Python 3.2 support

0.3.5 (2014-11-05)
    * Allow the names of test cases generated by ``parameterized.expand`` to
      be customized.
      (https://github.com/wolever/nose-parameterized/pull/19;
      thanks @curtissiemens) 

0.3.4 (2014-10-03)
    * Use ``functools.wraps`` to wrap expanded functions
      (https://github.com/wolever/nose-parameterized/pull/17;
      thanks @toumorokoshi) 

0.3.3 (2014-01-03)
    * Replace unsafe characters with "_" in names generated by
      ``@parameterized.expand``.

0.3.2 (2014-01-02)
    * Add helpful error message when used with old-style classes.

0.3.1 (2013-08-01)
    * Fix bug: `nose_parameterized.param` wasn't being imported.

0.3 (2013-05-18)
    * Add `param` class.
    * Add explicit support for callable inputs.
    * Update readme to more throughly describe useage.
    * Remove un-used test helpers (`setup_logging`, `teardown_logging`,
     `logged_messages`, `assert_logged`, `assert_no_errors_logged`,
     `assert_contains`, `assert_not_contains`, `assert_raises`,
     `imported_from_test`).

0.2 (2013-01-15)
    * Add Python 3 support
