Skip to content

Commit

Permalink
#49: Add support for the withoutAnnotations attribute of the @mock an…
Browse files Browse the repository at this point in the history
…notation
  • Loading branch information
picimako committed May 10, 2023
1 parent ce350d0 commit 91f23fd
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 8 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

## [0.10.0]
### Changed
- Disabled the v3 to v4 migration aids inspections since Mockito 4.x has already been public for 1.5 years.
- Disabled the v3 to v4 migration aids inspections since Mockito 4.x has already been released for 1.5 years.
- [#49](https://github.com/picimako/mockitools/issues/49): Added support for the `withoutAnnotations` attribute of the `@Mock` annotation.

## [0.9.0]
### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public final class MockitoQualifiedNames {
public static final String EXTRA_INTERFACES = "extraInterfaces";
public static final String STRICTNESS = "strictness";
public static final String MOCK_MAKER = "mockMaker";
public static final String WITHOUT_ANNOTATIONS = "withoutAnnotations";

//Annotations
public static final String ORG_MOCKITO_CAPTOR = "org.mockito.Captor";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static com.google.common.collect.Iterables.getLast;
import static com.picimako.mockitools.MockitoQualifiedNames.MOCK_MAKER;
import static com.picimako.mockitools.MockitoQualifiedNames.STRICTNESS;
import static com.picimako.mockitools.MockitoQualifiedNames.WITHOUT_ANNOTATIONS;
import static com.picimako.mockitools.util.ClassObjectAccessUtil.getOperandType;
import static com.picimako.mockitools.MockableTypesUtil.isMockableTypeInAnyWay;
import static com.picimako.mockitools.MockitoQualifiedNames.ANSWER;
Expand Down Expand Up @@ -98,7 +99,8 @@ public class ConvertMockCallToFieldIntention extends ConvertCallToFieldIntention
private static final CallMatcher MOCKITO_WITH_SETTINGS = staticCall(ORG_MOCKITO_MOCKITO, "withSettings");

private static final CallMatcher MOCK_SETTINGS_SERIALIZABLE_WITH_MODE = instanceCall(ORG_MOCKITO_MOCK_SETTINGS, SERIALIZABLE).parameterTypes(ORG_MOCKITO_MOCK_SERIALIZABLE_MODE);
private static final Set<String> SUPPORTED_MOCK_SETTINGS_METHODS = Set.of(DEFAULT_ANSWER, STUB_ONLY, NAME, EXTRA_INTERFACES, LENIENT, STRICTNESS, MOCK_MAKER);
private static final Set<String> SUPPORTED_MOCK_SETTINGS_METHODS =
Set.of(DEFAULT_ANSWER, STUB_ONLY, NAME, EXTRA_INTERFACES, LENIENT, STRICTNESS, MOCK_MAKER, WITHOUT_ANNOTATIONS);

public ConvertMockCallToFieldIntention() {
super(MockitoQualifiedNames.MOCK, "@Mock");
Expand Down Expand Up @@ -199,7 +201,10 @@ private void configureFromMockSettings(MockSettingsBasedAnnotationConfigurer con
for (int i = calls.size() - 2; i >= 0; i--) {
var call = calls.get(i);
String methodName = getMethodName(call);
if (STUB_ONLY.equals(methodName) || LENIENT.equals(methodName) || SERIALIZABLE.equals(methodName))
if (STUB_ONLY.equals(methodName)
|| LENIENT.equals(methodName)
|| SERIALIZABLE.equals(methodName)
|| WITHOUT_ANNOTATIONS.equals(methodName))
configurer.configureBooleanAttribute(methodName);
else if (NAME.equals(methodName)) configurer.configureName(call);
else if (DEFAULT_ANSWER.equals(methodName)) configurer.configureAnswerFromCall(call);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public class ConvertMockSpyFieldToCallIntention implements IntentionAction {
"answer", value -> value instanceof PsiReferenceExpression && !isDefaultAnswer((PsiReferenceExpression) value),
"name", value -> !isBlank(value)
);
private static final Set<String> BOOLEAN_ATTRIBUTES = Set.of("stubOnly", "serializable", "lenient");
private static final Set<String> BOOLEAN_ATTRIBUTES = Set.of("stubOnly", "serializable", "lenient", "withoutAnnotations");
private static final ClassMethodCellRenderer METHOD_CELL_RENDERER = new ClassMethodCellRenderer();

@IntentionName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,18 @@ void testAvailableForNotSupportedMockSettingsSerializableWithoutMode() {
"}");
}

@Test
void testAvailableForWithoutAnnotations() {
checkIntentionIsAvailable(
"import org.mockito.Mockito;\n" +
"\n" +
"public class Available {\n" +
" public void testMethod() {\n" +
" Mockito.mo<caret>ck(Object.class, Mockito.withSettings().withoutAnnotations());\n" +
" }\n" +
"}");
}

//Conversions

@Test
Expand Down Expand Up @@ -371,15 +383,15 @@ void testConvertsMockitoMockWithBooleanSettings() {
"\n" +
"public class ConversionTest {\n" +
" public void testMethod() {\n" +
" aMethod(Mockito.mo<caret>ck(Object.class, Mockito.withSettings().lenient().serializable().stubOnly()));\n" +
" aMethod(Mockito.mo<caret>ck(Object.class, Mockito.withSettings().lenient().serializable().stubOnly().withoutAnnotations()));\n" +
" }\n" +
" public void aMethod(Object object) { }\n" +
"}",
"import org.mockito.Mock;\n" +
"import org.mockito.Mockito;\n" +
"\n" +
"public class ConversionTest {\n" +
" @Mock(lenient = true, serializable = true, stubOnly = true)\n" +
" @Mock(lenient = true, serializable = true, stubOnly = true, withoutAnnotations = true)\n" +
" Object object;\n" +
"\n" +
" public void testMethod() {\n" +
Expand All @@ -396,14 +408,14 @@ void testConvertsMockitoMockWithBooleanSettingsFromVariable() {
"\n" +
"public class ConversionTest {\n" +
" public void testMethod() {\n" +
" var mock = Mockito.mo<caret>ck(Object.class, Mockito.withSettings().lenient().serializable().stubOnly());\n" +
" var mock = Mockito.mo<caret>ck(Object.class, Mockito.withSettings().lenient().serializable().stubOnly().withoutAnnotations());\n" +
" }\n" +
"}",
"import org.mockito.Mock;\n" +
"import org.mockito.Mockito;\n" +
"\n" +
"public class ConversionTest {\n" +
" @Mock(lenient = true, serializable = true, stubOnly = true)\n" +
" @Mock(lenient = true, serializable = true, stubOnly = true, withoutAnnotations = true)\n" +
" Object mock;\n" +
"\n" +
" public void testMethod() {\n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,29 @@ void testConvertsMockFieldToCallWithLenient() {
"}");
}

@Test
void testConvertsMockFieldToCallWithWithoutAnnotations() {
checkIntentionRun(
"import org.mockito.Mock;\n" +
"\n" +
"public class ConversionTest {\n" +
" @Mock(withoutAnnotations = true)\n" +
" Object mo<caret>ck;\n" +
"\n" +
" public void method() {\n" +
" }\n" +
"}",
"import org.mockito.Mock;\n" +
"import org.mockito.Mockito;\n" +
"\n" +
"public class ConversionTest {\n" +
"\n" +
" public void method() {\n" +
" Object mock = Mockito.mock(Object.class, Mockito.withSettings().withoutAnnotations());\n" +
" }\n" +
"}");
}

//Complex settings

@Test
Expand Down

0 comments on commit 91f23fd

Please sign in to comment.