diff --git a/.travis.yml b/.travis.yml index 37ec8cf7..74f40929 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,20 +8,11 @@ python: - pypy - pypy3 env: -- PYMONGO=2.7.2 +- PYMONGO=2.7 - PYMONGO=2.8 +# - PYMONGO=3.0 +# - PYMONGO=dev matrix: - exclude: - - python: '2.6' - env: PYMONGO=2.7.2 - - python: '2.6' - env: PYMONGO=2.8 - - python: '2.6' - env: PYMONGO=2.7.2 - - python: '2.6' - env: PYMONGO=2.8 - allow_failures: - - python: pypy3 fast_finish: true before_install: - travis_retry sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 @@ -33,19 +24,10 @@ install: - sudo apt-get install python-dev python3-dev libopenjpeg-dev zlib1g-dev libjpeg-turbo8-dev libtiff4-dev libjpeg8-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk -- if [[ $PYMONGO == 'dev' ]]; then travis_retry pip install https://github.com/mongodb/mongo-python-driver/tarball/master; - true; fi -- if [[ $PYMONGO != 'dev' ]]; then travis_retry pip install pymongo==$PYMONGO; true; - fi -- travis_retry pip install https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.1.tar.gz#md5=1534bb15cf311f07afaa3aacba1c028b -- travis_retry pip install coveralls -- travis_retry python setup.py install +- travis_retry pip install tox>=1.9 coveralls +- travis_retry tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- -e test script: -- travis_retry python setup.py test -- if [[ $TRAVIS_PYTHON_VERSION == '3.'* ]]; then 2to3 . -w; fi; -- coverage run --source=mongoengine setup.py test -- coverage report -m -- python benchmark.py +- tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- --with-coverage after_script: coveralls --verbose notifications: irc: irc.freenode.org#mongoengine diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 8754896a..c935d5a3 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -44,8 +44,10 @@ General Guidelines - Avoid backward breaking changes if at all possible. - Write inline documentation for new classes and methods. - Write tests and make sure they pass (make sure you have a mongod - running on the default port, then execute ``python setup.py test`` + running on the default port, then execute ``python setup.py nosetests`` from the cmd line to run the test suite). +- Ensure tests pass on every Python and PyMongo versions. + You can test on these versions locally by executing ``tox`` - Add yourself to AUTHORS :) Documentation diff --git a/README.rst b/README.rst index 1d01d8b7..2d17313f 100644 --- a/README.rst +++ b/README.rst @@ -8,10 +8,10 @@ MongoEngine .. image:: https://secure.travis-ci.org/MongoEngine/mongoengine.png?branch=master :target: http://travis-ci.org/MongoEngine/mongoengine - -.. image:: https://coveralls.io/repos/MongoEngine/mongoengine/badge.png?branch=master + +.. image:: https://coveralls.io/repos/MongoEngine/mongoengine/badge.png?branch=master :target: https://coveralls.io/r/MongoEngine/mongoengine?branch=master - + .. image:: https://landscape.io/github/MongoEngine/mongoengine/master/landscape.png :target: https://landscape.io/github/MongoEngine/mongoengine/master :alt: Code Health @@ -38,12 +38,11 @@ Dependencies Optional Dependencies --------------------- -- **Django Integration:** Django>=1.4.0 for Python 2.x or PyPy and Django>=1.5.0 for Python 3.x - **Image Fields**: Pillow>=2.0.0 - dateutil>=2.1.0 .. note - MongoEngine always runs it's test suite against the latest patch version of each dependecy. e.g.: Django 1.6.5 + MongoEngine always runs it's test suite against the latest patch version of each dependecy. e.g.: PyMongo 3.0.1 Examples ======== @@ -96,7 +95,26 @@ Some simple examples of what MongoEngine code looks like:: Tests ===== To run the test suite, ensure you are running a local instance of MongoDB on -the standard port, and run: ``python setup.py test``. +the standard port, and run: ``python setup.py nosetests``. + +To run the test suite on every supported Python version and every supported PyMongo version, +you can use ``tox``. +tox and each supported Python version should be installed in your environment: + +.. code-block:: shell + + # Install tox + $ pip install tox + # Run the test suites + $ tox + +If you wish to run one single or selected tests, use the nosetest convention. It will find the folder, +eventually the file, go to the TestClass specified after the colon and eventually right to the single test. +Also use the -s argument if you want to print out whatever or access pdb while testing. + +.. code-block:: shell + + $ python setup.py nosetests --tests tests/test_django.py:QuerySetTest.test_get_document_or_404 -s Community ========= diff --git a/setup.cfg b/setup.cfg index 3f3faa8c..e59f0fe2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,11 +1,8 @@ [nosetests] -verbosity = 3 +rednose = 1 +verbosity = 2 detailed-errors = 1 -#with-coverage = 1 -#cover-erase = 1 -#cover-html = 1 -#cover-html-dir = ../htmlcov -#cover-package = mongoengine -py3where = build -where = tests -#tests = document/__init__.py \ No newline at end of file +cover-erase = 1 +cover-branches = 1 +cover-package = mongoengine +tests = tests diff --git a/setup.py b/setup.py index 3ae5aeac..42794452 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,6 @@ init = os.path.join(os.path.dirname(__file__), 'mongoengine', '__init__.py') version_line = list(filter(lambda l: l.startswith('VERSION'), open(init)))[0] VERSION = get_version(eval(version_line.split('=')[-1])) -print(VERSION) CLASSIFIERS = [ 'Development Status :: 4 - Beta', @@ -79,5 +78,6 @@ setup(name='mongoengine', classifiers=CLASSIFIERS, install_requires=['pymongo>=2.7.1'], test_suite='nose.collector', + setup_requires=['nose', 'rednose'], # Allow proper nose usage with setuptols and tox **extra_opts ) diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..3f69b5e8 --- /dev/null +++ b/tox.ini @@ -0,0 +1,12 @@ +[tox] +envlist = {py26,py27,py32,py33,py34,pypy,pypy3}-{mg27,mg28} +#envlist = {py26,py27,py32,py33,py34,pypy,pypy3}-{mg27,mg28,mg30,mgdev} + +[testenv] +commands = + python setup.py nosetests {posargs} +deps = + mg27: PyMongo<2.8 + mg28: PyMongo>=2.8,<3.0 + mg30: PyMongo>=3.0 + mgdev: https://github.com/mongodb/mongo-python-driver/tarball/master