TestTookTooMuchTime [:err | "Handle a drawing error" | errCtx errMorph | errCtx := thisContext. [ errCtx := errCtx sender. "Search the sender chain to find the morph causing the problem" [errCtx isNotNil and:[(errCtx receiver isMorph) not]] whileTrue:[errCtx := errCtx sender]. "If we're at the root of the context chain then we have a fatal drawing problem" errCtx ifNil:[^self handleFatalDrawingError: err description]. errMorph := errCtx receiver. "If the morph causing the problem has already the #drawError flag set, then search for the next morph above in the caller chain." errMorph hasProperty: #errorOnDraw ] whileTrue. errMorph setProperty: #errorOnDraw toValue: true. "Install the old error handler, so we can re-raise the error" err signal. ] in WorldState>>displayWorldSafely: FullBlockClosure(BlockClosure)>>cull: [:ex | errorHandlerBlock cull: ex] in FullBlockClosure(BlockClosure)>>onErrorDo: FullBlockClosure(BlockClosure)>>cull: Context>>evaluateSignal: Context>>handleSignal: TestTookTooMuchTime(Exception)>>signal Process>>pvtSignal:list: Array(SequenceableCollection)>>do: WorldState>>checkIfUpdateNeeded NullWorldRenderer(AbstractWorldRenderer)>>displayWorldState:ofWorld: WorldState>>displayWorld: WorldMorph>>displayWorld [aWorld displayWorld] in WorldState>>displayWorldSafely: FullBlockClosure(BlockClosure)>>on:do: FullBlockClosure(BlockClosure)>>onErrorDo: WorldState>>displayWorldSafely: WorldState>>doOneCycleFor: WorldMorph>>doOneCycleNow WorldMorph>>doOneCycle [ WorldMorph currentWorld doOneCycle ] in StDebuggerActionModelTest>>testEventAfterRecompileMethod FullBlockClosure(BlockClosure)>>whileNil: StDebuggerActionModelTest>>testEventAfterRecompileMethod StDebuggerActionModelTest(TestCase)>>performTest