| import unittest |
| import oe.license |
| |
| class SeenVisitor(oe.license.LicenseVisitor): |
| def __init__(self): |
| self.seen = [] |
| oe.license.LicenseVisitor.__init__(self) |
| |
| def visit_Str(self, node): |
| self.seen.append(node.s) |
| |
| class TestSingleLicense(unittest.TestCase): |
| licenses = [ |
| "GPLv2", |
| "LGPL-2.0", |
| "Artistic", |
| "MIT", |
| "GPLv3+", |
| "FOO_BAR", |
| ] |
| invalid_licenses = ["GPL/BSD"] |
| |
| @staticmethod |
| def parse(licensestr): |
| visitor = SeenVisitor() |
| visitor.visit_string(licensestr) |
| return visitor.seen |
| |
| def test_single_licenses(self): |
| for license in self.licenses: |
| licenses = self.parse(license) |
| self.assertListEqual(licenses, [license]) |
| |
| def test_invalid_licenses(self): |
| for license in self.invalid_licenses: |
| with self.assertRaises(oe.license.InvalidLicense) as cm: |
| self.parse(license) |
| self.assertEqual(cm.exception.license, license) |
| |
| class TestSimpleCombinations(unittest.TestCase): |
| tests = { |
| "FOO&BAR": ["FOO", "BAR"], |
| "BAZ & MOO": ["BAZ", "MOO"], |
| "ALPHA|BETA": ["ALPHA"], |
| "BAZ&MOO|FOO": ["FOO"], |
| "FOO&BAR|BAZ": ["FOO", "BAR"], |
| } |
| preferred = ["ALPHA", "FOO", "BAR"] |
| |
| def test_tests(self): |
| def choose(a, b): |
| if all(lic in self.preferred for lic in b): |
| return b |
| else: |
| return a |
| |
| for license, expected in self.tests.items(): |
| licenses = oe.license.flattened_licenses(license, choose) |
| self.assertListEqual(licenses, expected) |
| |
| class TestComplexCombinations(TestSimpleCombinations): |
| tests = { |
| "FOO & (BAR | BAZ)&MOO": ["FOO", "BAR", "MOO"], |
| "(ALPHA|(BETA&THETA)|OMEGA)&DELTA": ["OMEGA", "DELTA"], |
| "((ALPHA|BETA)&FOO)|BAZ": ["BETA", "FOO"], |
| "(GPL-2.0|Proprietary)&BSD-4-clause&MIT": ["GPL-2.0", "BSD-4-clause", "MIT"], |
| } |
| preferred = ["BAR", "OMEGA", "BETA", "GPL-2.0"] |