Search in sources :

Example 11 with LanguageVersion

use of org.metaborg.core.language.LanguageVersion 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 12 with LanguageVersion

use of org.metaborg.core.language.LanguageVersion 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)

Example 13 with LanguageVersion

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

the class LanguageServiceTest method nonExistentLanguage.

/**
 * Try to remove component that was not added to the language service. Assert that exception is thrown.
 */
@Test(expected = IllegalStateException.class)
public void nonExistentLanguage() throws Exception {
    final LanguageVersion version = version(0, 0, 1);
    final FileObject location = createDir("ram:///");
    final ILanguageComponent component = language(groupId, "org.metaborg.lang.entity", version, location, "Entity");
    languageService.remove(component);
    languageService.remove(component);
}
Also used : 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 LanguageVersion

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

the class LanguageIdentitificationTest method identification.

@Test
public void identification() throws Exception {
    final LanguageVersion version = version(0, 0, 1);
    final FileObject location1 = createDir("ram:///Entity1");
    final FileObject location2 = createDir("ram:///Entity2");
    final ILanguageComponent component1 = language(groupId, "org.metaborg.lang.entity1", version, location1, "Entity1", "ent1");
    final ILanguageImpl impl1 = Iterables.get(component1.contributesTo(), 0);
    final ILanguageComponent component2 = language(groupId, "org.metaborg.lang.entity2", version, location2, "Entity2", "ent2");
    final ILanguageImpl impl2 = Iterables.get(component2.contributesTo(), 0);
    assertTrue(languageIdentifierService.identify(resourceService.resolve("ram:///Entity1/test.ent1"), impl1));
    assertFalse(languageIdentifierService.identify(resourceService.resolve("ram:///Entity2/test.ent2"), impl1));
    assertTrue(languageIdentifierService.identify(resourceService.resolve("ram:///Entity2/test.ent2"), impl2));
    assertFalse(languageIdentifierService.identify(resourceService.resolve("ram:///Entity1/test.ent1"), impl2));
}
Also used : 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 15 with LanguageVersion

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

the class LanguageIdentitificationTest method conflictingExtension.

@Test(expected = IllegalStateException.class)
public void conflictingExtension() throws Exception {
    final LanguageVersion version = version(0, 0, 1);
    final FileObject location1 = createDir("ram:///Entity1");
    final FileObject location2 = createDir("ram:///Entity2");
    language(groupId, "org.metaborg.lang.entity1", version, location1, "Entity1", "ent");
    language(groupId, "org.metaborg.lang.entity2", version, location2, "Entity2", "ent");
    languageIdentifierService.identify(resourceService.resolve("ram:///Entity/test.ent"));
}
Also used : LanguageVersion(org.metaborg.core.language.LanguageVersion) FileObject(org.apache.commons.vfs2.FileObject) Test(org.junit.Test) MetaborgTest(org.metaborg.core.test.MetaborgTest)

Aggregations

FileObject (org.apache.commons.vfs2.FileObject)15 LanguageVersion (org.metaborg.core.language.LanguageVersion)15 Test (org.junit.Test)14 MetaborgTest (org.metaborg.core.test.MetaborgTest)14 ILanguageComponent (org.metaborg.core.language.ILanguageComponent)11 ILanguageImpl (org.metaborg.core.language.ILanguageImpl)10 LanguageIdentifier (org.metaborg.core.language.LanguageIdentifier)9 ILanguage (org.metaborg.core.language.ILanguage)7 LanguageContributionIdentifier (org.metaborg.core.language.LanguageContributionIdentifier)4 DescriptionFacet (org.metaborg.core.language.DescriptionFacet)2 Nullable (javax.annotation.Nullable)1 MetaborgException (org.metaborg.core.MetaborgException)1 MetaborgRuntimeException (org.metaborg.core.MetaborgRuntimeException)1 IContext (org.metaborg.core.context.IContext)1 IFacet (org.metaborg.core.language.IFacet)1 LanguageComponentChange (org.metaborg.core.language.LanguageComponentChange)1 LanguageImplChange (org.metaborg.core.language.LanguageImplChange)1 ResourceExtensionFacet (org.metaborg.core.language.ResourceExtensionFacet)1 IdentifiedDialect (org.metaborg.core.language.dialect.IdentifiedDialect)1 ISpoofaxInputUnit (org.metaborg.spoofax.core.unit.ISpoofaxInputUnit)1