import os
import sys
import unittest

import nose.config
import nose.importer


class TestImporter(unittest.TestCase):

    def setUp(self):
        self.p = sys.path[:]

    def tearDown(self):
        sys.path = self.p[:]

    def test_add_paths(self):
        where = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                             'support'))
        foo = os.path.join(where, 'foo')
        foobar = os.path.join(foo, 'bar')
        nose.importer.add_path(foobar)

        assert not foobar in sys.path
        assert not foo in sys.path
        assert where in sys.path
        assert sys.path[0] == where, "%s first should be %s" % (sys.path, where)

    def test_import(self):
        where = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                             'support'))
        foo = os.path.join(where, 'foo')
        foobar = os.path.join(foo, 'bar')

        imp = nose.importer.Importer()
        mod = imp.importFromDir(foobar, 'buz')
        assert where in sys.path
        # buz has an intra-package import that sets boodle
        assert mod.boodle

    def test_module_no_file(self):
        where = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                             'support'))
        foo = os.path.join(where, 'foo')
        foobar = os.path.join(foo, 'bar')

        # something that's not a real module and has no __file__
        sys.modules['buz'] = 'Whatever'

        imp = nose.importer.Importer()
        mod = imp.importFromDir(foobar, 'buz')
        assert where in sys.path
        # buz has an intra-package import that sets boodle
        assert mod.boodle

    def test_module_init_prefix(self):
        where = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                             'support', 'init_prefix_bug'))
        nose.importer.add_path(where)
        mod = os.path.join(where, '__init__not.py')
        fqname = 'init_prefix_bug.__init__not'

        imp = nose.importer.Importer()
        mod = imp.importFromPath(mod, fqname)


if __name__ == '__main__':
    unittest.main()
