changeset: 71185:279488f5a171 branch: 3.2 parent: 71181:97707459bb5a user: Ned Deily date: Sun Jul 03 21:56:48 2011 -0700 files: Lib/test/test_tk.py Lib/test/test_ttk_guionly.py Lib/tkinter/test/support.py Misc/NEWS description: Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run test_tk or test_ttk_guionly under a username that is not currently logged in to the console windowserver (as may be the case under buildbot or ssh). diff -r 97707459bb5a -r 279488f5a171 Lib/test/test_tk.py --- a/Lib/test/test_tk.py Sun Jul 03 21:03:16 2011 -0700 +++ b/Lib/test/test_tk.py Sun Jul 03 21:56:48 2011 -0700 @@ -2,15 +2,11 @@ # Skip test if _tkinter wasn't built. support.import_module('_tkinter') -import tkinter -from tkinter.test import runtktests -import unittest +# Skip test if tk cannot be initialized. +from tkinter.test.support import check_tk_availability +check_tk_availability() -try: - tkinter.Button() -except tkinter.TclError as msg: - # assuming tk is not available - raise unittest.SkipTest("tk not available: %s" % msg) +from tkinter.test import runtktests def test_main(enable_gui=False): if enable_gui: diff -r 97707459bb5a -r 279488f5a171 Lib/test/test_ttk_guionly.py --- a/Lib/test/test_ttk_guionly.py Sun Jul 03 21:03:16 2011 -0700 +++ b/Lib/test/test_ttk_guionly.py Sun Jul 03 21:56:48 2011 -0700 @@ -5,6 +5,10 @@ # Skip this test if _tkinter wasn't built. support.import_module('_tkinter') +# Skip test if tk cannot be initialized. +from tkinter.test.support import check_tk_availability +check_tk_availability() + from _tkinter import TclError from tkinter import ttk from tkinter.test import runtktests diff -r 97707459bb5a -r 279488f5a171 Lib/tkinter/test/support.py --- a/Lib/tkinter/test/support.py Sun Jul 03 21:03:16 2011 -0700 +++ b/Lib/tkinter/test/support.py Sun Jul 03 21:56:48 2011 -0700 @@ -1,6 +1,42 @@ +import subprocess +import sys +from test import support import tkinter +import unittest + +_tk_available = None + +def check_tk_availability(): + """Check that Tk is installed and available.""" + global _tk_available + + if _tk_available is not None: + return + + if sys.platform == 'darwin': + # The Aqua Tk implementations on OS X can abort the process if + # being called in an environment where a window server connection + # cannot be made, for instance when invoked by a buildbot or ssh + # process not running under the same user id as the current console + # user. Instead, try to initialize Tk under a subprocess. + p = subprocess.Popen( + [sys.executable, '-c', 'import tkinter; tkinter.Button()'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stderr = support.strip_python_stderr(p.communicate()[1]) + if stderr or p.returncode: + raise unittest.SkipTest("tk cannot be initialized: %s" % stderr) + else: + try: + tkinter.Button() + except tkinter.TclError as msg: + # assuming tk is not available + raise unittest.SkipTest("tk not available: %s" % msg) + + _tk_available = True + return def get_tk_root(): + check_tk_availability() # raise exception if tk unavailable try: root = tkinter._default_root except AttributeError: diff -r 97707459bb5a -r 279488f5a171 Misc/NEWS --- a/Misc/NEWS Sun Jul 03 21:03:16 2011 -0700 +++ b/Misc/NEWS Sun Jul 03 21:56:48 2011 -0700 @@ -35,6 +35,14 @@ C-API ----- +Tests +----- + +- Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run + test_tk or test_ttk_guionly under a username that is not currently logged + in to the console windowserver (as may be the case under buildbot or ssh). + + What's New in Python 3.2.1 release candidate 2? ===============================================

AltStyle によって変換されたページ (->オリジナル) /