package com.hazelcast.internal.adapter;
import com.hazelcast.internal.adapter.DataStructureAdapter.DataStructureMethods;
import com.hazelcast.test.HazelcastParallelClassRunner;
import com.hazelcast.test.annotation.ParallelTest;
import com.hazelcast.test.annotation.QuickTest;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import static java.lang.String.format;
import static org.junit.Assert.fail;
/**
* Checks that {@link DataStructureMethods} contains unique method signatures which are defined in {@link DataStructureAdapter}.
*/
@RunWith(HazelcastParallelClassRunner.class)
@Category({QuickTest.class, ParallelTest.class})
public class DataStructureMethodsTest {
@Test
public void testThatAllDataStructureMethodsAreFoundAndReferencedJustOnce() {
String adapterClassName = DataStructureAdapter.class.getSimpleName();
String methodsClassName = DataStructureMethods.class.getSimpleName();
Map<Method, DataStructureMethods> knownMethods = new HashMap<Method, DataStructureMethods>();
for (DataStructureMethods method : DataStructureMethods.values()) {
try {
Method adapterMethod = DataStructureAdapter.class.getMethod(method.getMethodName(), method.getParameterTypes());
if (knownMethods.containsKey(adapterMethod)) {
fail(format("%s::%s(%s) is referenced by %s.%s, but was already referenced by %s.%s",
adapterClassName, method.getMethodName(), method.getParameterTypeString(), methodsClassName, method,
methodsClassName, knownMethods.get(adapterMethod)));
}
knownMethods.put(adapterMethod, method);
} catch (NoSuchMethodException e) {
fail(format("%s::%s(%s) is referenced by %s.%s, but could not be found!",
adapterClassName, method.getMethodName(), method.getParameterTypeString(), methodsClassName, method));
}
}
}
}