Home | History | Annotate | Download | only in test_tkinter
      1 import unittest
      2 import Tkinter as tkinter
      3 import ttk
      4 import test.test_support as support
      5 from test_ttk.support import AbstractTkTest, requires_tcl
      6 
      7 support.requires('gui')
      8 
      9 
     10 class MiscTest(AbstractTkTest, unittest.TestCase):
     11 
     12     def test_image_types(self):
     13         image_types = self.root.image_types()
     14         self.assertIsInstance(image_types, tuple)
     15         self.assertIn('photo', image_types)
     16         self.assertIn('bitmap', image_types)
     17 
     18     def test_image_names(self):
     19         image_names = self.root.image_names()
     20         self.assertIsInstance(image_names, tuple)
     21 
     22 
     23 class BitmapImageTest(AbstractTkTest, unittest.TestCase):
     24 
     25     @classmethod
     26     def setUpClass(cls):
     27         AbstractTkTest.setUpClass.__func__(cls)
     28         cls.testfile = support.findfile('python.xbm', subdir='imghdrdata')
     29 
     30     def test_create_from_file(self):
     31         image = tkinter.BitmapImage('::img::test', master=self.root,
     32                                     foreground='yellow', background='blue',
     33                                     file=self.testfile)
     34         self.assertEqual(str(image), '::img::test')
     35         self.assertEqual(image.type(), 'bitmap')
     36         self.assertEqual(image.width(), 16)
     37         self.assertEqual(image.height(), 16)
     38         self.assertIn('::img::test', self.root.image_names())
     39         del image
     40         self.assertNotIn('::img::test', self.root.image_names())
     41 
     42     def test_create_from_data(self):
     43         with open(self.testfile, 'rb') as f:
     44             data = f.read()
     45         image = tkinter.BitmapImage('::img::test', master=self.root,
     46                                     foreground='yellow', background='blue',
     47                                     data=data)
     48         self.assertEqual(str(image), '::img::test')
     49         self.assertEqual(image.type(), 'bitmap')
     50         self.assertEqual(image.width(), 16)
     51         self.assertEqual(image.height(), 16)
     52         self.assertIn('::img::test', self.root.image_names())
     53         del image
     54         self.assertNotIn('::img::test', self.root.image_names())
     55 
     56     def assertEqualStrList(self, actual, expected):
     57         self.assertIsInstance(actual, str)
     58         self.assertEqual(self.root.splitlist(actual), expected)
     59 
     60     def test_configure_data(self):
     61         image = tkinter.BitmapImage('::img::test', master=self.root)
     62         self.assertEqual(image['data'], '-data {} {} {} {}')
     63         with open(self.testfile, 'rb') as f:
     64             data = f.read()
     65         image.configure(data=data)
     66         self.assertEqualStrList(image['data'],
     67                                 ('-data', '', '', '', data))
     68         self.assertEqual(image.width(), 16)
     69         self.assertEqual(image.height(), 16)
     70 
     71         self.assertEqual(image['maskdata'], '-maskdata {} {} {} {}')
     72         image.configure(maskdata=data)
     73         self.assertEqualStrList(image['maskdata'],
     74                                 ('-maskdata', '', '', '', data))
     75 
     76     def test_configure_file(self):
     77         image = tkinter.BitmapImage('::img::test', master=self.root)
     78         self.assertEqual(image['file'], '-file {} {} {} {}')
     79         image.configure(file=self.testfile)
     80         self.assertEqualStrList(image['file'],
     81                                 ('-file', '', '', '',self.testfile))
     82         self.assertEqual(image.width(), 16)
     83         self.assertEqual(image.height(), 16)
     84 
     85         self.assertEqual(image['maskfile'], '-maskfile {} {} {} {}')
     86         image.configure(maskfile=self.testfile)
     87         self.assertEqualStrList(image['maskfile'],
     88                                 ('-maskfile', '', '', '', self.testfile))
     89 
     90     def test_configure_background(self):
     91         image = tkinter.BitmapImage('::img::test', master=self.root)
     92         self.assertEqual(image['background'], '-background {} {} {} {}')
     93         image.configure(background='blue')
     94         self.assertEqual(image['background'], '-background {} {} {} blue')
     95 
     96     def test_configure_foreground(self):
     97         image = tkinter.BitmapImage('::img::test', master=self.root)
     98         self.assertEqual(image['foreground'],
     99                          '-foreground {} {} #000000 #000000')
    100         image.configure(foreground='yellow')
    101         self.assertEqual(image['foreground'],
    102                          '-foreground {} {} #000000 yellow')
    103 
    104 
    105 class PhotoImageTest(AbstractTkTest, unittest.TestCase):
    106 
    107     @classmethod
    108     def setUpClass(cls):
    109         AbstractTkTest.setUpClass.__func__(cls)
    110         cls.testfile = support.findfile('python.gif', subdir='imghdrdata')
    111 
    112     def create(self):
    113         return tkinter.PhotoImage('::img::test', master=self.root,
    114                                   file=self.testfile)
    115 
    116     def colorlist(self, *args):
    117         if tkinter.TkVersion >= 8.6 and self.wantobjects:
    118             return args
    119         else:
    120             return tkinter._join(args)
    121 
    122     def check_create_from_file(self, ext):
    123         testfile = support.findfile('python.' + ext, subdir='imghdrdata')
    124         image = tkinter.PhotoImage('::img::test', master=self.root,
    125                                    file=testfile)
    126         self.assertEqual(str(image), '::img::test')
    127         self.assertEqual(image.type(), 'photo')
    128         self.assertEqual(image.width(), 16)
    129         self.assertEqual(image.height(), 16)
    130         self.assertEqual(image['data'], '')
    131         self.assertEqual(image['file'], testfile)
    132         self.assertIn('::img::test', self.root.image_names())
    133         del image
    134         self.assertNotIn('::img::test', self.root.image_names())
    135 
    136     def check_create_from_data(self, ext):
    137         testfile = support.findfile('python.' + ext, subdir='imghdrdata')
    138         with open(testfile, 'rb') as f:
    139             data = f.read()
    140         image = tkinter.PhotoImage('::img::test', master=self.root,
    141                                    data=data)
    142         self.assertEqual(str(image), '::img::test')
    143         self.assertEqual(image.type(), 'photo')
    144         self.assertEqual(image.width(), 16)
    145         self.assertEqual(image.height(), 16)
    146         self.assertEqual(image['data'], data if self.wantobjects
    147                                         else data.decode('latin1'))
    148         self.assertEqual(image['file'], '')
    149         self.assertIn('::img::test', self.root.image_names())
    150         del image
    151         self.assertNotIn('::img::test', self.root.image_names())
    152 
    153     def test_create_from_ppm_file(self):
    154         self.check_create_from_file('ppm')
    155 
    156     def test_create_from_ppm_data(self):
    157         self.check_create_from_data('ppm')
    158 
    159     def test_create_from_pgm_file(self):
    160         self.check_create_from_file('pgm')
    161 
    162     def test_create_from_pgm_data(self):
    163         self.check_create_from_data('pgm')
    164 
    165     def test_create_from_gif_file(self):
    166         self.check_create_from_file('gif')
    167 
    168     def test_create_from_gif_data(self):
    169         self.check_create_from_data('gif')
    170 
    171     @requires_tcl(8, 6)
    172     def test_create_from_png_file(self):
    173         self.check_create_from_file('png')
    174 
    175     @requires_tcl(8, 6)
    176     def test_create_from_png_data(self):
    177         self.check_create_from_data('png')
    178 
    179     def test_configure_data(self):
    180         image = tkinter.PhotoImage('::img::test', master=self.root)
    181         self.assertEqual(image['data'], '')
    182         with open(self.testfile, 'rb') as f:
    183             data = f.read()
    184         image.configure(data=data)
    185         self.assertEqual(image['data'], data if self.wantobjects
    186                                         else data.decode('latin1'))
    187         self.assertEqual(image.width(), 16)
    188         self.assertEqual(image.height(), 16)
    189 
    190     def test_configure_format(self):
    191         image = tkinter.PhotoImage('::img::test', master=self.root)
    192         self.assertEqual(image['format'], '')
    193         image.configure(file=self.testfile, format='gif')
    194         self.assertEqual(image['format'], ('gif',) if self.wantobjects
    195                                           else 'gif')
    196         self.assertEqual(image.width(), 16)
    197         self.assertEqual(image.height(), 16)
    198 
    199     def test_configure_file(self):
    200         image = tkinter.PhotoImage('::img::test', master=self.root)
    201         self.assertEqual(image['file'], '')
    202         image.configure(file=self.testfile)
    203         self.assertEqual(image['file'], self.testfile)
    204         self.assertEqual(image.width(), 16)
    205         self.assertEqual(image.height(), 16)
    206 
    207     def test_configure_gamma(self):
    208         image = tkinter.PhotoImage('::img::test', master=self.root)
    209         self.assertEqual(image['gamma'], '1.0')
    210         image.configure(gamma=2.0)
    211         self.assertEqual(image['gamma'], '2.0')
    212 
    213     def test_configure_width_height(self):
    214         image = tkinter.PhotoImage('::img::test', master=self.root)
    215         self.assertEqual(image['width'], '0')
    216         self.assertEqual(image['height'], '0')
    217         image.configure(width=20)
    218         image.configure(height=10)
    219         self.assertEqual(image['width'], '20')
    220         self.assertEqual(image['height'], '10')
    221         self.assertEqual(image.width(), 20)
    222         self.assertEqual(image.height(), 10)
    223 
    224     def test_configure_palette(self):
    225         image = tkinter.PhotoImage('::img::test', master=self.root)
    226         self.assertEqual(image['palette'], '')
    227         image.configure(palette=256)
    228         self.assertEqual(image['palette'], '256')
    229         image.configure(palette='3/4/2')
    230         self.assertEqual(image['palette'], '3/4/2')
    231 
    232     def test_blank(self):
    233         image = self.create()
    234         image.blank()
    235         self.assertEqual(image.width(), 16)
    236         self.assertEqual(image.height(), 16)
    237         self.assertEqual(image.get(4, 6), self.colorlist(0, 0, 0))
    238 
    239     def test_copy(self):
    240         image = self.create()
    241         image2 = image.copy()
    242         self.assertEqual(image2.width(), 16)
    243         self.assertEqual(image2.height(), 16)
    244         self.assertEqual(image.get(4, 6), image.get(4, 6))
    245 
    246     def test_subsample(self):
    247         image = self.create()
    248         image2 = image.subsample(2, 3)
    249         self.assertEqual(image2.width(), 8)
    250         self.assertEqual(image2.height(), 6)
    251         self.assertEqual(image2.get(2, 2), image.get(4, 6))
    252 
    253         image2 = image.subsample(2)
    254         self.assertEqual(image2.width(), 8)
    255         self.assertEqual(image2.height(), 8)
    256         self.assertEqual(image2.get(2, 3), image.get(4, 6))
    257 
    258     def test_zoom(self):
    259         image = self.create()
    260         image2 = image.zoom(2, 3)
    261         self.assertEqual(image2.width(), 32)
    262         self.assertEqual(image2.height(), 48)
    263         self.assertEqual(image2.get(8, 18), image.get(4, 6))
    264         self.assertEqual(image2.get(9, 20), image.get(4, 6))
    265 
    266         image2 = image.zoom(2)
    267         self.assertEqual(image2.width(), 32)
    268         self.assertEqual(image2.height(), 32)
    269         self.assertEqual(image2.get(8, 12), image.get(4, 6))
    270         self.assertEqual(image2.get(9, 13), image.get(4, 6))
    271 
    272     def test_put(self):
    273         image = self.create()
    274         image.put('{red green} {blue yellow}', to=(4, 6))
    275         self.assertEqual(image.get(4, 6), self.colorlist(255, 0, 0))
    276         self.assertEqual(image.get(5, 6),
    277                          self.colorlist(0, 128 if tkinter.TkVersion >= 8.6
    278                                            else 255, 0))
    279         self.assertEqual(image.get(4, 7), self.colorlist(0, 0, 255))
    280         self.assertEqual(image.get(5, 7), self.colorlist(255, 255, 0))
    281 
    282         image.put((('#f00', '#00ff00'), ('#000000fff', '#ffffffff0000')))
    283         self.assertEqual(image.get(0, 0), self.colorlist(255, 0, 0))
    284         self.assertEqual(image.get(1, 0), self.colorlist(0, 255, 0))
    285         self.assertEqual(image.get(0, 1), self.colorlist(0, 0, 255))
    286         self.assertEqual(image.get(1, 1), self.colorlist(255, 255, 0))
    287 
    288     def test_get(self):
    289         image = self.create()
    290         self.assertEqual(image.get(4, 6), self.colorlist(62, 116, 162))
    291         self.assertEqual(image.get(0, 0), self.colorlist(0, 0, 0))
    292         self.assertEqual(image.get(15, 15), self.colorlist(0, 0, 0))
    293         self.assertRaises(tkinter.TclError, image.get, -1, 0)
    294         self.assertRaises(tkinter.TclError, image.get, 0, -1)
    295         self.assertRaises(tkinter.TclError, image.get, 16, 15)
    296         self.assertRaises(tkinter.TclError, image.get, 15, 16)
    297 
    298     def test_write(self):
    299         image = self.create()
    300         self.addCleanup(support.unlink, support.TESTFN)
    301 
    302         image.write(support.TESTFN)
    303         image2 = tkinter.PhotoImage('::img::test2', master=self.root,
    304                                     format='ppm',
    305                                     file=support.TESTFN)
    306         self.assertEqual(str(image2), '::img::test2')
    307         self.assertEqual(image2.type(), 'photo')
    308         self.assertEqual(image2.width(), 16)
    309         self.assertEqual(image2.height(), 16)
    310         self.assertEqual(image2.get(0, 0), image.get(0, 0))
    311         self.assertEqual(image2.get(15, 8), image.get(15, 8))
    312 
    313         image.write(support.TESTFN, format='gif', from_coords=(4, 6, 6, 9))
    314         image3 = tkinter.PhotoImage('::img::test3', master=self.root,
    315                                     format='gif',
    316                                     file=support.TESTFN)
    317         self.assertEqual(str(image3), '::img::test3')
    318         self.assertEqual(image3.type(), 'photo')
    319         self.assertEqual(image3.width(), 2)
    320         self.assertEqual(image3.height(), 3)
    321         self.assertEqual(image3.get(0, 0), image.get(4, 6))
    322         self.assertEqual(image3.get(1, 2), image.get(5, 8))
    323 
    324 
    325 tests_gui = (MiscTest, BitmapImageTest, PhotoImageTest,)
    326 
    327 if __name__ == "__main__":
    328     support.run_unittest(*tests_gui)
    329