فهرست منبع

Add script to run test suite on a wheel in a virtualenv

[skip ci]
rdb 7 سال پیش
والد
کامیت
5147674980
1فایلهای تغییر یافته به همراه61 افزوده شده و 0 حذف شده
  1. 61 0
      makepanda/test_wheel.py

+ 61 - 0
makepanda/test_wheel.py

@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+"""
+Tests a .whl file by installing it and pytest into a virtual environment and
+running the test suite.
+
+Requires pip to be installed, as well as 'virtualenv' on Python 2.
+"""
+
+import os
+import sys
+import shutil
+import subprocess
+import tempfile
+from optparse import OptionParser
+
+
+def test_wheel(wheel, verbose=False):
+    envdir = tempfile.mkdtemp(prefix="venv-")
+    print("Setting up virtual environment in {0}".format(envdir))
+
+    if sys.version_info >= (3, 0):
+        subprocess.call([sys.executable, "-m", "venv", "--clear", envdir])
+    else:
+        subprocess.call([sys.executable, "-m", "virtualenv", "--clear", envdir])
+
+    # Install pytest into the environment, as well as our wheel.
+    if sys.platform == "win32":
+        pip = os.path.join(envdir, "Scripts", "pip.exe")
+    else:
+        pip = os.path.join(envdir, "bin", "pip")
+    if subprocess.call([pip, "install", "pytest", wheel]) != 0:
+        shutil.rmtree(envdir)
+        sys.exit(1)
+
+    # Run the test suite.
+    if sys.platform == "win32":
+        python = os.path.join(envdir, "Scripts", "python.exe")
+    else:
+        python = os.path.join(envdir, "bin", "python")
+    test_cmd = [python, "-m", "pytest", "tests"]
+    if verbose:
+        test_cmd.append("--verbose")
+
+    exit_code = subprocess.call(test_cmd)
+    shutil.rmtree(envdir)
+
+    if exit_code != 0:
+        sys.exit(exit_code)
+
+
+if __name__ == "__main__":
+    parser = OptionParser(usage="%prog [options] file...")
+    parser.add_option('', '--verbose', dest = 'verbose', help = 'Enable verbose output', action = 'store_true', default = False)
+    (options, args) = parser.parse_args()
+
+    if not args:
+        parser.print_usage()
+        sys.exit(1)
+
+    for arg in args:
+        test_wheel(arg, verbose=options.verbose)