Skip to content
This repository has been archived by the owner on Nov 16, 2023. It is now read-only.

chore: Workaround for mockito #2860 #199

Merged
merged 5 commits into from Jan 26, 2023
Merged
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -3,9 +3,9 @@

package com.microsoft.accessibilityinsightsforandroidservice;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.RETURNS_SELF;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
Expand All @@ -22,7 +22,6 @@
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
Expand All @@ -31,18 +30,19 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.AdditionalAnswers;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ATFAResultsSerializerTest {

@Mock GsonBuilder gsonBuilder;
GsonBuilder gsonBuilder = mock(GsonBuilder.class, RETURNS_SELF);
@Mock Gson gson;
FieldNamingStrategy fieldNamingStrategy;
ExclusionStrategy exclusionStrategy;
JsonSerializer<Class> jsonSerializer;
@Captor ArgumentCaptor<FieldNamingStrategy> fieldNamingStrategy;
@Captor ArgumentCaptor<ExclusionStrategy> exclusiontStrategy;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: typo

Suggested change
@Captor ArgumentCaptor<ExclusionStrategy> exclusiontStrategy;
@Captor ArgumentCaptor<ExclusionStrategy> exclusionStrategy;

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@Captor ArgumentCaptor<JsonSerializer<Class>> jsonSerializer;
ATFAResultsSerializer testSubject;

class TestClass {
Expand All @@ -51,36 +51,14 @@ class TestClass {

@Before
public void prepare() {
doAnswer(
AdditionalAnswers.answer(
(FieldNamingStrategy strategy) -> {
fieldNamingStrategy = strategy;
return gsonBuilder;
}))
.when(gsonBuilder)
.setFieldNamingStrategy(any());

doAnswer(
AdditionalAnswers.answer(
(ExclusionStrategy strategy) -> {
exclusionStrategy = strategy;
return gsonBuilder;
}))
.when(gsonBuilder)
.setExclusionStrategies(any());

doAnswer(
AdditionalAnswers.answer(
(Type type, JsonSerializer<Class> serializer) -> {
jsonSerializer = serializer;
return gsonBuilder;
}))
.when(gsonBuilder)
.registerTypeAdapter(eq(Class.class), any());

when(gsonBuilder.create()).thenReturn(gson);

testSubject = new ATFAResultsSerializer(gsonBuilder);

verify(gsonBuilder).setExclusionStrategies(exclusiontStrategy.capture());
verify(gsonBuilder).setFieldNamingStrategy(fieldNamingStrategy.capture());
verify(gsonBuilder).registerTypeAdapter(eq(Class.class), jsonSerializer.capture());
}

@Test
Expand All @@ -90,8 +68,8 @@ class ExtendingClass extends TestClass {
}
Field[] testFields = ExtendingClass.class.getFields();

String testFieldExtendingClass = fieldNamingStrategy.translateName(testFields[0]);
String testFieldBaseClass = fieldNamingStrategy.translateName(testFields[1]);
String testFieldExtendingClass = fieldNamingStrategy.getValue().translateName(testFields[0]);
String testFieldBaseClass = fieldNamingStrategy.getValue().translateName(testFields[1]);

Assert.assertEquals("TestClass.testField", testFieldBaseClass);
Assert.assertEquals("ExtendingClass.testField", testFieldExtendingClass);
Expand All @@ -107,15 +85,18 @@ public void exclusionStrategyExcludesWindowHierarchyElements() {
.filter(c -> !classesToExclude.contains(c))
.collect(Collectors.toList());

classesToExclude.forEach(c -> Assert.assertTrue(exclusionStrategy.shouldSkipClass(c)));
classesToInclude.forEach(c -> Assert.assertFalse(exclusionStrategy.shouldSkipClass(c)));
classesToExclude.forEach(
c -> Assert.assertTrue(exclusiontStrategy.getValue().shouldSkipClass(c)));
classesToInclude.forEach(
c -> Assert.assertFalse(exclusiontStrategy.getValue().shouldSkipClass(c)));
}

@Test
public void jsonSerializerSerializesClassName() {
JsonPrimitive expectedJson = new JsonPrimitive(TestClass.class.getSimpleName());

JsonElement jsonElement = jsonSerializer.serialize(TestClass.class, Class.class, null);
JsonElement jsonElement =
jsonSerializer.getValue().serialize(TestClass.class, Class.class, null);

Assert.assertEquals(expectedJson, jsonElement);
}
Expand Down