blob: 1e034c3eeb604f4e5d93ea2df1eaa8ee3d265e66 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import check_deps
import shutil
import tempfile
import unittest
areas = [
'src/rockets',
'src/rockets/nozzles',
'src/planets',
]
# Test case format: [ label, expected_area ]
area_for_label_cases = [
['', ''],
['/', ''],
['//', ''],
['//:root_target', ''],
['//src', ''],
['//src/', ''],
['//src/rockets', '//src/rockets'],
['//src/rockets/nozzles/core', '//src/rockets/nozzles'],
['//src/rockets:foo', '//src/rockets'],
['//src/planets:ledger_tests.manifest', '//src/planets'],
['//something/public/lib/fxl:fxl', ''],
]
# Test case format: [ label, dependency ]
# Allowable dependency patterns from layout.md:
# //build
# //buildtools
# //sdk
# //third_party
# (../)+lib
allowable_dep_cases = [
['//src/rockets/nozzles', '//build/toolchain:something'],
['//src/rockets/nozzles', '//buildtools/fuel_meter'],
['//src/rockets:foo', '//sdk/lib/widgets'],
['//src/planets/star_data', '//third_party/astrolabe'],
['//src/rockets/nozzles',
'//src/lib/nova:lib(//buildtools/toolchain:some_other_toolchain)'],
]
# Test case format: [ label, dependency ]
disallowed_dep_cases = [
['//src/rockets:foo', '//src/planets:bar'],
['//src/rockets/nozzles', '//something/lib/foobar'],
['//src/rockets/tests:rocket_tests', '//src/rockets/nozzles/lib:stardata'],
['//src/rockets/nozzles/widgets:helper', '//src/rockets/libations/qux'],
]
class TestCheckdepsMethods(unittest.TestCase):
def setUp(self):
self.test_dir = tempfile.mkdtemp()
for area in areas:
area_owners_file = os.path.join(self.test_dir, area, 'OWNERS')
os.makedirs(os.path.dirname(area_owners_file))
with open(area_owners_file, 'w') as f:
f.write('\n')
def tearDown(self):
shutil.rmtree(self.test_dir)
def test_area_for_label(self):
for test in area_for_label_cases:
label_area = check_deps.area_for_label(self.test_dir, test[0])
self.assertEquals(label_area, test[1])
def test_dep_allowed(self):
ignore_exclusions = False
for case in allowable_dep_cases:
label = case[0]
label_area = check_deps.area_for_label(self.test_dir, label)
dep = case[1]
dep_area = check_deps.area_for_label(self.test_dir, dep)
msg = '%s should be allowed to depend on %s' % (label, dep)
allowed = check_deps.dep_allowed(label, label_area, dep,
dep_area, ignore_exclusions)
self.assertTrue(allowed, msg=msg)
def test_dep_disallowed(self):
ignore_exclusions = False
for case in disallowed_dep_cases:
label = case[0]
label_area = check_deps.area_for_label(self.test_dir, label)
dep = case[1]
dep_area = check_deps.area_for_label(self.test_dir, dep)
msg = '%s should not be allowed to depend on %s' % (label, dep)
allowed = check_deps.dep_allowed(label, label_area, dep,
dep_area, ignore_exclusions)
self.assertFalse(allowed, msg=msg)
if __name__ == '__main__':
unittest.main()