# Path: moult/utils.py
# def load_stdlib():
# def is_stdlib(module):
# def is_import_str(text):
# def import_path_from_file(filename, as_list=False):
# def file_containing_import(import_path, import_root):
# def resolve_import(import_path, from_module):
# def find_package(name, installed, package=False):
# def is_script(filename):
# def is_python_script(filename):
# def iter_dist_files(dist):
# def installed_packages(local=False):
# 
# Path: moult/classes.py
# class PyModule(object):
#     def __init__(self, name, version, location='', missing=False):
#         self.name = name
#         self.import_names = [name]
#         self.version = version
#         self.is_scan = version in ('SCRIPT', 'MODULE', 'DIRECTORY')
#         self.frameworks = []
#         self.location = location
#         self._dependencies = []  # The string list of dependencies
#         self.dependencies = []
#         self.dependants = []
#         self._dependants = []  # This is a shadow dependant list for the turtles
#         self.installed_scripts = []
#         self.installed_files = []
#         self.user = False
#         self.local = False
#         self.hidden = False
#         self.missing = missing
# 
#     def set_import_names(self, names):
#         self.import_names = [x.replace('/', '.') for x in names]
# 
#     def add_framework(self, framework):
#         if framework not in self.frameworks:
#             self.frameworks.append(framework)
# 
#     def add_dependency(self, dep):
#         if dep not in self.dependencies:
#             if dep.is_scan:
#                 self.dependencies.insert(0, dep)
#             else:
#                 self.dependencies.append(dep)
# 
#     def remove_dependency(self, dep):
#         if dep in self.dependencies:
#             self.dependencies.remove(dep)
# 
#     def add_dependant(self, dep):
#         if dep not in self.dependants:
#             if dep.is_scan:
#                 self.dependants.insert(0, dep)
#                 self._dependants.insert(0, dep)
#             else:
#                 self.dependants.append(dep)
#                 self._dependants.append(dep)
# 
#     def remove_dependant(self, dep):
#         if dep in self._dependants:
#             self._dependants.remove(dep)
# 
#     def restore_dependants(self):
#         self._dependants = self.dependants[:]
# 
#     def __hash__(self):
#         return hash((self.name, self.version))
# 
#     def __unicode__(self):
#         if self.is_scan:
#             fmt = '{name} [{version}]'
#         else:
#             fmt = '{name} ({version})'
#         return fmt.format(name=self.name, version=self.version)
# 
#     def __str__(self):
#         if PY3:
#             return self.__unicode__()
#         return self.__unicode__().encode('utf8')
# 
#     def __bytes__(self):
#         return self.__unicode__().encode('utf8')
# 
#     def __repr__(self):
#         r = '<PyModule {}>'.format(self.__unicode__())
#         if PY3:
#             return r
#         return r.encode('utf8')


import sys
import pytest
from moult import utils
from moult.classes import PyModule
    assert pkg is None

    pkg = utils.find_package('does.not.exist', installed)
    assert pkg is None

    pkg = utils.find_package('moult', installed)
    assert pkg and pkg.name == 'moult'

    # Searching for module imports should only match their top level
    # import names
    pkg = utils.find_package('moult.utils.does.not.exist', installed)
    assert pkg is None

    pkg = utils.find_package('pkg_resources', installed)
    assert pkg and pkg.name == 'setuptools'


def test_find_file(data):
    data_dir = data.copy_data()
    filename = str(data_dir.join('scripts/project/nested/scripts/testmodule/utils/spam.py'))
    root = str(data_dir.join('scripts/project/nested/scripts/testmodule'))
    import_file = utils.file_containing_import('utils.spam.SomeClass', root)
    assert import_file == filename


def test_file_types(data):
    datadir = data.copy_data()
    bash_script = str(datadir.join('scripts/shell/bash_script'))
    py_script = str(datadir.join('scripts/shell/python_script'))


# Path: moult/utils.py
# def load_stdlib():
# def is_stdlib(module):
# def is_import_str(text):
# def import_path_from_file(filename, as_list=False):
# def file_containing_import(import_path, import_root):
# def resolve_import(import_path, from_module):
# def find_package(name, installed, package=False):
# def is_script(filename):
# def is_python_script(filename):
# def iter_dist_files(dist):
# def installed_packages(local=False):
# 
# Path: moult/classes.py
# class PyModule(object):
#     def __init__(self, name, version, location='', missing=False):
#         self.name = name
#         self.import_names = [name]
#         self.version = version
#         self.is_scan = version in ('SCRIPT', 'MODULE', 'DIRECTORY')
#         self.frameworks = []
#         self.location = location
#         self._dependencies = []  # The string list of dependencies
#         self.dependencies = []
#         self.dependants = []
#         self._dependants = []  # This is a shadow dependant list for the turtles
#         self.installed_scripts = []
#         self.installed_files = []
#         self.user = False
#         self.local = False
#         self.hidden = False
#         self.missing = missing
# 
#     def set_import_names(self, names):
#         self.import_names = [x.replace('/', '.') for x in names]
# 
#     def add_framework(self, framework):
#         if framework not in self.frameworks:
#             self.frameworks.append(framework)
# 
#     def add_dependency(self, dep):
#         if dep not in self.dependencies:
#             if dep.is_scan:
#                 self.dependencies.insert(0, dep)
#             else:
#                 self.dependencies.append(dep)
# 
#     def remove_dependency(self, dep):
#         if dep in self.dependencies:
#             self.dependencies.remove(dep)
# 
#     def add_dependant(self, dep):
#         if dep not in self.dependants:
#             if dep.is_scan:
#                 self.dependants.insert(0, dep)
#                 self._dependants.insert(0, dep)
#             else:
#                 self.dependants.append(dep)
#                 self._dependants.append(dep)
# 
#     def remove_dependant(self, dep):
#         if dep in self._dependants:
#             self._dependants.remove(dep)
# 
#     def restore_dependants(self):
#         self._dependants = self.dependants[:]
# 
#     def __hash__(self):
#         return hash((self.name, self.version))
# 
#     def __unicode__(self):
#         if self.is_scan:
#             fmt = '{name} [{version}]'
#         else:
#             fmt = '{name} ({version})'
#         return fmt.format(name=self.name, version=self.version)
# 
#     def __str__(self):
#         if PY3:
#             return self.__unicode__()
#         return self.__unicode__().encode('utf8')
# 
#     def __bytes__(self):
#         return self.__unicode__().encode('utf8')
# 
#     def __repr__(self):
#         r = '<PyModule {}>'.format(self.__unicode__())
#         if PY3:
#             return r
#         return r.encode('utf8')


# Path: tests/test_utils.py
import sys
import pytest
from moult import utils
from moult.classes import PyModule

    assert pkg is None

    pkg = utils.find_package('does.not.exist', installed)
    assert pkg is None

    pkg = utils.find_package('moult', installed)
    assert pkg and pkg.name == 'moult'

    # Searching for module imports should only match their top level
    # import names
    pkg = utils.find_package('moult.utils.does.not.exist', installed)
    assert pkg is None

    pkg = utils.find_package('pkg_resources', installed)
    assert pkg and pkg.name == 'setuptools'


def test_find_file(data):
    data_dir = data.copy_data()
    filename = str(data_dir.join('scripts/project/nested/scripts/testmodule/utils/spam.py'))
    root = str(data_dir.join('scripts/project/nested/scripts/testmodule'))
    import_file = utils.file_containing_import('utils.spam.SomeClass', root)
    assert import_file == filename


def test_file_types(data):
    datadir = data.copy_data()
    bash_script = str(datadir.join('scripts/shell/bash_script'))
    py_script = str(datadir.join('scripts/shell/python_script'))


    assert utils.is_script(bash_script)