Search in sources :

Example 1 with OptionKey

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();
}
Also used : Context(org.graalvm.polyglot.Context) LanguageContext(com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext) TruffleContext(com.oracle.truffle.api.TruffleContext) OptionDescriptor(org.graalvm.options.OptionDescriptor) ArrayList(java.util.ArrayList) OptionDescriptors(org.graalvm.options.OptionDescriptors) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Iterator(java.util.Iterator) OptionKey(org.graalvm.options.OptionKey) Test(org.junit.Test)

Aggregations

TruffleContext (com.oracle.truffle.api.TruffleContext)1 LanguageContext (com.oracle.truffle.api.test.polyglot.LanguageSPITestLanguage.LanguageContext)1 ArrayList (java.util.ArrayList)1 Iterator (java.util.Iterator)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 OptionDescriptor (org.graalvm.options.OptionDescriptor)1 OptionDescriptors (org.graalvm.options.OptionDescriptors)1 OptionKey (org.graalvm.options.OptionKey)1 Context (org.graalvm.polyglot.Context)1 Test (org.junit.Test)1