use of org.graalvm.options.OptionKey in project graal by oracle.
the class LanguageSPITest method testLazyOptionInit.
@Test
@SuppressWarnings("all")
public void testLazyOptionInit() {
AtomicInteger getOptionDescriptors = new AtomicInteger(0);
AtomicInteger iterator = new AtomicInteger(0);
AtomicInteger get = new AtomicInteger(0);
ProxyLanguage.setDelegate(new ProxyLanguage() {
final OptionKey<String> option = new OptionKey<>("");
final List<OptionDescriptor> descriptors;
{
descriptors = new ArrayList<>();
descriptors.add(OptionDescriptor.newBuilder(option, ProxyLanguage.ID + ".option").build());
}
@Override
protected OptionDescriptors getOptionDescriptors() {
getOptionDescriptors.incrementAndGet();
return new OptionDescriptors() {
public Iterator<OptionDescriptor> iterator() {
iterator.incrementAndGet();
return descriptors.iterator();
}
public OptionDescriptor get(String optionName) {
get.incrementAndGet();
for (OptionDescriptor optionDescriptor : descriptors) {
if (optionDescriptor.getName().equals(optionName)) {
return optionDescriptor;
}
}
return null;
}
};
}
});
Context c = Context.create();
c.close();
assertEquals(0, getOptionDescriptors.get());
assertEquals(0, iterator.get());
assertEquals(0, get.get());
c = Context.newBuilder(ProxyLanguage.ID).option(ProxyLanguage.ID + ".option", "foobar").build();
assertEquals(1, getOptionDescriptors.get());
assertEquals(1, get.get());
boolean assertionsEnabled = false;
assert assertionsEnabled = true;
if (assertionsEnabled) {
// with assertions enabled we assert the options.
assertEquals(1, iterator.get());
} else {
// for valid options we should not need the iterator
assertEquals(0, iterator.get());
}
c.close();
// test lazyness when using meta-data
getOptionDescriptors.set(0);
iterator.set(0);
get.set(0);
c = Context.create();
OptionDescriptors descriptors = c.getEngine().getLanguages().get(ProxyLanguage.ID).getOptions();
assertEquals(1, getOptionDescriptors.get());
if (assertionsEnabled) {
// with assertions enabled we assert the options.
assertEquals(1, iterator.get());
} else {
// for valid options we should not need the iterator
assertEquals(0, iterator.get());
}
assertEquals(0, get.get());
for (OptionDescriptor descriptor : descriptors) {
}
assertEquals(1, getOptionDescriptors.get());
if (assertionsEnabled) {
// with assertions enabled we assert the options.
assertEquals(2, iterator.get());
} else {
// for valid options we should not need the iterator
assertEquals(1, iterator.get());
}
assertEquals(0, get.get());
assertNotNull(descriptors.get(ProxyLanguage.ID + ".option"));
assertEquals(1, getOptionDescriptors.get());
assertEquals(1, get.get());
c.close();
}
Aggregations