# gemato: Recursive loader tests # vim:fileencoding=utf-8 # (c) 2017 Michał Górny # Licensed under the terms of 2-clause BSD license import io import os import tempfile import unittest import gemato.recursiveloader class BasicNestingTest(unittest.TestCase): DIRS = ['sub', 'sub/deeper'] FILES = { 'Manifest': u''' MANIFEST sub/Manifest 65 MD5 6af76e314820a44aba2b4bd3e6280c20 ''', 'sub/Manifest': u''' MANIFEST deeper/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e ''', 'sub/deeper/Manifest': u'', } def setUp(self): self.dir = tempfile.mkdtemp() for k in self.DIRS: os.mkdir(os.path.join(self.dir, k)) for k, v in self.FILES.items(): with io.open(os.path.join(self.dir, k), 'w', encoding='utf8') as f: f.write(v) def tearDown(self): for k in self.FILES: os.unlink(os.path.join(self.dir, k)) for k in reversed(self.DIRS): os.rmdir(os.path.join(self.dir, k)) os.rmdir(self.dir) def test_init(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) self.assertIn('Manifest', m.loaded_manifests) def test_load_sub_manifest(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) self.assertNotIn('sub/Manifest', m.loaded_manifests) m.load_manifests_for_path('sub/test') self.assertIn('sub/Manifest', m.loaded_manifests) self.assertNotIn('sub/deeper/Manifest', m.loaded_manifests) m.load_manifests_for_path('sub/deeper/test') self.assertIn('sub/deeper/Manifest', m.loaded_manifests) def test_recursive_load_manifest(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) self.assertNotIn('sub/Manifest', m.loaded_manifests) self.assertNotIn('sub/deeper/Manifest', m.loaded_manifests) m.load_manifests_for_path('sub/deeper/test') self.assertIn('sub/Manifest', m.loaded_manifests) self.assertIn('sub/deeper/Manifest', m.loaded_manifests) class MultipleManifestTest(unittest.TestCase): DIRS = ['sub'] FILES = { 'Manifest': u''' MANIFEST sub/Manifest.a 0 MD5 d41d8cd98f00b204e9800998ecf8427e MANIFEST sub/Manifest.b 0 MD5 d41d8cd98f00b204e9800998ecf8427e ''', 'sub/Manifest.a': u'', 'sub/Manifest.b': u'', } def setUp(self): self.dir = tempfile.mkdtemp() for k in self.DIRS: os.mkdir(os.path.join(self.dir, k)) for k, v in self.FILES.items(): with io.open(os.path.join(self.dir, k), 'w', encoding='utf8') as f: f.write(v) def tearDown(self): for k in self.FILES: os.unlink(os.path.join(self.dir, k)) for k in reversed(self.DIRS): os.rmdir(os.path.join(self.dir, k)) os.rmdir(self.dir) def test_load_sub_manifest(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) self.assertNotIn('sub/Manifest.a', m.loaded_manifests) self.assertNotIn('sub/Manifest.b', m.loaded_manifests) m.load_manifests_for_path('sub/test') self.assertIn('sub/Manifest.a', m.loaded_manifests) self.assertIn('sub/Manifest.b', m.loaded_manifests) class MultipleTopLevelManifestTest(unittest.TestCase): FILES = { 'Manifest': u''' MANIFEST Manifest.a 0 MD5 d41d8cd98f00b204e9800998ecf8427e MANIFEST Manifest.b 0 MD5 d41d8cd98f00b204e9800998ecf8427e ''', 'Manifest.a': u'', 'Manifest.b': u'', } def setUp(self): self.dir = tempfile.mkdtemp() for k, v in self.FILES.items(): with io.open(os.path.join(self.dir, k), 'w', encoding='utf8') as f: f.write(v) def tearDown(self): for k in self.FILES: os.unlink(os.path.join(self.dir, k)) os.rmdir(self.dir) def test_load_extra_manifests(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) m.load_manifests_for_path('') self.assertIn('Manifest.a', m.loaded_manifests) self.assertIn('Manifest.b', m.loaded_manifests)