"""Tests for the version requirement functions.

"""
import numpy as np
from numpy.testing import assert_raises, assert_equal
import nose
from skimage._shared import version_requirements as version_req


def test_get_module_version():
    assert version_req.get_module_version('numpy')
    assert version_req.get_module_version('scipy')
    assert_raises(ImportError,
                  lambda: version_req.get_module_version('fakenumpy'))


def test_is_installed():
    assert version_req.is_installed('python', '>=2.7')
    assert not version_req.is_installed('numpy', '<1.0')


def test_require():
    # A function that only runs on Python >2.7 and numpy > 1.5 (should pass)
    @version_req.require('python', '>2.7')
    @version_req.require('numpy', '>1.5')
    def foo():
        return 1

    assert_equal(foo(), 1)

    # function that requires scipy < 0.1 (should fail)
    @version_req.require('scipy', '<0.1')
    def bar():
        return 0

    assert_raises(ImportError, lambda: bar())


def test_get_module():
    assert_equal(version_req.get_module('numpy'), np)
    assert_equal(version_req.get_module('nose'), nose)
