# Path: moult/filesystem_scanner.py
# def _scan_file(filename, sentinel, source_type='import'):
# def _scan_directory(directory, sentinel, depth=0):
# def scan_file(pym, filename, sentinel, installed):
# def scan_directory(pym, directory, sentinel, installed, depth=0):
# def scan(filename, installed, sentinel=None):
# 
# 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 filesystem_scanner, utils
from moult.classes import PyModule
    mpkg1 = utils.find_package('moult', installed, True)
    mpkg2 = utils.find_package('testpackage', installed, True)

    pkg = filesystem_scanner.scan(str(bad_script), installed)
    assert pkg is not None
    assert mpkg1 in pkg.dependencies
    assert mpkg2 in pkg.dependencies

    data.verify_data()


def test_unicode_scan(data):
    installed = data.copy_installed()
    data_dir = data.copy_data()
    unicode_script = data_dir.join('scripts/loose/unicode.py')

    mpkg = utils.find_package('moult', installed, True)
    pkg = filesystem_scanner.scan(unicode_script.strpath, installed)
    assert pkg is not None
    assert mpkg in pkg.dependencies


def test_unicode_import_scan(data, capsys):
    installed = data.copy_installed()
    data_dir = data.copy_data()
    unicode_script = data_dir.join('scripts/loose/unicode_import.py')

    name = '\xe8\x84\xb1\xe7\x9a\xae'
    if sys.version_info[0] == 2:
        name = name.decode('utf8')

# Path: moult/filesystem_scanner.py
# def _scan_file(filename, sentinel, source_type='import'):
# def _scan_directory(directory, sentinel, depth=0):
# def scan_file(pym, filename, sentinel, installed):
# def scan_directory(pym, directory, sentinel, installed, depth=0):
# def scan(filename, installed, sentinel=None):
# 
# 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_scanning.py
import sys
import pytest
from moult import filesystem_scanner, utils
from moult.classes import PyModule

    mpkg1 = utils.find_package('moult', installed, True)
    mpkg2 = utils.find_package('testpackage', installed, True)

    pkg = filesystem_scanner.scan(str(bad_script), installed)
    assert pkg is not None
    assert mpkg1 in pkg.dependencies
    assert mpkg2 in pkg.dependencies

    data.verify_data()


def test_unicode_scan(data):
    installed = data.copy_installed()
    data_dir = data.copy_data()
    unicode_script = data_dir.join('scripts/loose/unicode.py')

    mpkg = utils.find_package('moult', installed, True)
    pkg = filesystem_scanner.scan(unicode_script.strpath, installed)
    assert pkg is not None
    assert mpkg in pkg.dependencies


def test_unicode_import_scan(data, capsys):
    installed = data.copy_installed()
    data_dir = data.copy_data()
    unicode_script = data_dir.join('scripts/loose/unicode_import.py')

    name = '\xe8\x84\xb1\xe7\x9a\xae'
    if sys.version_info[0] == 2:
        name = name.decode('utf8')

    japanesu = PyModule(name, '1.2.3', '/')