|
|
# encoding: utf-8
|
|
|
"""Tests for IPython.utils.module_paths.py"""
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Copyright (C) 2008-2011 The IPython Development Team
|
|
|
#
|
|
|
# Distributed under the terms of the BSD License. The full license is in
|
|
|
# the file COPYING, distributed as part of this software.
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
import shutil
|
|
|
import sys
|
|
|
import tempfile
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
from IPython.testing.tools import make_tempfile
|
|
|
|
|
|
import IPython.utils.module_paths as mp
|
|
|
|
|
|
import nose.tools as nt
|
|
|
|
|
|
TEST_FILE_PATH = Path(__file__).resolve().parent
|
|
|
|
|
|
TMP_TEST_DIR = Path(tempfile.mkdtemp(suffix="with.dot"))
|
|
|
#
|
|
|
# Setup/teardown functions/decorators
|
|
|
#
|
|
|
|
|
|
old_syspath = sys.path
|
|
|
|
|
|
def make_empty_file(fname):
|
|
|
open(fname, 'w').close()
|
|
|
|
|
|
|
|
|
def setup_module():
|
|
|
"""Setup testenvironment for the module:
|
|
|
|
|
|
"""
|
|
|
# Do not mask exceptions here. In particular, catching WindowsError is a
|
|
|
# problem because that exception is only defined on Windows...
|
|
|
Path(TMP_TEST_DIR / "xmod").mkdir(parents=True)
|
|
|
Path(TMP_TEST_DIR / "nomod").mkdir(parents=True)
|
|
|
make_empty_file(TMP_TEST_DIR / "xmod/__init__.py")
|
|
|
make_empty_file(TMP_TEST_DIR / "xmod/sub.py")
|
|
|
make_empty_file(TMP_TEST_DIR / "pack.py")
|
|
|
make_empty_file(TMP_TEST_DIR / "packpyc.pyc")
|
|
|
sys.path = [str(TMP_TEST_DIR)]
|
|
|
|
|
|
def teardown_module():
|
|
|
"""Teardown testenvironment for the module:
|
|
|
|
|
|
- Remove tempdir
|
|
|
- restore sys.path
|
|
|
"""
|
|
|
# Note: we remove the parent test dir, which is the root of all test
|
|
|
# subdirs we may have created. Use shutil instead of os.removedirs, so
|
|
|
# that non-empty directories are all recursively removed.
|
|
|
shutil.rmtree(TMP_TEST_DIR)
|
|
|
sys.path = old_syspath
|
|
|
|
|
|
def test_tempdir():
|
|
|
"""
|
|
|
Ensure the test are done with a temporary file that have a dot somewhere.
|
|
|
"""
|
|
|
nt.assert_in(".", str(TMP_TEST_DIR))
|
|
|
|
|
|
|
|
|
def test_find_mod_1():
|
|
|
"""
|
|
|
Search for a directory's file path.
|
|
|
Expected output: a path to that directory's __init__.py file.
|
|
|
"""
|
|
|
modpath = TMP_TEST_DIR / "xmod" / "__init__.py"
|
|
|
nt.assert_equal(Path(mp.find_mod("xmod")), modpath)
|
|
|
|
|
|
def test_find_mod_2():
|
|
|
"""
|
|
|
Search for a directory's file path.
|
|
|
Expected output: a path to that directory's __init__.py file.
|
|
|
TODO: Confirm why this is a duplicate test.
|
|
|
"""
|
|
|
modpath = TMP_TEST_DIR / "xmod" / "__init__.py"
|
|
|
nt.assert_equal(Path(mp.find_mod("xmod")), modpath)
|
|
|
|
|
|
def test_find_mod_3():
|
|
|
"""
|
|
|
Search for a directory + a filename without its .py extension
|
|
|
Expected output: full path with .py extension.
|
|
|
"""
|
|
|
modpath = TMP_TEST_DIR / "xmod" / "sub.py"
|
|
|
nt.assert_equal(Path(mp.find_mod("xmod.sub")), modpath)
|
|
|
|
|
|
def test_find_mod_4():
|
|
|
"""
|
|
|
Search for a filename without its .py extension
|
|
|
Expected output: full path with .py extension
|
|
|
"""
|
|
|
modpath = TMP_TEST_DIR / "pack.py"
|
|
|
nt.assert_equal(Path(mp.find_mod("pack")), modpath)
|
|
|
|
|
|
def test_find_mod_5():
|
|
|
"""
|
|
|
Search for a filename with a .pyc extension
|
|
|
Expected output: TODO: do we exclude or include .pyc files?
|
|
|
"""
|
|
|
nt.assert_equal(mp.find_mod("packpyc"), None)
|
|
|
|