0.7.4 (2020-04-14)
    * Add ``class_name_func`` option to ``@parameterized_class``
    * Fix arguments being passed to skip_on_empty_helper (thanks @gaf3;
      https://github.com/wolever/parameterized/issues/57)
    * Fix tests on Python 3.8.2 (thanks @Ikke;
      https://github.com/wolever/parameterized/pull/99)

0.7.3 (2020-04-12)
    * Fix some typos (thanks @LWprogramming, @jinnovation;
      https://github.com/wolever/parameterized/pull/77,
      https://github.com/wolever/parameterized/pull/80)
    * Fix unicode handling in setup.py (thanks @sliwinski-milosz;
      https://github.com/wolever/parameterized/pull/89)
    * Fix Python 3.9 compat (thanks @vstinner;
      https://github.com/wolever/parameterized/pull/94)

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
