1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockito.internal.util;
62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.mock.MockName;
82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.io.Serializable;
102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class MockNameImpl implements MockName, Serializable {
122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private static final long serialVersionUID = 8014974700844306925L;
142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private final String mockName;
152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private boolean defaultName;
162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @SuppressWarnings("unchecked")
182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public MockNameImpl(String mockName, Class<?> classToMock) {
192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        if (mockName == null) {
202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            this.mockName = toInstanceName(classToMock);
212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            this.defaultName = true;
222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        } else {
232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            this.mockName = mockName;
242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public MockNameImpl(String mockName) {
282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        this.mockName = mockName;
292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    private static String toInstanceName(Class<?> clazz) {
322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        String className = clazz.getSimpleName();
332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        if (className.length() == 0) {
342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            //it's an anonymous class, let's get name from the parent
352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin            className = clazz.getSuperclass().getSimpleName();
362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        }
372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        //lower case first letter
382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        return className.substring(0, 1).toLowerCase() + className.substring(1);
392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public boolean isDefault() {
422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        return defaultName;
432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin
452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    @Override
462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    public String toString() {
472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin        return mockName;
482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin    }
492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin}
50