blob: 15945c9d9ec3579a138db0475e200c5151dbb7fc [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for //tools/spdx_writer.py."""
import collections
import os
import sys
import unittest
REPOSITORY_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.append(os.path.join(REPOSITORY_ROOT, 'tools', 'licenses'))
from spdx_writer import _get_spdx_path
from spdx_writer import _Package
from spdx_writer import _SPDXJSONWriter
from test_utils import path_from_root
class SpdxPathTest(unittest.TestCase):
def test_get_spdx_path(self):
actual = _get_spdx_path(path_from_root('src'),
path_from_root('src', 'root', 'third_party', 'abc'))
self.assertEqual(actual, os.path.join(os.sep, 'root', 'third_party', 'abc'))
def test_get_spdx_path_error(self):
with self.assertRaises(ValueError):
_get_spdx_path(path_from_root('src'),
path_from_root('some', 'other', 'path'))
class PackageTest(unittest.TestCase):
def setUp(self):
super().setUp()
self.p = _Package('abc def ghi', path_from_root('src', 'LICENSE'))
def test_package_spdx_id(self):
self.assertEqual(self.p.package_spdx_id, 'SPDXRef-Package-abc-def-ghi')
def test_license_spdx_id(self):
self.assertEqual(self.p.license_spdx_id, 'LicenseRef-abc-def-ghi')
class SPDXJSONWriterTest(unittest.TestCase):
def setUp(self):
super().setUp()
root_pkg = _Package('root', path_from_root('src', 'LICENSE'))
self.writer = _SPDXJSONWriter(path_from_root('src'), root_pkg, '', '',
'', lambda _: '')
def test_get_dedup_id(self):
id_dict = collections.defaultdict(int)
elem_id = 'abc'
id1 = self.writer._get_dedup_id(elem_id, id_dict)
self.assertEqual(id1, elem_id)
id2 = self.writer._get_dedup_id(elem_id, id_dict)
self.assertEqual(id2, elem_id + '-1')
def test_get_license_id(self):
license_path = path_from_root('src', 'p1', 'LICENSE')
p1 = _Package('p1', license_path)
p1_id, need_license = self.writer._get_license_id(p1)
self.assertEqual(p1_id, p1.license_spdx_id)
self.assertTrue(need_license)
# Try a new package with the same license path.
p2 = _Package('p2', license_path)
p2_id, need_license = self.writer._get_license_id(p2)
self.assertEqual(p2_id, p1.license_spdx_id)
self.assertFalse(need_license)
if __name__ == '__main__':
unittest.main()