Add deprecation warnigns
diff --git a/README.rst b/README.rst
index 42f295e..472f142 100644
--- a/README.rst
+++ b/README.rst
@@ -1,354 +1,15 @@
Parameterized testing with any Python test framework
====================================================
-.. image:: https://travis-ci.org/wolever/parameterized.svg?branch=master
- :target: https://travis-ci.org/wolever/parameterized
+DEPRECATION WARNING
+-------------------
-Parameterized testing in Python sucks.
+The ``nose-parameterized`` package is deprecated and has been renamed to ``parameterized``.
-``parameterized`` fixes that. For everything. Parameterized testing for nose,
-parameterized testing for py.test, parameterized testing for unittest.
+See:
-.. code:: python
-
- # test_math.py
- from nose.tools import assert_equal
- from parameterized import parameterized
-
- import unittest
- import math
-
- @parameterized([
- (2, 2, 4),
- (2, 3, 8),
- (1, 9, 1),
- (0, 9, 0),
- ])
- def test_pow(base, exponent, expected):
- assert_equal(math.pow(base, exponent), expected)
-
- class TestMathUnitTest(unittest.TestCase):
- @parameterized.expand([
- ("negative", -1.5, -2.0),
- ("integer", 1, 1.0),
- ("large fraction", 1.6, 1),
- ])
- def test_floor(self, name, input, expected):
- assert_equal(math.floor(input), expected)
-
-With nose (and nose2)::
-
- $ nosetests -v test_math.py
- test_math.test_pow(2, 2, 4) ... ok
- test_math.test_pow(2, 3, 8) ... ok
- test_math.test_pow(1, 9, 1) ... ok
- test_math.test_pow(0, 9, 0) ... ok
- test_floor_0_negative (test_math.TestMathUnitTest) ... ok
- test_floor_1_integer (test_math.TestMathUnitTest) ... ok
- test_floor_2_large_fraction (test_math.TestMathUnitTest) ... ok
-
- ----------------------------------------------------------------------
- Ran 7 tests in 0.002s
-
- OK
-
-As the package name suggests, nose is best supported and will be used for all
-further examples.
-
-With py.test (version 2.0 and above)::
-
- $ py.test -v test_math.py
- ============================== test session starts ==============================
- platform darwin -- Python 2.7.2 -- py-1.4.30 -- pytest-2.7.1
- collected 7 items
-
- test_math.py::test_pow::[0] PASSED
- test_math.py::test_pow::[1] PASSED
- test_math.py::test_pow::[2] PASSED
- test_math.py::test_pow::[3] PASSED
- test_math.py::TestMathUnitTest::test_floor_0_negative
- test_math.py::TestMathUnitTest::test_floor_1_integer
- test_math.py::TestMathUnitTest::test_floor_2_large_fraction
-
- =========================== 7 passed in 0.10 seconds ============================
-
-With unittest (and unittest2)::
-
- $ python -m unittest -v test_math
- test_floor_0_negative (test_math.TestMathUnitTest) ... ok
- test_floor_1_integer (test_math.TestMathUnitTest) ... ok
- test_floor_2_large_fraction (test_math.TestMathUnitTest) ... ok
-
- ----------------------------------------------------------------------
- Ran 3 tests in 0.000s
-
- OK
-
-(note: because unittest does not support test decorators, only tests created
-with ``@parameterized.expand`` will be executed)
-
-Installation
-------------
-
-::
-
- $ pip install parameterized
-
-
-Compatibility
--------------
-
-`Yes`__.
-
-__ https://travis-ci.org/wolever/parameterized
-
-.. list-table::
- :header-rows: 1
- :stub-columns: 1
-
- * -
- - Py2.6
- - Py2.7
- - Py3.3
- - Py3.4
- - PyPy
- * - nose
- - yes
- - yes
- - yes
- - yes
- - yes
- * - nose2
- - yes
- - yes
- - yes
- - yes
- - yes
- * - py.test
- - yes
- - yes
- - yes
- - yes
- - yes
- * - | unittest
- | (``@parameterized.expand``)
- - yes
- - yes
- - yes
- - yes
- - yes
- * - | unittest2
- | (``@parameterized.expand``)
- - yes
- - yes
- - yes
- - yes
- - yes
-
-Dependencies
-------------
-
-(this section left intentionally blank)
-
-
-Exhaustive Usage Examples
---------------------------
-
-The ``@parameterized`` and ``@parameterized.expand`` decorators accept a list
-or iterable of tuples or ``param(...)``, or a callable which returns a list or
-iterable:
-
-.. code:: python
-
- from parameterized import parameterized, param
-
- # A list of tuples
- @parameterized([
- (2, 3, 5),
- (3, 5, 8),
- ])
- def test_add(a, b, expected):
- assert_equal(a + b, expected)
-
- # A list of params
- @parameterized([
- param("10", 10),
- param("10", 16, base=16),
- ])
- def test_int(str_val, expected, base=10):
- assert_equal(int(str_val, base=base), expected)
-
- # An iterable of params
- @parameterized(
- param.explicit(*json.loads(line))
- for line in open("testcases.jsons")
- )
- def test_from_json_file(...):
- ...
-
- # A callable which returns a list of tuples
- def load_test_cases():
- return [
- ("test1", ),
- ("test2", ),
- ]
- @parameterized(load_test_cases)
- def test_from_function(name):
- ...
-
-.. **
-
-Note that, when using an iterator or a generator, all the items will be loaded
-into memory before the start of the test run (we do this explicitly to ensure
-that generators are exhausted exactly once in multi-process or multi-threaded
-testing environments).
-
-The ``@parameterized`` decorator can be used test class methods, and standalone
-functions:
-
-.. code:: python
-
- from parameterized import parameterized
-
- class AddTest(object):
- @parameterized([
- (2, 3, 5),
- ])
- def test_add(self, a, b, expected):
- assert_equal(a + b, expected)
-
- @parameterized([
- (2, 3, 5),
- ])
- def test_add(a, b, expected):
- assert_equal(a + b, expected)
-
-
-And ``@parameterized.expand`` can be used to generate test methods in
-situations where test generators cannot be used (for example, when the test
-class is a subclass of ``unittest.TestCase``):
-
-.. code:: python
-
- import unittest
- from parameterized import parameterized
-
- class AddTestCase(unittest.TestCase):
- @parameterized.expand([
- ("2 and 3", 2, 3, 5),
- ("3 and 5", 2, 3, 5),
- ])
- def test_add(self, _, a, b, expected):
- assert_equal(a + b, expected)
-
-Will create the test cases::
-
- $ nosetests example.py
- test_add_0_2_and_3 (example.AddTestCase) ... ok
- test_add_1_3_and_5 (example.AddTestCase) ... ok
-
- ----------------------------------------------------------------------
- Ran 2 tests in 0.001s
-
- OK
-
-Note that ``@parameterized.expand`` works by creating new methods on the test
-class. If the first parameter is a string, that string will be added to the end
-of the method name. For example, the test case above will generate the methods
-``test_add_0_2_and_3`` and ``test_add_1_3_and_5``.
-
-The names of the test cases generated by ``@parameterized.expand`` can be
-customized using the ``testcase_func_name`` keyword argument. The value should
-be a function which accepts three arguments: ``testcase_func``, ``param_num``,
-and ``params``, and it should return the name of the test case.
-``testcase_func`` will be the function to be tested, ``param_num`` will be the
-index of the test case parameters in the list of parameters, and ``param``
-(an instance of ``param``) will be the parameters which will be used.
-
-.. code:: python
-
- import unittest
- from parameterized import parameterized
-
- def custom_name_func(testcase_func, param_num, param):
- return "%s_%s" %(
- testcase_func.__name__,
- parameterized.to_safe_name("_".join(str(x) for x in param.args)),
- )
-
- class AddTestCase(unittest.TestCase):
- @parameterized.expand([
- (2, 3, 5),
- (2, 3, 5),
- ], testcase_func_name=custom_name_func)
- def test_add(self, a, b, expected):
- assert_equal(a + b, expected)
-
-Will create the test cases::
-
- $ nosetests example.py
- test_add_1_2_3 (example.AddTestCase) ... ok
- test_add_2_3_5 (example.AddTestCase) ... ok
-
- ----------------------------------------------------------------------
- Ran 2 tests in 0.001s
-
- OK
-
-
-The ``param(...)`` helper class stores the parameters for one specific test
-case. It can be used to pass keyword arguments to test cases:
-
-.. code:: python
-
- from parameterized import parameterized, param
-
- @parameterized([
- param("10", 10),
- param("10", 16, base=16),
- ])
- def test_int(str_val, expected, base=10):
- assert_equal(int(str_val, base=base), expected)
-
-
-If test cases have a docstring, the parameters for that test case will be
-appended to the first line of the docstring. This behavior can be controlled
-with the ``doc_func`` argument:
-
-.. code:: python
-
- from parameterized import parameterized
-
- @parameterized([
- (1, 2, 3),
- (4, 5, 9),
- ])
- def test_add(a, b, expected):
- """ Test addition. """
- assert_equal(a + b, expected)
-
- def my_doc_func(func, num, param):
- return "%s: %s with %s" %(num, func.__name__, param)
-
- @parameterized([
- (5, 4, 1),
- (9, 6, 3),
- ], doc_func=my_doc_func)
- def test_subtraction(a, b, expected):
- assert_equal(a - b, expected)
-
-::
-
- $ nosetests example.py
- Test addition. [with a=1, b=2, expected=3] ... ok
- Test addition. [with a=4, b=5, expected=9] ... ok
- 0: test_subtraction with param(*(5, 4, 1)) ... ok
- 1: test_subtraction with param(*(9, 6, 3)) ... ok
-
- ----------------------------------------------------------------------
- Ran 4 tests in 0.001s
-
- OK
+- https://pypi.python.org/pypi/parameterized
+- https://github.com/wolever/parameterized
Migrating from ``nose-parameterized`` to ``parameterized``
@@ -356,7 +17,7 @@
To migrate a codebase from ``nose-parameterized`` to ``parameterized``:
-1. Update your requirements file, replacing ``nose-parameterized`` with
+1. Update the requirements file, replacing ``nose-parameterized`` with
``parameterized``.
2. Replace all references to ``nose_parameterized`` with ``parameterized``::
@@ -364,27 +25,3 @@
$ perl -pi -e 's/nose_parameterized/parameterized/g' your-codebase/
3. You're done!
-
-
-FAQ
----
-
-What happened to ``nose-parameterized``?
- Originally only nose was supported. But now everything is supported, and it
- only made sense to change the name!
-
-What do you mean when you say "nose is best supported"?
- There are small caveates with ``py.test`` and ``unittest``: ``py.test``
- does not show the parameter values (ex, it will show ``test_add[0]``
- instead of ``test_add[1, 2, 3]``), and ``unittest``/``unittest2`` do not
- support test generators so ``@parameterized.expand`` must be used.
-
-Why not use ``@pytest.mark.parametrize``?
- Because spelling is difficult. Also, ``parameterized`` doesn't require you
- to repeat argument names, and (using ``param``) it supports optional
- keyword arguments.
-
-Why do I get an ``AttributeError: 'function' object has no attribute 'expand'`` with ``@parameterized.expand``?
- You've likely installed the ``parametrized`` (note the missing *e*)
- package. Use ``parameterized`` (with the *e*) instead and you'll be all
- set.
diff --git a/nose_parameterized/__init__.py b/nose_parameterized/__init__.py
index 7b1e947..992578c 100644
--- a/nose_parameterized/__init__.py
+++ b/nose_parameterized/__init__.py
@@ -1 +1,11 @@
from .parameterized import parameterized, param
+
+import os
+import warnings
+if not os.environ.get("NOSE_PARAMETERIZED_NO_WARN"):
+ warnings.warn(
+ "The 'nose-parameterized' package has been renamed 'parameterized'. "
+ "For the two step migration instructions, see: "
+ "https://github.com/wolever/parameterized#migrating-from-nose-parameterized-to-parameterized "
+ "(set NOSE_PARAMETERIZED_NO_WARN=1 to suppress this warning)"
+ )
diff --git a/setup.py b/setup.py
index ebffd83..e82b7f3 100644
--- a/setup.py
+++ b/setup.py
@@ -12,14 +12,21 @@
except IOError:
long_description = "See https://github.com/wolever/parameterized"
+import warnings
+warnings.warn(
+ "The 'nose-parameterized' package has been renamed 'parameterized'. "
+ "For the two step migration instructions, see: "
+ "https://github.com/wolever/parameterized#migrating-from-nose-parameterized-to-parameterized "
+)
+
setup(
- name="parameterized",
+ name="nose-parameterized",
version="0.6.0",
url="https://github.com/wolever/parameterized",
license="FreeBSD",
author="David Wolever",
author_email="david@wolever.net",
- description="Parameterized testing with any Python test framework",
+ description="Parameterized testing with any Python test framework (DEPRECATED; See the 'parameterized' package)",
classifiers=[
'Programming Language :: Python',
'Programming Language :: Python :: 3',