python (3.11.7)

(root)/
lib/
python3.11/
tkinter/
test/
support.py
       1  import functools
       2  import re
       3  import tkinter
       4  import unittest
       5  
       6  class ESC[4;38;5;81mAbstractTkTest:
       7  
       8      @classmethod
       9      def setUpClass(cls):
      10          cls._old_support_default_root = tkinter._support_default_root
      11          destroy_default_root()
      12          tkinter.NoDefaultRoot()
      13          cls.root = tkinter.Tk()
      14          cls.wantobjects = cls.root.wantobjects()
      15          # De-maximize main window.
      16          # Some window managers can maximize new windows.
      17          cls.root.wm_state('normal')
      18          try:
      19              cls.root.wm_attributes('-zoomed', False)
      20          except tkinter.TclError:
      21              pass
      22  
      23      @classmethod
      24      def tearDownClass(cls):
      25          cls.root.update_idletasks()
      26          cls.root.destroy()
      27          del cls.root
      28          tkinter._default_root = None
      29          tkinter._support_default_root = cls._old_support_default_root
      30  
      31      def setUp(self):
      32          self.root.deiconify()
      33  
      34      def tearDown(self):
      35          for w in self.root.winfo_children():
      36              w.destroy()
      37          self.root.withdraw()
      38  
      39  
      40  class ESC[4;38;5;81mAbstractDefaultRootTest:
      41  
      42      def setUp(self):
      43          self._old_support_default_root = tkinter._support_default_root
      44          destroy_default_root()
      45          tkinter._support_default_root = True
      46          self.wantobjects = tkinter.wantobjects
      47  
      48      def tearDown(self):
      49          destroy_default_root()
      50          tkinter._default_root = None
      51          tkinter._support_default_root = self._old_support_default_root
      52  
      53      def _test_widget(self, constructor):
      54          # no master passing
      55          x = constructor()
      56          self.assertIsNotNone(tkinter._default_root)
      57          self.assertIs(x.master, tkinter._default_root)
      58          self.assertIs(x.tk, tkinter._default_root.tk)
      59          x.destroy()
      60          destroy_default_root()
      61          tkinter.NoDefaultRoot()
      62          self.assertRaises(RuntimeError, constructor)
      63          self.assertFalse(hasattr(tkinter, '_default_root'))
      64  
      65  
      66  def destroy_default_root():
      67      if getattr(tkinter, '_default_root', None):
      68          tkinter._default_root.update_idletasks()
      69          tkinter._default_root.destroy()
      70          tkinter._default_root = None
      71  
      72  def simulate_mouse_click(widget, x, y):
      73      """Generate proper events to click at the x, y position (tries to act
      74      like an X server)."""
      75      widget.event_generate('<Enter>', x=0, y=0)
      76      widget.event_generate('<Motion>', x=x, y=y)
      77      widget.event_generate('<ButtonPress-1>', x=x, y=y)
      78      widget.event_generate('<ButtonRelease-1>', x=x, y=y)
      79  
      80  
      81  import _tkinter
      82  tcl_version = tuple(map(int, _tkinter.TCL_VERSION.split('.')))
      83  tk_version = tuple(map(int, _tkinter.TK_VERSION.split('.')))
      84  
      85  def requires_tk(*version):
      86      if len(version) <= 2 and tk_version >= version:
      87          return lambda test: test
      88  
      89      def deco(test):
      90          @functools.wraps(test)
      91          def newtest(self):
      92              root = getattr(self, 'root', None)
      93              if get_tk_patchlevel(root) < version:
      94                  self.skipTest('requires Tk version >= ' +
      95                                  '.'.join(map(str, version)))
      96              test(self)
      97          return newtest
      98      return deco
      99  
     100  _tk_patchlevel = None
     101  def get_tk_patchlevel(root):
     102      global _tk_patchlevel
     103      if _tk_patchlevel is None:
     104          _tk_patchlevel = tkinter._parse_version(root.tk.globalgetvar('tk_patchLevel'))
     105      return _tk_patchlevel
     106  
     107  units = {
     108      'c': 72 / 2.54,     # centimeters
     109      'i': 72,            # inches
     110      'm': 72 / 25.4,     # millimeters
     111      'p': 1,             # points
     112  }
     113  
     114  def pixels_conv(value):
     115      return float(value[:-1]) * units[value[-1:]]
     116  
     117  def tcl_obj_eq(actual, expected):
     118      if actual == expected:
     119          return True
     120      if isinstance(actual, _tkinter.Tcl_Obj):
     121          if isinstance(expected, str):
     122              return str(actual) == expected
     123      if isinstance(actual, tuple):
     124          if isinstance(expected, tuple):
     125              return (len(actual) == len(expected) and
     126                      all(tcl_obj_eq(act, exp)
     127                          for act, exp in zip(actual, expected)))
     128      return False
     129  
     130  def widget_eq(actual, expected):
     131      if actual == expected:
     132          return True
     133      if isinstance(actual, (str, tkinter.Widget)):
     134          if isinstance(expected, (str, tkinter.Widget)):
     135              return str(actual) == str(expected)
     136      return False