Mercurial > cpython-lru_cache-weakref
annotate Lib/tkinter/test/test_tkinter/test_loadtk.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | ba16ff86d4f6 |
| children |
| rev | line source |
|---|---|
|
54806
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
1 import os |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
2 import sys |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
3 import unittest |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
4 import test.support as test_support |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
5 from tkinter import Tcl, TclError |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
6 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
7 test_support.requires('gui') |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
8 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
9 class TkLoadTest(unittest.TestCase): |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
10 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
11 @unittest.skipIf('DISPLAY' not in os.environ, 'No $DISPLAY set.') |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
12 def testLoadTk(self): |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
13 tcl = Tcl() |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
14 self.assertRaises(TclError,tcl.winfo_geometry) |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
15 tcl.loadtk() |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
16 self.assertEqual('1x1+0+0', tcl.winfo_geometry()) |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
17 tcl.destroy() |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
18 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
19 def testLoadTkFailure(self): |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
20 old_display = None |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
21 if sys.platform.startswith(('win', 'darwin', 'cygwin')): |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
22 # no failure possible on windows? |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
23 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
24 # XXX Maybe on tk older than 8.4.13 it would be possible, |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
25 # see tkinter.h. |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
26 return |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
27 with test_support.EnvironmentVarGuard() as env: |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
28 if 'DISPLAY' in os.environ: |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
29 del env['DISPLAY'] |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
30 # on some platforms, deleting environment variables |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
31 # doesn't actually carry through to the process level |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
32 # because they don't support unsetenv |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
33 # If that's the case, abort. |
|
67297
ba16ff86d4f6
test_tkinter: use a context manager to close directly the pipe
Victor Stinner <victor.stinner@haypocalc.com>
parents:
54806
diff
changeset
|
34 with os.popen('echo $DISPLAY') as pipe: |
|
ba16ff86d4f6
test_tkinter: use a context manager to close directly the pipe
Victor Stinner <victor.stinner@haypocalc.com>
parents:
54806
diff
changeset
|
35 display = pipe.read().strip() |
|
54806
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
36 if display: |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
37 return |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
38 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
39 tcl = Tcl() |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
40 self.assertRaises(TclError, tcl.winfo_geometry) |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
41 self.assertRaises(TclError, tcl.loadtk) |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
42 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
43 tests_gui = (TkLoadTest, ) |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
44 |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
45 if __name__ == "__main__": |
|
a950a4434f8b
Merged revisions 73495 via svnmerge from
Guilherme Polo <ggpolo@gmail.com>
parents:
diff
changeset
|
46 test_support.run_unittest(*tests_gui) |
