0.7.5 (2021-01-04)
    * Fix crash on Python 2.7 with unicode docstrings
      (https://github.com/wolever/parameterized/issues/109)
    * Replace inspect.stack() with faster inspect.currentframe()
      (https://github.com/wolever/parameterized/issues/107)
    * Add a __version__ string to the package
      (https://github.com/wolever/parameterized/issues/103)

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
