0.8.0 (2021-01-04)
    * Handle camelCase test names. This is an ever-so-slightly backwards
      incompatible change, as the method for determining which methods are
      test methods has changed from ``method_name.startswith("test_")`` to
      ``method_name.startswith("test")``. The latter is the behavior of
      the ``unittest`` module.
      (thanks @bobwalker99; https://github.com/wolever/parameterized/pull/106)
    * Fix arguments to skip_on_empty helper (thanks @bhavyakjain;
      https://github.com/wolever/parameterized/pull/104)

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
