1bf215546Sopenharmony_ciimport argparse 2bf215546Sopenharmony_ciimport pytest # type: ignore 3bf215546Sopenharmony_ciimport subprocess 4bf215546Sopenharmony_ci 5bf215546Sopenharmony_cifrom .commit_in_branch import ( 6bf215546Sopenharmony_ci is_commit_valid, 7bf215546Sopenharmony_ci branch_has_commit, 8bf215546Sopenharmony_ci branch_has_backport_of_commit, 9bf215546Sopenharmony_ci canonicalize_commit, 10bf215546Sopenharmony_ci validate_branch, 11bf215546Sopenharmony_ci) 12bf215546Sopenharmony_ci 13bf215546Sopenharmony_ci 14bf215546Sopenharmony_cidef get_upstream() -> str: 15bf215546Sopenharmony_ci # Let's assume main is bound to the upstream remote and not a fork 16bf215546Sopenharmony_ci out = subprocess.check_output(['git', 'for-each-ref', 17bf215546Sopenharmony_ci '--format=%(upstream)', 18bf215546Sopenharmony_ci 'refs/heads/main'], 19bf215546Sopenharmony_ci stderr=subprocess.DEVNULL) 20bf215546Sopenharmony_ci return out.decode().strip().split('/')[2] 21bf215546Sopenharmony_ci 22bf215546Sopenharmony_ci 23bf215546Sopenharmony_ci@pytest.mark.parametrize( 24bf215546Sopenharmony_ci 'commit, expected', 25bf215546Sopenharmony_ci [ 26bf215546Sopenharmony_ci ('20.1-branchpoint', True), 27bf215546Sopenharmony_ci ('main', True), 28bf215546Sopenharmony_ci ('e58a10af640ba58b6001f5c5ad750b782547da76', True), 29bf215546Sopenharmony_ci ('d043d24654c851f0be57dbbf48274b5373dea42b', True), 30bf215546Sopenharmony_ci ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), 31bf215546Sopenharmony_ci ('0000000000000000000000000000000000000000', False), 32bf215546Sopenharmony_ci ('not-even-a-valid-commit-format', False), 33bf215546Sopenharmony_ci ]) 34bf215546Sopenharmony_cidef test_canonicalize_commit(commit: str, expected: bool) -> None: 35bf215546Sopenharmony_ci if expected: 36bf215546Sopenharmony_ci assert canonicalize_commit(commit) 37bf215546Sopenharmony_ci else: 38bf215546Sopenharmony_ci try: 39bf215546Sopenharmony_ci assert canonicalize_commit(commit) 40bf215546Sopenharmony_ci except argparse.ArgumentTypeError: 41bf215546Sopenharmony_ci return 42bf215546Sopenharmony_ci assert False 43bf215546Sopenharmony_ci 44bf215546Sopenharmony_ci 45bf215546Sopenharmony_ci@pytest.mark.parametrize( 46bf215546Sopenharmony_ci 'commit, expected', 47bf215546Sopenharmony_ci [ 48bf215546Sopenharmony_ci (get_upstream() + '/20.1', True), 49bf215546Sopenharmony_ci (get_upstream() + '/main', True), 50bf215546Sopenharmony_ci ('20.1', False), 51bf215546Sopenharmony_ci ('main', False), 52bf215546Sopenharmony_ci ('e58a10af640ba58b6001f5c5ad750b782547da76', False), 53bf215546Sopenharmony_ci ('d043d24654c851f0be57dbbf48274b5373dea42b', False), 54bf215546Sopenharmony_ci ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False), 55bf215546Sopenharmony_ci ('0000000000000000000000000000000000000000', False), 56bf215546Sopenharmony_ci ('not-even-a-valid-commit-format', False), 57bf215546Sopenharmony_ci ]) 58bf215546Sopenharmony_cidef test_validate_branch(commit: str, expected: bool) -> None: 59bf215546Sopenharmony_ci if expected: 60bf215546Sopenharmony_ci assert validate_branch(commit) 61bf215546Sopenharmony_ci else: 62bf215546Sopenharmony_ci try: 63bf215546Sopenharmony_ci assert validate_branch(commit) 64bf215546Sopenharmony_ci except argparse.ArgumentTypeError: 65bf215546Sopenharmony_ci return 66bf215546Sopenharmony_ci assert False 67bf215546Sopenharmony_ci 68bf215546Sopenharmony_ci 69bf215546Sopenharmony_ci@pytest.mark.parametrize( 70bf215546Sopenharmony_ci 'commit, expected', 71bf215546Sopenharmony_ci [ 72bf215546Sopenharmony_ci ('main', True), 73bf215546Sopenharmony_ci ('20.1-branchpoint', True), 74bf215546Sopenharmony_ci ('20.1', False), 75bf215546Sopenharmony_ci (get_upstream() + '/20.1', True), 76bf215546Sopenharmony_ci ('e58a10af640ba58b6001f5c5ad750b782547da76', True), 77bf215546Sopenharmony_ci ('d043d24654c851f0be57dbbf48274b5373dea42b', True), 78bf215546Sopenharmony_ci ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), 79bf215546Sopenharmony_ci ('0000000000000000000000000000000000000000', False), 80bf215546Sopenharmony_ci ('not-even-a-valid-commit-format', False), 81bf215546Sopenharmony_ci ]) 82bf215546Sopenharmony_cidef test_is_commit_valid(commit: str, expected: bool) -> None: 83bf215546Sopenharmony_ci assert is_commit_valid(commit) == expected 84bf215546Sopenharmony_ci 85bf215546Sopenharmony_ci 86bf215546Sopenharmony_ci@pytest.mark.parametrize( 87bf215546Sopenharmony_ci 'branch, commit, expected', 88bf215546Sopenharmony_ci [ 89bf215546Sopenharmony_ci ('20.1', '20.1-branchpoint', True), 90bf215546Sopenharmony_ci ('20.1', '20.0', False), 91bf215546Sopenharmony_ci ('20.1', 'main', False), 92bf215546Sopenharmony_ci ('20.1', 'e58a10af640ba58b6001f5c5ad750b782547da76', True), 93bf215546Sopenharmony_ci ('20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', True), 94bf215546Sopenharmony_ci ('20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False), 95bf215546Sopenharmony_ci ('main', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), 96bf215546Sopenharmony_ci ('20.0', 'd043d24654c851f0be57dbbf48274b5373dea42b', False), 97bf215546Sopenharmony_ci ]) 98bf215546Sopenharmony_cidef test_branch_has_commit(branch: str, commit: str, expected: bool) -> None: 99bf215546Sopenharmony_ci upstream = get_upstream() 100bf215546Sopenharmony_ci assert branch_has_commit(upstream, branch, commit) == expected 101bf215546Sopenharmony_ci 102bf215546Sopenharmony_ci 103bf215546Sopenharmony_ci@pytest.mark.parametrize( 104bf215546Sopenharmony_ci 'branch, commit, expected', 105bf215546Sopenharmony_ci [ 106bf215546Sopenharmony_ci ('20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', 'd043d24654c851f0be57dbbf48274b5373dea42b'), 107bf215546Sopenharmony_ci ('20.1', '20.1-branchpoint', ''), 108bf215546Sopenharmony_ci ('20.1', '20.0', ''), 109bf215546Sopenharmony_ci ('20.1', '20.2', ''), 110bf215546Sopenharmony_ci ('20.1', 'main', ''), 111bf215546Sopenharmony_ci ('20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', ''), 112bf215546Sopenharmony_ci ('20.0', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', ''), 113bf215546Sopenharmony_ci ]) 114bf215546Sopenharmony_cidef test_branch_has_backport_of_commit(branch: str, commit: str, expected: bool) -> None: 115bf215546Sopenharmony_ci upstream = get_upstream() 116bf215546Sopenharmony_ci assert branch_has_backport_of_commit(upstream, branch, commit) == expected 117