< prev index next >

test/jdk/com/sun/tools/jextract/JextractToolProviderTest.java

Print this page
rev 49470 : [mq]: 8200452

*** 32,41 **** --- 32,42 ---- import java.nicl.metadata.LibraryDependencies; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; import java.util.Arrays; + import java.util.Map; import java.util.Optional; import java.util.spi.ToolProvider; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals;
*** 374,403 **** System.err.println(exp); assertTrue(false, "should not reach here"); } } @Test public void testAnonymousEnum() { Path anonenumJar = getOutputFilePath("anonenum.jar"); deleteFile(anonenumJar); Path anonenumH = getInputFilePath("anonenum.h"); try { checkSuccess(null, "-o", anonenumJar.toString(), anonenumH.toString()); Class<?> anonenumCls = loadClass("anonenum", anonenumJar); assertNotNull(anonenumCls); ! // the nested type for anonymous enum has name starting with "enum__anonymous_at" ! // followed by full path name of header file + line + column numbers. Any non-ident ! // char replaced by "_". But we test only the start pattern here. ! Optional<Class<?>> optEnumCls = Arrays.stream(anonenumCls.getClasses()). ! filter(c -> c.getSimpleName().startsWith("enum__anonymous_at")). ! findFirst(); ! assertTrue(optEnumCls.isPresent()); ! Class<?> enumCls = optEnumCls.get(); ! checkIntField(enumCls, "RED", 0xff0000); ! checkIntField(enumCls, "GREEN", 0x00ff00); ! checkIntField(enumCls, "BLUE", 0x0000ff); } finally { deleteFile(anonenumJar); } } --- 375,441 ---- System.err.println(exp); assertTrue(false, "should not reach here"); } } + private Class<?> findClass(Class<?>[] clz, String name) { + for (Class<?> cls: clz) { + if (cls.getSimpleName().equals(name)) { + return cls; + } + } + return null; + } + + private void testEnumValue(Class<?> enumCls, Map<String, Integer> values) { + values.entrySet().stream(). + forEach(e -> checkIntField(enumCls, e.getKey(), e.getValue())); + } + @Test public void testAnonymousEnum() { Path anonenumJar = getOutputFilePath("anonenum.jar"); deleteFile(anonenumJar); Path anonenumH = getInputFilePath("anonenum.h"); try { checkSuccess(null, "-o", anonenumJar.toString(), anonenumH.toString()); Class<?> anonenumCls = loadClass("anonenum", anonenumJar); assertNotNull(anonenumCls); ! checkIntField(anonenumCls, "RED", 0xff0000); ! checkIntField(anonenumCls, "GREEN", 0x00ff00); ! checkIntField(anonenumCls, "BLUE", 0x0000ff); ! ! Class<?> enumClz[] = anonenumCls.getClasses(); ! assert(enumClz.length >= 3); ! ! Class<?> enumCls = findClass(enumClz, "codetype_t"); ! assertNotNull(enumCls); ! testEnumValue(enumCls, Map.of( ! "Java", 0, ! "C", 1, ! "CPP", 2, ! "Python", 3, ! "Ruby", 4)); ! ! enumCls = findClass(enumClz, "SIZE"); ! assertNotNull(enumCls); ! testEnumValue(enumCls, Map.of( ! "XS", 0, ! "S", 1, ! "M", 2, ! "L", 3, ! "XL", 4, ! "XXL", 5)); ! ! enumCls = findClass(enumClz, "temp"); ! assertNotNull(enumCls); ! testEnumValue(enumCls, Map.of( ! "ONE", 1, ! "TWO", 2)); ! ! enumCls = findClass(enumClz, "temp_t"); ! assertNull(enumCls); } finally { deleteFile(anonenumJar); } }
< prev index next >