	@Test
	public void testReplaceGenericsWithWildcards() {

		// check classpath graph
		List<GenericInfo> classGenerics = root.getClassGenerics(ArgType.object("java.util.ArrayList"));
		assertThat(classGenerics, hasSize(1));
		GenericInfo genericInfo = classGenerics.get(0);
		assertThat(genericInfo.getGenericType(), is(ArgType.genericType("E")));
		assertThat(genericInfo.getExtendsList(), hasSize(0));

		// prepare input
		ArgType instanceType = ArgType.generic("java.util.ArrayList", ArgType.OBJECT);
		LOG.debug("instanceType: {}", instanceType);

		ArgType generic = ArgType.generic("java.util.List", ArgType.wildcard(ArgType.genericType("E"), ArgType.WildcardBound.SUPER));
		LOG.debug("generic: {}", generic);

		// replace
		ArgType result = TypeUtils.replaceClassGenerics(root, instanceType, generic);
		LOG.debug("result: {}", result);

		ArgType expected = ArgType.generic("java.util.List", ArgType.wildcard(ArgType.OBJECT, ArgType.WildcardBound.SUPER));
		assertThat(result, is(expected));
	}