mirror of
https://github.com/python/cpython.git
synced 2026-02-22 15:10:47 +00:00
145 lines
5 KiB
Python
145 lines
5 KiB
Python
|
|
"""Tests to cover the Tools/build/compute-changes.py script."""
|
||
|
|
|
||
|
|
import importlib
|
||
|
|
import os
|
||
|
|
import unittest
|
||
|
|
from pathlib import Path
|
||
|
|
from unittest.mock import patch
|
||
|
|
|
||
|
|
from test.test_tools import skip_if_missing, imports_under_tool
|
||
|
|
|
||
|
|
skip_if_missing("build")
|
||
|
|
|
||
|
|
with patch.dict(os.environ, {"GITHUB_DEFAULT_BRANCH": "main"}):
|
||
|
|
with imports_under_tool("build"):
|
||
|
|
compute_changes = importlib.import_module("compute-changes")
|
||
|
|
|
||
|
|
process_changed_files = compute_changes.process_changed_files
|
||
|
|
Outputs = compute_changes.Outputs
|
||
|
|
ANDROID_DIRS = compute_changes.ANDROID_DIRS
|
||
|
|
IOS_DIRS = compute_changes.IOS_DIRS
|
||
|
|
MACOS_DIRS = compute_changes.MACOS_DIRS
|
||
|
|
WASI_DIRS = compute_changes.WASI_DIRS
|
||
|
|
RUN_TESTS_IGNORE = compute_changes.RUN_TESTS_IGNORE
|
||
|
|
UNIX_BUILD_SYSTEM_FILE_NAMES = compute_changes.UNIX_BUILD_SYSTEM_FILE_NAMES
|
||
|
|
LIBRARY_FUZZER_PATHS = compute_changes.LIBRARY_FUZZER_PATHS
|
||
|
|
|
||
|
|
|
||
|
|
class TestProcessChangedFiles(unittest.TestCase):
|
||
|
|
|
||
|
|
def test_windows(self):
|
||
|
|
f = {Path(".github/workflows/reusable-windows.yml")}
|
||
|
|
result = process_changed_files(f)
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_docs(self):
|
||
|
|
for f in (
|
||
|
|
".github/workflows/reusable-docs.yml",
|
||
|
|
"Doc/library/datetime.rst",
|
||
|
|
"Doc/Makefile",
|
||
|
|
):
|
||
|
|
with self.subTest(f=f):
|
||
|
|
result = process_changed_files({Path(f)})
|
||
|
|
self.assertTrue(result.run_docs)
|
||
|
|
self.assertFalse(result.run_tests)
|
||
|
|
|
||
|
|
def test_ci_fuzz_stdlib(self):
|
||
|
|
for p in LIBRARY_FUZZER_PATHS:
|
||
|
|
with self.subTest(p=p):
|
||
|
|
if p.is_dir():
|
||
|
|
f = p / "file"
|
||
|
|
elif p.is_file():
|
||
|
|
f = p
|
||
|
|
else:
|
||
|
|
continue
|
||
|
|
result = process_changed_files({f})
|
||
|
|
self.assertTrue(result.run_ci_fuzz_stdlib)
|
||
|
|
|
||
|
|
def test_android(self):
|
||
|
|
for d in ANDROID_DIRS:
|
||
|
|
with self.subTest(d=d):
|
||
|
|
result = process_changed_files({Path(d) / "file"})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_android)
|
||
|
|
self.assertFalse(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_ios(self):
|
||
|
|
for d in IOS_DIRS:
|
||
|
|
with self.subTest(d=d):
|
||
|
|
result = process_changed_files({Path(d) / "file"})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_ios)
|
||
|
|
self.assertFalse(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_macos(self):
|
||
|
|
f = {Path(".github/workflows/reusable-macos.yml")}
|
||
|
|
result = process_changed_files(f)
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_macos)
|
||
|
|
|
||
|
|
for d in MACOS_DIRS:
|
||
|
|
with self.subTest(d=d):
|
||
|
|
result = process_changed_files({Path(d) / "file"})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_macos)
|
||
|
|
self.assertFalse(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_wasi(self):
|
||
|
|
f = {Path(".github/workflows/reusable-wasi.yml")}
|
||
|
|
result = process_changed_files(f)
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_wasi)
|
||
|
|
|
||
|
|
for d in WASI_DIRS:
|
||
|
|
with self.subTest(d=d):
|
||
|
|
result = process_changed_files({d / "file"})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_wasi)
|
||
|
|
self.assertFalse(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_unix(self):
|
||
|
|
for f in UNIX_BUILD_SYSTEM_FILE_NAMES:
|
||
|
|
with self.subTest(f=f):
|
||
|
|
result = process_changed_files({f})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertFalse(result.run_windows_tests)
|
||
|
|
|
||
|
|
def test_msi(self):
|
||
|
|
for f in (
|
||
|
|
".github/workflows/reusable-windows-msi.yml",
|
||
|
|
"Tools/msi/build.bat",
|
||
|
|
):
|
||
|
|
with self.subTest(f=f):
|
||
|
|
result = process_changed_files({Path(f)})
|
||
|
|
self.assertTrue(result.run_windows_msi)
|
||
|
|
|
||
|
|
def test_all_run(self):
|
||
|
|
for f in (
|
||
|
|
".github/workflows/some-new-workflow.yml",
|
||
|
|
".github/workflows/build.yml",
|
||
|
|
):
|
||
|
|
with self.subTest(f=f):
|
||
|
|
result = process_changed_files({Path(f)})
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_android)
|
||
|
|
self.assertTrue(result.run_ios)
|
||
|
|
self.assertTrue(result.run_macos)
|
||
|
|
self.assertTrue(result.run_ubuntu)
|
||
|
|
self.assertTrue(result.run_wasi)
|
||
|
|
|
||
|
|
def test_all_ignored(self):
|
||
|
|
for f in RUN_TESTS_IGNORE:
|
||
|
|
with self.subTest(f=f):
|
||
|
|
self.assertEqual(process_changed_files({Path(f)}), Outputs())
|
||
|
|
|
||
|
|
def test_wasi_and_android(self):
|
||
|
|
f = {Path(".github/workflows/reusable-wasi.yml"), Path("Android/file")}
|
||
|
|
result = process_changed_files(f)
|
||
|
|
self.assertTrue(result.run_tests)
|
||
|
|
self.assertTrue(result.run_wasi)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|