package org.graalvm.tools.insight.test;
import com.oracle.truffle.api.instrumentation.EventContext;
import com.oracle.truffle.api.interop.InteropLibrary;
import com.oracle.truffle.api.interop.UnknownIdentifierException;
import java.lang.reflect.Constructor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
public class EventContextObjectTest {
private Object eventContextObject;
private InteropLibrary iop;
@Before
public void createInstancesForTheTest() throws Exception {
Class<?> ecoClass = Class.forName("com.oracle.truffle.tools.agentscript.impl.EventContextObject");
Constructor<?> newEco = ecoClass.getDeclaredConstructor(EventContext.class);
newEco.setAccessible(true);
eventContextObject = newEco.newInstance(new Object[]{null});
iop = InteropLibrary.getFactory().getUncached();
}
@Test
public void checkNameAttr() throws Exception {
assertTrue(iop.isMemberReadable(eventContextObject, "name"));
assertTrue(iop.isMemberExisting(eventContextObject, "name"));
try {
Object name = iop.readMember(eventContextObject, "name");
assertNotNull(name);
} catch (NullPointerException ex) {
}
}
@Test
public void checkUnknownAttr() throws Exception {
try {
Object nothing = iop.readMember(eventContextObject, "unknownMember");
fail("unknownMember shouldn't be available: " + nothing);
} catch (UnknownIdentifierException ex) {
}
assertFalse(iop.isMemberReadable(eventContextObject, "unknownMember"));
assertFalse(iop.isMemberExisting(eventContextObject, "unknownMember"));
}
@Test
public void enumerateAttributes() throws Exception {
assertTrue("It has members", iop.hasMembers(eventContextObject));
Object members = iop.getMembers(eventContextObject);
String[] expectedNames = {
"name", "source", "characters",
"line", "startLine", "endLine",
"column", "startColumn", "endColumn"
};
assertEquals(expectedNames.length, iop.getArraySize(members));
for (int i = 0; i < expectedNames.length; i++) {
assertEquals(expectedNames[i], iop.readArrayElement(members, i));
}
}
}