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