aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py')
-rw-r--r--.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py b/.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py
new file mode 100644
index 00000000..5e8e7682
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/setuptools/_distutils/tests/test_extension.py
@@ -0,0 +1,117 @@
+"""Tests for distutils.extension."""
+
+import os
+import pathlib
+import warnings
+from distutils.extension import Extension, read_setup_file
+
+import pytest
+from test.support.warnings_helper import check_warnings
+
+
+class TestExtension:
+ def test_read_setup_file(self):
+ # trying to read a Setup file
+ # (sample extracted from the PyGame project)
+ setup = os.path.join(os.path.dirname(__file__), 'Setup.sample')
+
+ exts = read_setup_file(setup)
+ names = [ext.name for ext in exts]
+ names.sort()
+
+ # here are the extensions read_setup_file should have created
+ # out of the file
+ wanted = [
+ '_arraysurfarray',
+ '_camera',
+ '_numericsndarray',
+ '_numericsurfarray',
+ 'base',
+ 'bufferproxy',
+ 'cdrom',
+ 'color',
+ 'constants',
+ 'display',
+ 'draw',
+ 'event',
+ 'fastevent',
+ 'font',
+ 'gfxdraw',
+ 'image',
+ 'imageext',
+ 'joystick',
+ 'key',
+ 'mask',
+ 'mixer',
+ 'mixer_music',
+ 'mouse',
+ 'movie',
+ 'overlay',
+ 'pixelarray',
+ 'pypm',
+ 'rect',
+ 'rwobject',
+ 'scrap',
+ 'surface',
+ 'surflock',
+ 'time',
+ 'transform',
+ ]
+
+ assert names == wanted
+
+ def test_extension_init(self):
+ # the first argument, which is the name, must be a string
+ with pytest.raises(TypeError):
+ Extension(1, [])
+ ext = Extension('name', [])
+ assert ext.name == 'name'
+
+ # the second argument, which is the list of files, must
+ # be an iterable of strings or PathLike objects, and not a string
+ with pytest.raises(TypeError):
+ Extension('name', 'file')
+ with pytest.raises(TypeError):
+ Extension('name', ['file', 1])
+ ext = Extension('name', ['file1', 'file2'])
+ assert ext.sources == ['file1', 'file2']
+ ext = Extension('name', [pathlib.Path('file1'), pathlib.Path('file2')])
+ assert ext.sources == ['file1', 'file2']
+
+ # any non-string iterable of strings or PathLike objects should work
+ ext = Extension('name', ('file1', 'file2')) # tuple
+ assert ext.sources == ['file1', 'file2']
+ ext = Extension('name', {'file1', 'file2'}) # set
+ assert sorted(ext.sources) == ['file1', 'file2']
+ ext = Extension('name', iter(['file1', 'file2'])) # iterator
+ assert ext.sources == ['file1', 'file2']
+ ext = Extension('name', [pathlib.Path('file1'), 'file2']) # mixed types
+ assert ext.sources == ['file1', 'file2']
+
+ # others arguments have defaults
+ for attr in (
+ 'include_dirs',
+ 'define_macros',
+ 'undef_macros',
+ 'library_dirs',
+ 'libraries',
+ 'runtime_library_dirs',
+ 'extra_objects',
+ 'extra_compile_args',
+ 'extra_link_args',
+ 'export_symbols',
+ 'swig_opts',
+ 'depends',
+ ):
+ assert getattr(ext, attr) == []
+
+ assert ext.language is None
+ assert ext.optional is None
+
+ # if there are unknown keyword options, warn about them
+ with check_warnings() as w:
+ warnings.simplefilter('always')
+ ext = Extension('name', ['file1', 'file2'], chic=True)
+
+ assert len(w.warnings) == 1
+ assert str(w.warnings[0].message) == "Unknown Extension options: 'chic'"