summaryrefslogtreecommitdiff
path: root/test cases/python
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-03-16 18:36:25 -0400
committerEli Schwartz <eschwartz@archlinux.org>2022-03-16 18:39:02 -0400
commit4b0c0810df8e0fae9529d879539b8926b5b278a3 (patch)
tree31f11e73e0141678e8f60e4c16ba492215733f91 /test cases/python
parentff844f3a1fd0cac31e2f61add59393b16548c97c (diff)
downloadmeson-4b0c0810df8e0fae9529d879539b8926b5b278a3.tar.gz
unittests: convert python tests to project tests
Perhaps when this test case was originally created, project tests could not use a matrix of options? This is certainly possible today, so don't write special unittest handling for this instead. This adds proper visibility into what gets run and what doesn't. Now we know which python executables got tested and which got skipped.
Diffstat (limited to 'test cases/python')
-rwxr-xr-xtest cases/python/8 different python versions/blaster.py14
-rw-r--r--test cases/python/8 different python versions/ext/meson.build6
-rw-r--r--test cases/python/8 different python versions/ext/tachyon_module.c59
-rw-r--r--test cases/python/8 different python versions/meson.build26
-rw-r--r--test cases/python/8 different python versions/meson_options.txt4
-rw-r--r--test cases/python/8 different python versions/test.json13
6 files changed, 122 insertions, 0 deletions
diff --git a/test cases/python/8 different python versions/blaster.py b/test cases/python/8 different python versions/blaster.py
new file mode 100755
index 000000000..163b6d426
--- /dev/null
+++ b/test cases/python/8 different python versions/blaster.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+
+import sys
+import tachyon
+
+result = tachyon.phaserize('shoot')
+
+if not isinstance(result, int):
+ print('Returned result not an integer.')
+ sys.exit(1)
+
+if result != 1:
+ print('Returned result {} is not 1.'.format(result))
+ sys.exit(1)
diff --git a/test cases/python/8 different python versions/ext/meson.build b/test cases/python/8 different python versions/ext/meson.build
new file mode 100644
index 000000000..b13bb326f
--- /dev/null
+++ b/test cases/python/8 different python versions/ext/meson.build
@@ -0,0 +1,6 @@
+pylib = py.extension_module('tachyon',
+ 'tachyon_module.c',
+ dependencies : py_dep,
+)
+
+pypathdir = meson.current_build_dir()
diff --git a/test cases/python/8 different python versions/ext/tachyon_module.c b/test cases/python/8 different python versions/ext/tachyon_module.c
new file mode 100644
index 000000000..68eda5380
--- /dev/null
+++ b/test cases/python/8 different python versions/ext/tachyon_module.c
@@ -0,0 +1,59 @@
+/*
+ Copyright 2018 The Meson development team
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/* A very simple Python extension module. */
+
+#include <Python.h>
+#include <string.h>
+
+static PyObject* phaserize(PyObject *self, PyObject *args) {
+ const char *message;
+ int result;
+
+ if(!PyArg_ParseTuple(args, "s", &message))
+ return NULL;
+
+ result = strcmp(message, "shoot") ? 0 : 1;
+#if PY_VERSION_HEX < 0x03000000
+ return PyInt_FromLong(result);
+#else
+ return PyLong_FromLong(result);
+#endif
+}
+
+static PyMethodDef TachyonMethods[] = {
+ {"phaserize", phaserize, METH_VARARGS,
+ "Shoot tachyon cannons."},
+ {NULL, NULL, 0, NULL}
+};
+
+#if PY_VERSION_HEX < 0x03000000
+PyMODINIT_FUNC inittachyon(void) {
+ Py_InitModule("tachyon", TachyonMethods);
+}
+#else
+static struct PyModuleDef tachyonmodule = {
+ PyModuleDef_HEAD_INIT,
+ "tachyon",
+ NULL,
+ -1,
+ TachyonMethods
+};
+
+PyMODINIT_FUNC PyInit_tachyon(void) {
+ return PyModule_Create(&tachyonmodule);
+}
+#endif
diff --git a/test cases/python/8 different python versions/meson.build b/test cases/python/8 different python versions/meson.build
new file mode 100644
index 000000000..5b443944b
--- /dev/null
+++ b/test cases/python/8 different python versions/meson.build
@@ -0,0 +1,26 @@
+project('Python extension module', 'c',
+ default_options : ['buildtype=release'])
+
+py_mod = import('python')
+
+py = py_mod.find_installation(get_option('python'), required : false)
+
+if py.found()
+ py_dep = py.dependency(required : false)
+
+ if py_dep.found()
+ subdir('ext')
+
+ test('extmod',
+ py,
+ args : files('blaster.py'),
+ env : ['PYTHONPATH=' + pypathdir])
+ else
+ error('MESON_SKIP_TEST: Python libraries not found, skipping test.')
+ endif
+else
+ error('MESON_SKIP_TEST: Python not found, skipping test.')
+endif
+
+py = py_mod.find_installation(get_option('python'), required : get_option('disabled_opt'))
+assert(not py.found(), 'find_installation not working with disabled feature')
diff --git a/test cases/python/8 different python versions/meson_options.txt b/test cases/python/8 different python versions/meson_options.txt
new file mode 100644
index 000000000..c85110d03
--- /dev/null
+++ b/test cases/python/8 different python versions/meson_options.txt
@@ -0,0 +1,4 @@
+option('python', type: 'string',
+ description: 'Name of or path to the python executable'
+)
+option('disabled_opt', type: 'feature', value: 'disabled')
diff --git a/test cases/python/8 different python versions/test.json b/test cases/python/8 different python versions/test.json
new file mode 100644
index 000000000..fe75a1c26
--- /dev/null
+++ b/test cases/python/8 different python versions/test.json
@@ -0,0 +1,13 @@
+{
+ "matrix": {
+ "options": {
+ "python": [
+ { "val": null },
+ { "val": "python2" },
+ { "val": "python3" },
+ { "val": "pypy" },
+ { "val": "pypy3" }
+ ]
+ }
+ }
+}