# Path: gears/assets.py
# class Dependencies(object):
# 
#     def __init__(self, environment):
#         self.environment = environment
#         self._registry = set()
# 
#     @classmethod
#     def from_list(cls, environment, data):
#         self = cls(environment)
#         for absolute_path in data:
#             self.add(absolute_path)
#         return self
# 
#     @cached_property
#     def expired(self):
#         return any(d.expired for d in self._registry)
# 
#     @cached_property
#     def mtime(self):
#         if not self._registry:
#             return None
#         return max(d.mtime for d in self._registry)
# 
#     def add(self, absolute_path):
#         self._registry.add(Dependency(self.environment, absolute_path))
# 
#     def clear(self):
#         self._registry.clear()
# 
#     def to_list(self):
#         return [d.absolute_path for d in self._registry]
# 
# Path: tests/helpers.py
# class GearsTestCase(unittest2.TestCase):
# 
#     fixtures_root = None
# 
#     def get_fixture_path(self, fixture):
#         return os.path.join(FIXTURES_DIR, self.fixtures_root, fixture)
# 
#     def find_fixture_file(self, fixture, name):
#         fixture_path = self.get_fixture_path(fixture)
#         for dirpath, dirnames, filenames in os.walk(fixture_path):
#             for filename in filenames:
#                 if filename.split('.')[0] == name:
#                     return os.path.join(dirpath, filename)
#         return None
# 
#     def get_source_path(self, fixture):
#         return self.find_fixture_file(fixture, 'source')
# 
#     def get_source(self, fixture):
#         return read(self.get_source_path(fixture))
# 
#     def get_output(self, fixture, name='output'):
#         return read(self.find_fixture_file(fixture, name))
# 
#     def get_finder(self, fixture):
#         fixture_path = self.get_fixture_path(fixture)
#         return FileSystemFinder([fixture_path])
# 
#     def get_environment(self, fixture):
#         finder = self.get_finder(fixture)
#         environment = Environment(os.path.join(TESTS_DIR, 'static'))
#         environment.finders.register(finder)
#         environment.register_defaults()
#         return environment
# 
#     def get_asset(self, fixture, environment=None, asset_class=Asset):
#         source_path = self.get_source_path(fixture)
#         if environment is None:
#             environment = self.get_environment(fixture)
# 
#         fixture_path = self.get_fixture_path(fixture)
#         logical_path = os.path.relpath(source_path, fixture_path)
#         asset_attributes = AssetAttributes(environment, logical_path)
# 
#         return asset_class(asset_attributes, source_path)
# 
#     def get_static_asset(self, fixture, environment=None):
#         return self.get_asset(fixture, environment, asset_class=StaticAsset)


import os
from gears.assets import Dependencies
from .helpers import GearsTestCase


class AssetDependenciesTests(GearsTestCase):

    fixtures_root = 'asset_dependencies'

    def test_adds_dependency_only_once(self):
        fixture_file = self.find_fixture_file('adds_dependency_only_once', 'dependency')

# Path: gears/assets.py
# class Dependencies(object):
# 
#     def __init__(self, environment):
#         self.environment = environment
#         self._registry = set()
# 
#     @classmethod
#     def from_list(cls, environment, data):
#         self = cls(environment)
#         for absolute_path in data:
#             self.add(absolute_path)
#         return self
# 
#     @cached_property
#     def expired(self):
#         return any(d.expired for d in self._registry)
# 
#     @cached_property
#     def mtime(self):
#         if not self._registry:
#             return None
#         return max(d.mtime for d in self._registry)
# 
#     def add(self, absolute_path):
#         self._registry.add(Dependency(self.environment, absolute_path))
# 
#     def clear(self):
#         self._registry.clear()
# 
#     def to_list(self):
#         return [d.absolute_path for d in self._registry]
# 
# Path: tests/helpers.py
# class GearsTestCase(unittest2.TestCase):
# 
#     fixtures_root = None
# 
#     def get_fixture_path(self, fixture):
#         return os.path.join(FIXTURES_DIR, self.fixtures_root, fixture)
# 
#     def find_fixture_file(self, fixture, name):
#         fixture_path = self.get_fixture_path(fixture)
#         for dirpath, dirnames, filenames in os.walk(fixture_path):
#             for filename in filenames:
#                 if filename.split('.')[0] == name:
#                     return os.path.join(dirpath, filename)
#         return None
# 
#     def get_source_path(self, fixture):
#         return self.find_fixture_file(fixture, 'source')
# 
#     def get_source(self, fixture):
#         return read(self.get_source_path(fixture))
# 
#     def get_output(self, fixture, name='output'):
#         return read(self.find_fixture_file(fixture, name))
# 
#     def get_finder(self, fixture):
#         fixture_path = self.get_fixture_path(fixture)
#         return FileSystemFinder([fixture_path])
# 
#     def get_environment(self, fixture):
#         finder = self.get_finder(fixture)
#         environment = Environment(os.path.join(TESTS_DIR, 'static'))
#         environment.finders.register(finder)
#         environment.register_defaults()
#         return environment
# 
#     def get_asset(self, fixture, environment=None, asset_class=Asset):
#         source_path = self.get_source_path(fixture)
#         if environment is None:
#             environment = self.get_environment(fixture)
# 
#         fixture_path = self.get_fixture_path(fixture)
#         logical_path = os.path.relpath(source_path, fixture_path)
#         asset_attributes = AssetAttributes(environment, logical_path)
# 
#         return asset_class(asset_attributes, source_path)
# 
#     def get_static_asset(self, fixture, environment=None):
#         return self.get_asset(fixture, environment, asset_class=StaticAsset)


# Path: tests/test_asset_dependencies.py
import os
from gears.assets import Dependencies
from .helpers import GearsTestCase



class AssetDependenciesTests(GearsTestCase):

    fixtures_root = 'asset_dependencies'

    def test_adds_dependency_only_once(self):
        fixture_file = self.find_fixture_file('adds_dependency_only_once', 'dependency')

        dependencies = Dependencies(self.get_environment('adds_dependency_only_once'))