Search in sources :

Example 11 with ILanguage

use of org.metaborg.core.language.ILanguage in project spoofax by metaborg.

the class LanguageServiceTest method activeLowerVersion.

/**
 * Add an implementation with a lower version number, assert that the other implementation stays active.
 */
@Test
public void activeLowerVersion() throws Exception {
    final String id = "org.metaborg.lang.entity";
    final LanguageVersion version1 = version(0, 1, 0);
    final LanguageVersion version2 = version(0, 0, 1);
    final LanguageIdentifier identifier1 = new LanguageIdentifier(groupId, id, version1);
    final LanguageIdentifier identifier2 = new LanguageIdentifier(groupId, id, version2);
    final FileObject location1 = createDir("ram:///Entity1/");
    final FileObject location2 = createDir("ram:///Entity2/");
    final String name = "Entity";
    final ILanguageComponent component1 = language(identifier1, location1, name);
    final ILanguageImpl impl1 = Iterables.get(component1.contributesTo(), 0);
    final ILanguage lang = impl1.belongsTo();
    assertSame(component1, languageService.getComponent(location1.getName()));
    assertSame(impl1, languageService.getImpl(identifier1));
    assertSame(impl1, lang.activeImpl());
    assertSame(lang, languageService.getLanguage(name));
    final ILanguageComponent component2 = language(identifier2, location2, name);
    final ILanguageImpl impl2 = Iterables.get(component2.contributesTo(), 0);
    // Language 1 with higher version number stays active.
    assertSame(component1, languageService.getComponent(location1.getName()));
    assertSame(component2, languageService.getComponent(location2.getName()));
    assertSame(impl1, languageService.getImpl(identifier1));
    assertSame(impl2, languageService.getImpl(identifier2));
    assertSame(impl1, lang.activeImpl());
    assertSame(lang, languageService.getLanguage(name));
    assertSize(1, impl1.components());
    assertSize(1, impl2.components());
    assertSize(2, lang.impls());
    assertSize(2, languageService.getAllComponents());
    assertSize(2, languageService.getAllImpls());
    assertSize(1, languageService.getAllLanguages());
}
Also used : ILanguage(org.metaborg.core.language.ILanguage) LanguageIdentifier(org.metaborg.core.language.LanguageIdentifier) ILanguageImpl(org.metaborg.core.language.ILanguageImpl) LanguageVersion(org.metaborg.core.language.LanguageVersion) FileObject(org.apache.commons.vfs2.FileObject) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) Test(org.junit.Test) MetaborgTest(org.metaborg.core.test.MetaborgTest)

Example 12 with ILanguage

use of org.metaborg.core.language.ILanguage in project spoofax by metaborg.

the class LanguageServiceTest method activeMostRecent.

/**
 * Add multiple implementations, assert that the active language is correct.
 */
@Test
public void activeMostRecent() throws Exception {
    final String id1 = "org.metaborg.lang.entity1";
    final String id2 = "org.metaborg.lang.entity2";
    final String id3 = "org.metaborg.lang.entity3";
    final String id4 = "org.metaborg.lang.entity4";
    final LanguageVersion version = version(0, 0, 1);
    final LanguageIdentifier identifier1 = new LanguageIdentifier(groupId, id1, version);
    final LanguageIdentifier identifier2 = new LanguageIdentifier(groupId, id2, version);
    final LanguageIdentifier identifier3 = new LanguageIdentifier(groupId, id3, version);
    final LanguageIdentifier identifier4 = new LanguageIdentifier(groupId, id4, version);
    final FileObject location1 = createDir("ram:///Entity1");
    final FileObject location2 = createDir("ram:///Entity2");
    final FileObject location3 = createDir("ram:///Entity3");
    final FileObject location4 = createDir("ram:///Entity3");
    final String name = "Entity";
    final ILanguageComponent component1 = language(identifier1, location1, name);
    final ILanguageImpl impl1 = Iterables.get(component1.contributesTo(), 0);
    final ILanguage lang = impl1.belongsTo();
    assertSame(impl1, lang.activeImpl());
    final ILanguageComponent component2 = language(identifier2, location2, name);
    final ILanguageImpl impl2 = Iterables.get(component2.contributesTo(), 0);
    assertSame(impl2, lang.activeImpl());
    final ILanguageComponent component3 = language(identifier3, location3, name);
    final ILanguageImpl impl3 = Iterables.get(component3.contributesTo(), 0);
    assertSame(impl3, lang.activeImpl());
    languageService.remove(component3);
    assertSame(impl2, lang.activeImpl());
    languageService.remove(component1);
    assertSame(impl2, lang.activeImpl());
    final ILanguageComponent component4 = language(identifier4, location4, name);
    final ILanguageImpl impl4 = Iterables.get(component4.contributesTo(), 0);
    assertSame(impl4, lang.activeImpl());
    languageService.remove(component4);
    assertSame(impl2, lang.activeImpl());
    languageService.remove(component2);
    assertNull(lang.activeImpl());
    assertSize(0, lang.impls());
    assertNull(languageService.getLanguage(name));
}
Also used : ILanguage(org.metaborg.core.language.ILanguage) LanguageIdentifier(org.metaborg.core.language.LanguageIdentifier) ILanguageImpl(org.metaborg.core.language.ILanguageImpl) LanguageVersion(org.metaborg.core.language.LanguageVersion) FileObject(org.apache.commons.vfs2.FileObject) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) Test(org.junit.Test) MetaborgTest(org.metaborg.core.test.MetaborgTest)

Example 13 with ILanguage

use of org.metaborg.core.language.ILanguage in project spoofax by metaborg.

the class LanguageServiceTest method languageServiceCorrectness.

/**
 * Add multiple different language implementations, assert correctness of the language service.
 */
@Test
public void languageServiceCorrectness() throws Exception {
    final String id1 = "org.metaborg.lang.entity1";
    final String id2 = "org.metaborg.lang.entity2";
    final String id3 = "org.metaborg.lang.entity3";
    final LanguageVersion version = version(0, 0, 1);
    final LanguageIdentifier identifier1 = new LanguageIdentifier(groupId, id1, version);
    final LanguageIdentifier identifier2 = new LanguageIdentifier(groupId, id2, version);
    final LanguageIdentifier identifier3 = new LanguageIdentifier(groupId, id3, version);
    final FileObject location1 = createDir("ram:///Entity1");
    final FileObject location2 = createDir("ram:///Entity2");
    final FileObject location3 = createDir("ram:///Entity3");
    final String name1 = "Entity1";
    final String name2 = "Entity2";
    final String name3 = "Entity3";
    final ILanguageComponent component1 = language(identifier1, location1, name1);
    final ILanguageImpl impl1 = Iterables.get(component1.contributesTo(), 0);
    final ILanguage lang1 = impl1.belongsTo();
    final ILanguageComponent component2 = language(identifier2, location2, name2);
    final ILanguageImpl impl2 = Iterables.get(component2.contributesTo(), 0);
    final ILanguage lang2 = impl2.belongsTo();
    final ILanguageComponent component3 = language(identifier3, location3, name3);
    final ILanguageImpl impl3 = Iterables.get(component3.contributesTo(), 0);
    final ILanguage lang3 = impl3.belongsTo();
    assertEquals(component1, languageService.getComponent(location1.getName()));
    assertSame(component1, languageService.getComponent(location1.getName()));
    assertEquals(component2, languageService.getComponent(location2.getName()));
    assertSame(component2, languageService.getComponent(location2.getName()));
    assertEquals(component3, languageService.getComponent(location3.getName()));
    assertSame(component3, languageService.getComponent(location3.getName()));
    assertEquals(impl1, languageService.getImpl(identifier1));
    assertSame(impl1, languageService.getImpl(identifier1));
    assertEquals(impl2, languageService.getImpl(identifier2));
    assertSame(impl2, languageService.getImpl(identifier2));
    assertEquals(impl3, languageService.getImpl(identifier3));
    assertSame(impl3, languageService.getImpl(identifier3));
    assertEquals(impl1, lang1.activeImpl());
    assertSame(impl1, lang1.activeImpl());
    assertEquals(impl2, lang2.activeImpl());
    assertSame(impl2, lang2.activeImpl());
    assertEquals(impl3, lang3.activeImpl());
    assertSame(impl3, lang3.activeImpl());
    assertEquals(lang1, languageService.getLanguage(name1));
    assertSame(lang1, languageService.getLanguage(name1));
    assertEquals(lang2, languageService.getLanguage(name2));
    assertSame(lang2, languageService.getLanguage(name2));
    assertEquals(lang3, languageService.getLanguage(name3));
    assertSame(lang3, languageService.getLanguage(name3));
    assertSize(1, impl1.components());
    assertSize(1, impl2.components());
    assertSize(1, impl3.components());
    assertSize(1, lang1.impls());
    assertSize(1, lang2.impls());
    assertSize(1, lang3.impls());
    assertSize(3, languageService.getAllComponents());
    assertSize(3, languageService.getAllImpls());
    assertSize(3, languageService.getAllLanguages());
}
Also used : ILanguage(org.metaborg.core.language.ILanguage) LanguageIdentifier(org.metaborg.core.language.LanguageIdentifier) ILanguageImpl(org.metaborg.core.language.ILanguageImpl) LanguageVersion(org.metaborg.core.language.LanguageVersion) FileObject(org.apache.commons.vfs2.FileObject) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) Test(org.junit.Test) MetaborgTest(org.metaborg.core.test.MetaborgTest)

Example 14 with ILanguage

use of org.metaborg.core.language.ILanguage in project spoofax by metaborg.

the class LanguageServiceTest method componentContributions.

/**
 * Add multiple components that contribute to multiple implementations, assert correctness of language service and
 * objects. Delete some components and assert correctness again.
 */
@Test
public void componentContributions() throws Exception {
    final String id1 = "org.metaborg.lang.entity.component1";
    final String id2 = "org.metaborg.lang.entity.component2";
    final String id3 = "org.metaborg.lang.entity.component3";
    final String id4 = "org.metaborg.lang.entity.component4";
    final String id5 = "org.metaborg.lang.entity.component5";
    final LanguageVersion version = version(0, 0, 1);
    final LanguageIdentifier identifier1 = new LanguageIdentifier(groupId, id1, version);
    final LanguageIdentifier identifier2 = new LanguageIdentifier(groupId, id2, version);
    final LanguageIdentifier identifier3 = new LanguageIdentifier(groupId, id3, version);
    final LanguageIdentifier identifier4 = new LanguageIdentifier(groupId, id4, version);
    final LanguageIdentifier identifier5 = new LanguageIdentifier(groupId, id5, version);
    final FileObject location1 = createDir("ram:///Entity1");
    final FileObject location2 = createDir("ram:///Entity2");
    final FileObject location3 = createDir("ram:///Entity3");
    final FileObject location4 = createDir("ram:///Entity4");
    final FileObject location5 = createDir("ram:///Entity5");
    final String implId1 = "org.metaborg.lang.entity.impl1";
    final String implId2 = "org.metaborg.lang.entity.impl2";
    final String name = "Entity";
    final LanguageIdentifier implIdentifier1 = new LanguageIdentifier(groupId, implId1, version);
    final LanguageIdentifier implIdentifier2 = new LanguageIdentifier(groupId, implId2, version);
    final LanguageContributionIdentifier requestIdentifier1 = new LanguageContributionIdentifier(implIdentifier1, name);
    final LanguageContributionIdentifier requestIdentifier2 = new LanguageContributionIdentifier(implIdentifier2, name);
    final ILanguageComponent component1 = language(identifier1, location1, requestIdentifier1);
    final ILanguageComponent component2 = language(identifier2, location2, requestIdentifier1);
    final ILanguageComponent component3 = language(identifier3, location3, requestIdentifier2);
    final ILanguageComponent component4 = language(identifier4, location4, requestIdentifier1, requestIdentifier2);
    final ILanguageComponent component5 = language(identifier5, location5, requestIdentifier1, requestIdentifier2);
    final ILanguageImpl impl1 = languageService.getImpl(implIdentifier1);
    final ILanguageImpl impl2 = languageService.getImpl(implIdentifier2);
    final ILanguage lang = languageService.getLanguage(name);
    assertSame(component1, languageService.getComponent(location1.getName()));
    assertSame(component2, languageService.getComponent(location2.getName()));
    assertSame(component3, languageService.getComponent(location3.getName()));
    assertSame(component4, languageService.getComponent(location4.getName()));
    assertSame(component5, languageService.getComponent(location5.getName()));
    assertSame(impl1, languageService.getImpl(implIdentifier1));
    assertSame(impl2, languageService.getImpl(implIdentifier2));
    assertSame(lang, languageService.getLanguage(name));
    assertSize(5, languageService.getAllComponents());
    assertSize(2, languageService.getAllImpls());
    assertSize(1, languageService.getAllLanguages());
    assertContains(impl1, component1.contributesTo());
    assertNotContains(impl2, component1.contributesTo());
    assertContains(impl1, component2.contributesTo());
    assertNotContains(impl2, component2.contributesTo());
    assertNotContains(impl1, component3.contributesTo());
    assertContains(impl2, component3.contributesTo());
    assertContains(impl1, component4.contributesTo());
    assertContains(impl2, component4.contributesTo());
    assertContains(impl1, component5.contributesTo());
    assertContains(impl2, component5.contributesTo());
    assertContains(component1, impl1.components());
    assertContains(component2, impl1.components());
    assertNotContains(component3, impl1.components());
    assertContains(component4, impl1.components());
    assertContains(component5, impl1.components());
    assertNotContains(component1, impl2.components());
    assertNotContains(component2, impl2.components());
    assertContains(component3, impl2.components());
    assertContains(component4, impl2.components());
    assertContains(component5, impl2.components());
    assertSame(lang, impl1.belongsTo());
    assertSame(lang, impl2.belongsTo());
    assertContains(impl1, lang.impls());
    assertContains(impl2, lang.impls());
    languageService.remove(component3);
    assertNull(languageService.getComponent(location3.getName()));
    assertSize(4, languageService.getAllComponents());
    assertSize(2, languageService.getAllImpls());
    assertSize(1, languageService.getAllLanguages());
    assertEmpty(component3.contributesTo());
    assertNotContains(component3, impl1.components());
    languageService.remove(component4);
    languageService.remove(component5);
    // Also removes implementation 2, since all its components have been removed.
    assertNull(languageService.getImpl(implIdentifier2));
    assertSize(2, languageService.getAllComponents());
    assertSize(1, languageService.getAllImpls());
    assertSize(1, languageService.getAllLanguages());
    assertEmpty(component4.contributesTo());
    assertEmpty(component5.contributesTo());
    assertNotContains(component4, impl1.components());
    assertNotContains(component5, impl1.components());
    assertEmpty(impl2.components());
    assertNotContains(impl2, lang.impls());
}
Also used : ILanguage(org.metaborg.core.language.ILanguage) LanguageIdentifier(org.metaborg.core.language.LanguageIdentifier) ILanguageImpl(org.metaborg.core.language.ILanguageImpl) LanguageVersion(org.metaborg.core.language.LanguageVersion) FileObject(org.apache.commons.vfs2.FileObject) ILanguageComponent(org.metaborg.core.language.ILanguageComponent) LanguageContributionIdentifier(org.metaborg.core.language.LanguageContributionIdentifier) Test(org.junit.Test) MetaborgTest(org.metaborg.core.test.MetaborgTest)

Aggregations

ILanguage (org.metaborg.core.language.ILanguage)14 ILanguageImpl (org.metaborg.core.language.ILanguageImpl)14 FileObject (org.apache.commons.vfs2.FileObject)10 Test (org.junit.Test)7 ILanguageComponent (org.metaborg.core.language.ILanguageComponent)7 LanguageVersion (org.metaborg.core.language.LanguageVersion)7 MetaborgException (org.metaborg.core.MetaborgException)6 LanguageIdentifier (org.metaborg.core.language.LanguageIdentifier)6 MetaborgTest (org.metaborg.core.test.MetaborgTest)6 IStrategoTerm (org.spoofax.interpreter.terms.IStrategoTerm)4 MetaborgRuntimeException (org.metaborg.core.MetaborgRuntimeException)3 IProject (org.metaborg.core.project.IProject)3 IContext (org.metaborg.core.context.IContext)2 IdentificationFacet (org.metaborg.core.language.IdentificationFacet)2 IdentifiedResource (org.metaborg.core.language.IdentifiedResource)2 IdentifiedDialect (org.metaborg.core.language.dialect.IdentifiedDialect)2 SyntaxFacet (org.metaborg.spoofax.core.syntax.SyntaxFacet)2 IOException (java.io.IOException)1 Nullable (javax.annotation.Nullable)1 FileSystemException (org.apache.commons.vfs2.FileSystemException)1