1*90c8c64dSAndroid Build Coastguard Worker# Copyright 2021 Google Inc. All rights reserved. 2*90c8c64dSAndroid Build Coastguard Worker# 3*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*90c8c64dSAndroid Build Coastguard Worker# 7*90c8c64dSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*90c8c64dSAndroid Build Coastguard Worker# 9*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*90c8c64dSAndroid Build Coastguard Worker# limitations under the License. 14*90c8c64dSAndroid Build Coastguard Workerimport os.path 15*90c8c64dSAndroid Build Coastguard Workerimport unittest 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Workerfrom pyfakefs import fake_filesystem_unittest 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Workerimport add3prf 20*90c8c64dSAndroid Build Coastguard Worker 21*90c8c64dSAndroid Build Coastguard Workerclass LicenseDetectionTestCase(fake_filesystem_unittest.TestCase): 22*90c8c64dSAndroid Build Coastguard Worker 23*90c8c64dSAndroid Build Coastguard Worker def setUp(self): 24*90c8c64dSAndroid Build Coastguard Worker self.setUpPyfakefs() 25*90c8c64dSAndroid Build Coastguard Worker 26*90c8c64dSAndroid Build Coastguard Worker def test_dual_license(self): 27*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-APACHE") 28*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-MIT") 29*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("MIT OR Apache-2.0") 30*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 2) 31*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 32*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.APACHE2) 33*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 34*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-APACHE") 35*90c8c64dSAndroid Build Coastguard Worker 36*90c8c64dSAndroid Build Coastguard Worker def test_mit_license(self): 37*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 38*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("MIT") 39*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 40*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 41*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.MIT) 42*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 43*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker def test_misc_license(self): 46*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE.txt") 47*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 48*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 49*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 50*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.BSD_LIKE) 51*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 52*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE.txt") 53*90c8c64dSAndroid Build Coastguard Worker 54*90c8c64dSAndroid Build Coastguard Worker def test_missing_license_file(self): 55*90c8c64dSAndroid Build Coastguard Worker with self.assertRaises(FileNotFoundError): 56*90c8c64dSAndroid Build Coastguard Worker add3prf.decide_license_type("MIT OR Apache-2.0") 57*90c8c64dSAndroid Build Coastguard Worker 58*90c8c64dSAndroid Build Coastguard Worker def test_mpl_license(self): 59*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 60*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("MPL") 61*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 62*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 63*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.MPL) 64*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.RECIPROCAL) 65*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 66*90c8c64dSAndroid Build Coastguard Worker 67*90c8c64dSAndroid Build Coastguard Worker def test_0bsd_license(self): 68*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 69*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("0BSD") 70*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 71*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 72*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.ZERO_BSD) 73*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 74*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 75*90c8c64dSAndroid Build Coastguard Worker 76*90c8c64dSAndroid Build Coastguard Worker def test_0bsd_licensefile(self): 77*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-0BSD") 78*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 79*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 80*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 81*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.ZERO_BSD) 82*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 83*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-0BSD") 84*90c8c64dSAndroid Build Coastguard Worker 85*90c8c64dSAndroid Build Coastguard Worker def test_0bsd_licensefile_with_extension(self): 86*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-0BSD.md") 87*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 88*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 89*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 90*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.ZERO_BSD) 91*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 92*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-0BSD.md") 93*90c8c64dSAndroid Build Coastguard Worker 94*90c8c64dSAndroid Build Coastguard Worker def test_unlicense_license(self): 95*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 96*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("Unlicense") 97*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 98*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 99*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.UNLICENSE) 100*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 101*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 102*90c8c64dSAndroid Build Coastguard Worker 103*90c8c64dSAndroid Build Coastguard Worker def test_unlicense_licensefile(self): 104*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("UNLICENSE") 105*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 106*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 107*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 108*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.UNLICENSE) 109*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 110*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "UNLICENSE") 111*90c8c64dSAndroid Build Coastguard Worker 112*90c8c64dSAndroid Build Coastguard Worker def test_unlicense_licensefile_with_extension(self): 113*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("UNLICENSE.txt") 114*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 115*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 116*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 117*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.UNLICENSE) 118*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.PERMISSIVE) 119*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "UNLICENSE.txt") 120*90c8c64dSAndroid Build Coastguard Worker 121*90c8c64dSAndroid Build Coastguard Worker def test_zlib_license(self): 122*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 123*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("Zlib") 124*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 125*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 126*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.ZLIB) 127*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 128*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 129*90c8c64dSAndroid Build Coastguard Worker 130*90c8c64dSAndroid Build Coastguard Worker def test_zlib_licensefile(self): 131*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-ZLIB") 132*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 133*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 134*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 135*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.ZLIB) 136*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 137*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-ZLIB") 138*90c8c64dSAndroid Build Coastguard Worker 139*90c8c64dSAndroid Build Coastguard Worker def test_boost_license(self): 140*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE") 141*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("BSL-1.0") 142*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 143*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 144*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.BOOST) 145*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 146*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE") 147*90c8c64dSAndroid Build Coastguard Worker 148*90c8c64dSAndroid Build Coastguard Worker def test_boost_licensefile(self): 149*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-BOOST") 150*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 151*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 152*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 153*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.BOOST) 154*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 155*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-BOOST") 156*90c8c64dSAndroid Build Coastguard Worker 157*90c8c64dSAndroid Build Coastguard Worker def test_bsd_licensefile(self): 158*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("LICENSE-BSD") 159*90c8c64dSAndroid Build Coastguard Worker licenses = add3prf.decide_license_type("") 160*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(len(licenses), 1) 161*90c8c64dSAndroid Build Coastguard Worker preferred_license = licenses[0] 162*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.type, add3prf.LicenseType.BSD_LIKE) 163*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.group, add3prf.LicenseGroup.NOTICE) 164*90c8c64dSAndroid Build Coastguard Worker self.assertEqual(preferred_license.filename, "LICENSE-BSD") 165*90c8c64dSAndroid Build Coastguard Worker 166*90c8c64dSAndroid Build Coastguard Workerclass AddModuleLicenseTestCase(fake_filesystem_unittest.TestCase): 167*90c8c64dSAndroid Build Coastguard Worker 168*90c8c64dSAndroid Build Coastguard Worker def setUp(self): 169*90c8c64dSAndroid Build Coastguard Worker self.setUpPyfakefs() 170*90c8c64dSAndroid Build Coastguard Worker 171*90c8c64dSAndroid Build Coastguard Worker def test_no_file(self): 172*90c8c64dSAndroid Build Coastguard Worker add3prf.add_module_license(add3prf.LicenseType.APACHE2) 173*90c8c64dSAndroid Build Coastguard Worker self.assertTrue(os.path.exists("MODULE_LICENSE_APACHE2")) 174*90c8c64dSAndroid Build Coastguard Worker 175*90c8c64dSAndroid Build Coastguard Worker def test_already_exists(self): 176*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("MODULE_LICENSE_APACHE2") 177*90c8c64dSAndroid Build Coastguard Worker add3prf.add_module_license(add3prf.LicenseType.APACHE2) 178*90c8c64dSAndroid Build Coastguard Worker 179*90c8c64dSAndroid Build Coastguard Worker def test_mit_apache(self): 180*90c8c64dSAndroid Build Coastguard Worker self.fs.create_file("MODULE_LICENSE_MIT") 181*90c8c64dSAndroid Build Coastguard Worker with self.assertRaises(Exception): 182*90c8c64dSAndroid Build Coastguard Worker add3prf.add_module_license(add3prf.LicenseType.APACHE2) 183*90c8c64dSAndroid Build Coastguard Worker 184*90c8c64dSAndroid Build Coastguard Worker 185*90c8c64dSAndroid Build Coastguard Workerif __name__ == '__main__': 186*90c8c64dSAndroid Build Coastguard Worker unittest.main(verbosity=2) 187