1# vim: set fileencoding=utf-8 : 2 3import pytest 4 5import pyvips 6 7 8class TestProgress: 9 def test_progress(self): 10 # py27 requires this pattern for non-local modification 11 notes = {} 12 13 def preeval_cb(image, progress): 14 notes['seen_preeval'] = True 15 16 def eval_cb(image, progress): 17 notes['seen_eval'] = True 18 19 def posteval_cb(image, progress): 20 notes['seen_posteval'] = True 21 22 image = pyvips.Image.black(1, 100000) 23 image.set_progress(True) 24 image.signal_connect('preeval', preeval_cb) 25 image.signal_connect('eval', eval_cb) 26 image.signal_connect('posteval', posteval_cb) 27 image.avg() 28 29 assert notes['seen_preeval'] 30 assert notes['seen_eval'] 31 assert notes['seen_posteval'] 32 33 def test_progress_fields(self): 34 def preeval_cb(image, progress): 35 assert progress.run == 0 36 assert progress.eta == 0 37 assert progress.percent == 0 38 assert progress.tpels == 10000 39 assert progress.npels == 0 40 41 def eval_cb(image, progress): 42 pass 43 44 def posteval_cb(image, progress): 45 assert progress.percent == 100 46 assert progress.tpels == 10000 47 assert progress.npels == 10000 48 49 image = pyvips.Image.black(10, 1000) 50 image.set_progress(True) 51 image.signal_connect('preeval', preeval_cb) 52 image.signal_connect('eval', eval_cb) 53 image.signal_connect('posteval', posteval_cb) 54 image.avg() 55 56 def test_progress_kill(self): 57 def preeval_cb(image, progress): 58 pass 59 60 def eval_cb(image, progress): 61 image.set_kill(True) 62 63 def posteval_cb(image, progress): 64 pass 65 66 # has to be very tall to ensure the kill has enough threadpool loops 67 # to work 68 image = pyvips.Image.black(1, 1000000) 69 image.set_progress(True) 70 image.signal_connect('preeval', preeval_cb) 71 image.signal_connect('eval', eval_cb) 72 image.signal_connect('posteval', posteval_cb) 73 74 with pytest.raises(Exception): 75 image.copy_memory() 76