# Copyright (c) 2017 CEF Python, see the Authors file. # All rights reserved. Licensed under BSD 3-clause license. # Project website: https://github.com/cztomczak/cefpython """ Run all examples that can be run on current configuration and display a summary at the end. Note on GTK 2 / GTK 3 on Windows: Installing both PyGTK and PyGI on Windows will cause errors. You can install only one of these packages. """ from common import * import importlib import os import subprocess import sys def main(): os.chdir(EXAMPLES_DIR) # When importing Kivy package there can't be any flags unknown to Kivy, # use sys.argv.remove to remove them. kivy_flag = False if "--kivy" in sys.argv: sys.argv.remove("--kivy") kivy_flag = True hello_world_flag = False if "--hello-world" in sys.argv: sys.argv.remove("--hello-world") hello_world_flag = True packages = check_installed_packages() examples = list() examples.append("hello_world.py") examples.append("tutorial.py") examples.append("screenshot.py") succeeded = list() failed = list() passed = list() # wxpython if packages["wx"]: examples.append("wxpython.py") else: print("[run_examples.py] PASS: wxpython.py (wxPython not installed)") passed.append("wxpython.py") # gtk2 if packages["gtk"]: examples.append("gtk2.py") if LINUX: examples.append("gtk2.py --message-loop-cef") else: print("[run_examples.py] PASS: gtk2.py (Gtk 2 not installed") passed.append("gtk2.py") # gtk3 """ if LINUX: # Broken on Linux (Issue #261) print("[run_examples.py] PASS: gtk3.py (Issue #261)") passed.append("gtk3.py (Issue #261)") """ if MAC: # Crashes on Mac (Issue #310) print("[run_examples.py] PASS: gtk3.py (Issue #310)") passed.append("gtk3.py (Issue #310)") elif packages["gi"]: examples.append("gtk3.py") else: print("[run_examples.py] PASS: gtk3.py (Gtk 3 not installed)") passed.append("gtk3.py") # pyqt4 if LINUX: print("[run_examples.py] PASS: qt.py pyqt4 (Issue #452)") passed.append("qt.py pyqt4 (Issue #452)") elif packages["PyQt4"]: examples.append("qt.py pyqt4") else: print("[run_examples.py] PASS: qt.py pyqt4 (PyQt4 not installed)") passed.append("qt.py pyqt4") # pyqt5 if packages["PyQt5"]: examples.append("qt.py pyqt5") else: print("[run_examples.py] PASS: qt.py pyqt5 (PyQt5 not installed)") passed.append("qt.py pyqt5") # pyside if LINUX: print("[run_examples.py] PASS: qt.py pyside (Issue #452)") passed.append("qt.py pyside (Issue #452)") elif packages["PySide"]: examples.append("qt.py pyside") else: print("[run_examples.py] PASS: qt.py pyside (PySide not installed)") passed.append("qt.py pyside") # tkinter if MAC: # This example often crashes on Mac (Issue #309) print("[run_examples.py] PASS: tkinter_.py (Issue #309)") passed.append("tkinter_.py (Issue #309)") elif WINDOWS and sys.version_info.major == 2: print("[run_examples.py] PASS: tkinter_.py (Issue #441)") passed.append("tkinter_.py (Issue #441)") elif packages["tkinter"] or packages["Tkinter"]: examples.append("tkinter_.py") else: print(["run_examples.py] PASS: tkinter_.py (tkinter not installed)"]) passed.append("tkinter_.py") if LINUX and packages["kivy"] and packages["gtk"]: # When --kivy flag passed run only Kivy example if kivy_flag: examples = list() passed = list() examples.append("{linux_dir}/binaries_64bit/kivy_.py" .format(linux_dir=LINUX_DIR)) # When --hello-world flag is passed run only hello_world.py example if hello_world_flag: examples = list() passed = list() examples.append("hello_world.py") # Run all for example in examples: print("[run_examples.py] Running '{example}'..." .format(example=example)) command = "\"{python}\" {example}".format(python=sys.executable, example=example) ret = os.system(command) if ret == 0: succeeded.append(example) else: print("[run_examples.py] ERROR while running example: {example}" .format(example=example)) failed.append(example) # Summary summary = "" for example in succeeded: summary += " OK {example}{nl}"\ .format(example=example, nl=os.linesep) for example in failed: summary += " ERROR {example}{nl}"\ .format(example=example, nl=os.linesep) for example in passed: summary += " PASS {example}{nl}"\ .format(example=example, nl=os.linesep) summary = summary[:-(len(os.linesep))] print("[run_examples.py] SUMMARY:") print(summary.format()) # OK or error message passed_msg = "" if passed: passed_msg = ". Passed: {passed}.".format(passed=len(passed)) if len(failed): print("[run_examples.py] ERRORS({failed}) while running examples" "{passed_msg}" .format(failed=len(failed), passed_msg=passed_msg)) sys.exit(1) else: print("[run_examples.py] OK({succeeded}){passed_msg}" .format(succeeded=len(succeeded), passed_msg=passed_msg)) def check_installed_packages(): packages = { "gtk": False, "kivy": False, "PyQt4": False, "PyQt5": False, "PySide": False, "tkinter": False, "Tkinter": False, "wx": False, } for package in packages: try: if package == "PyQt5": # Strange issue on Mac, PyQt5 is an empty built-in module from PyQt5 import QtGui else: importlib.import_module(package) packages[package] = True except ImportError: packages[package] = False packages["gi"] = check_gi_installed() return packages def check_gi_installed(): # Cannot import both gtk and gi in the same script, thus # need another way of checking if gi package is installed. code = subprocess.call([sys.executable, "-c", "import gi"]) if code != 0: print("[run_examples.py] gi module not found (PyGI / GTK 3).") print(" Import error above can be safely ignored.") return True if code == 0 else False if __name__ == "__main__": main()