|
1 | 1 | ## python-exiv2 - Python interface to libexiv2 |
2 | 2 | ## http://github.com/jim-easterbrook/python-exiv2 |
3 | | -## Copyright (C) 2023-25 Jim Easterbrook jim@jim-easterbrook.me.uk |
| 3 | +## Copyright (C) 2023-26 Jim Easterbrook jim@jim-easterbrook.me.uk |
4 | 4 | ## |
5 | 5 | ## This program is free software: you can redistribute it and/or |
6 | 6 | ## modify it under the terms of the GNU General Public License as |
@@ -310,61 +310,58 @@ def test_pointers(self): |
310 | 310 | self.assertEqual(datum_pointer, datum) |
311 | 311 | self.assertEqual(datum_pointer, datum_iter) |
312 | 312 |
|
313 | | - @unittest.skipIf(sys.version_info >= (3, 14), |
314 | | - 'cannot test optimised ref counts') |
315 | 313 | def test_ref_counts(self): |
316 | 314 | self.image.readMetadata() |
317 | 315 | # exifData keeps a reference to image |
318 | | - self.assertEqual(sys.getrefcount(self.image), 2) |
| 316 | + rc_1 = sys.getrefcount(self.image) |
319 | 317 | data = self.image.exifData() |
320 | | - self.assertEqual(sys.getrefcount(self.image), 3) |
| 318 | + self.assertEqual(sys.getrefcount(self.image), rc_1 + 1) |
321 | 319 | # thumbnail keeps a reference to exifData |
322 | | - self.assertEqual(sys.getrefcount(data), 2) |
| 320 | + rc_2 = sys.getrefcount(data) |
323 | 321 | thumb = exiv2.ExifThumb(data) |
324 | | - self.assertEqual(sys.getrefcount(data), 3) |
| 322 | + self.assertEqual(sys.getrefcount(data), rc_2 + 1) |
325 | 323 | del thumb |
326 | | - self.assertEqual(sys.getrefcount(data), 2) |
| 324 | + self.assertEqual(sys.getrefcount(data), rc_2) |
327 | 325 | # iterator keeps a reference to data |
328 | | - self.assertEqual(sys.getrefcount(data), 2) |
329 | 326 | b = data.begin() |
330 | | - self.assertEqual(sys.getrefcount(data), 3) |
| 327 | + self.assertEqual(sys.getrefcount(data), rc_2 + 1) |
331 | 328 | e = data.end() |
332 | | - self.assertEqual(sys.getrefcount(data), 4) |
| 329 | + self.assertEqual(sys.getrefcount(data), rc_2 + 2) |
333 | 330 | i = iter(data) |
334 | | - self.assertEqual(sys.getrefcount(data), 5) |
| 331 | + self.assertEqual(sys.getrefcount(data), rc_2 + 3) |
335 | 332 | k = data.findKey(exiv2.ExifKey('Exif.Photo.FocalLength')) |
336 | | - self.assertEqual(sys.getrefcount(data), 6) |
| 333 | + self.assertEqual(sys.getrefcount(data), rc_2 + 4) |
337 | 334 | k2 = data.erase(k) |
338 | 335 | with self.assertRaises(RuntimeError): |
339 | 336 | k.key() |
340 | | - self.assertEqual(sys.getrefcount(data), 7) |
| 337 | + self.assertEqual(sys.getrefcount(data), rc_2 + 5) |
341 | 338 | del b, e, i, k, k2 |
342 | | - self.assertEqual(sys.getrefcount(data), 2) |
| 339 | + self.assertEqual(sys.getrefcount(data), rc_2) |
343 | 340 | # iterator of an iterator keeps a reference to iterator |
344 | 341 | b = data.begin() |
345 | | - self.assertEqual(sys.getrefcount(b), 2) |
| 342 | + rc_2 = sys.getrefcount(b) |
346 | 343 | i = iter(b) |
347 | | - self.assertEqual(sys.getrefcount(b), 3) |
| 344 | + self.assertEqual(sys.getrefcount(b), rc_2 + 1) |
348 | 345 | del i |
349 | | - self.assertEqual(sys.getrefcount(b), 2) |
| 346 | + self.assertEqual(sys.getrefcount(b), rc_2) |
350 | 347 | # iterator value keeps a reference to iterator |
351 | 348 | v = b.value() |
352 | | - self.assertEqual(sys.getrefcount(b), 3) |
| 349 | + self.assertEqual(sys.getrefcount(b), rc_2 + 1) |
353 | 350 | del v |
354 | | - self.assertEqual(sys.getrefcount(b), 2) |
| 351 | + self.assertEqual(sys.getrefcount(b), rc_2) |
355 | 352 | del b |
356 | 353 | # datum keeps a reference to data |
357 | | - self.assertEqual(sys.getrefcount(data), 2) |
| 354 | + rc_2 = sys.getrefcount(data) |
358 | 355 | datum = data['Exif.Image.ImageDescription'] |
359 | | - self.assertEqual(sys.getrefcount(data), 3) |
| 356 | + self.assertEqual(sys.getrefcount(data), rc_2 + 1) |
360 | 357 | # value keeps a reference to datum |
361 | | - self.assertEqual(sys.getrefcount(datum), 2) |
| 358 | + rc_3 = sys.getrefcount(datum) |
362 | 359 | v = datum.value() |
363 | | - self.assertEqual(sys.getrefcount(datum), 3) |
| 360 | + self.assertEqual(sys.getrefcount(datum), rc_3 + 1) |
364 | 361 | del v |
365 | | - self.assertEqual(sys.getrefcount(datum), 2) |
| 362 | + self.assertEqual(sys.getrefcount(datum), rc_3) |
366 | 363 | del datum |
367 | | - self.assertEqual(sys.getrefcount(data), 2) |
| 364 | + self.assertEqual(sys.getrefcount(data), rc_2) |
368 | 365 | del data |
369 | 366 | self.assertEqual(sys.getrefcount(self.image), 2) |
370 | 367 |
|
|
0 commit comments