/
MockTracker.java
55 lines (45 loc) · 1.48 KB
/
MockTracker.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
* Copyright (c) 2019 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.junit;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import org.mockito.internal.listeners.AutoCleanableListener;
import org.mockito.listeners.MockCreationListener;
import org.mockito.mock.MockCreationSettings;
import org.mockito.plugins.MockMaker;
public class MockTracker implements MockCreationListener, AutoCleanableListener {
private final List<WeakReference<Object>> mocks = new ArrayList<WeakReference<Object>>();
private final MockMaker mockMaker;
private boolean listenerDirty;
public MockTracker(MockMaker mockMaker) {
this.mockMaker = mockMaker;
}
@Override
public void onMockCreated(Object mock, MockCreationSettings settings) {
synchronized (mocks) {
mocks.add(new WeakReference<Object>(mock));
}
}
public void testFinished() {
WeakReference[] localMocks;
synchronized (mocks) {
localMocks = mocks.toArray(new WeakReference[0]);
}
for (WeakReference weakMock : localMocks) {
Object mock = weakMock.get();
if (mock != null) {
mockMaker.cleanUpMock(mock);
}
}
}
@Override
public boolean isListenerDirty() {
return listenerDirty;
}
public void setListenerDirty() {
listenerDirty = true;
}
}