1 /* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockito.internal.verification; 6 7 import java.util.Set; 8 import org.mockito.internal.verification.api.VerificationData; 9 import org.mockito.listeners.VerificationListener; 10 import org.mockito.verification.VerificationEvent; 11 import org.mockito.verification.VerificationMode; 12 13 public class MockAwareVerificationMode implements VerificationMode { 14 15 private final Object mock; 16 private final VerificationMode mode; 17 private final Set<VerificationListener> listeners; 18 MockAwareVerificationMode(Object mock, VerificationMode mode, Set<VerificationListener> listeners)19 public MockAwareVerificationMode(Object mock, VerificationMode mode, Set<VerificationListener> listeners) { 20 this.mock = mock; 21 this.mode = mode; 22 this.listeners = listeners; 23 } 24 verify(VerificationData data)25 public void verify(VerificationData data) { 26 try { 27 mode.verify(data); 28 notifyListeners(new VerificationEventImpl(mock, mode, data, null)); 29 } catch (RuntimeException e) { 30 notifyListeners(new VerificationEventImpl(mock, mode, data, e)); 31 throw e; 32 } catch (Error e) { 33 notifyListeners(new VerificationEventImpl(mock, mode, data, e)); 34 throw e; 35 } 36 } 37 38 notifyListeners(VerificationEvent event)39 private void notifyListeners(VerificationEvent event) { 40 for (VerificationListener listener : listeners) { 41 listener.onVerification(event); 42 } 43 } 44 getMock()45 public Object getMock() { 46 return mock; 47 } 48 description(String description)49 public VerificationMode description(String description) { 50 return VerificationModeFactory.description(this, description); 51 } 52 } 53