Merge pull request #567 from eclipse/jk/GH520_1

GH-520 more tests for live scoping
This commit is contained in:
Jan Koehnlein 2017-12-06 11:16:25 +01:00 committed by GitHub
commit e6042819bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 171 additions and 15 deletions

View file

@ -52,6 +52,7 @@ class LiveShadowedChunkedContainerTest {
@Inject IResourceDescription.Manager resourceDescriptionManager
@Inject Provider<LiveShadowedChunkedResourceDescriptions> provider
WorkspaceConfig workspaceConfig
ProjectConfig fooProject
ProjectConfig barProject
@ -63,9 +64,11 @@ class LiveShadowedChunkedContainerTest {
LiveShadowedChunkedContainer fooContainer
LiveShadowedChunkedContainer barContainer
LiveShadowedChunkedResourceDescriptions liveShadowedChunkedResourceDescriptions
@Before
def void setUp() {
val workspaceConfig = new WorkspaceConfig()
workspaceConfig = new WorkspaceConfig()
fooProject = new ProjectConfig('foo', workspaceConfig)
barProject = new ProjectConfig('bar', workspaceConfig)
val rs0 = resourceSetProvider.get
@ -78,7 +81,7 @@ class LiveShadowedChunkedContainerTest {
rs1 = resourceSetProvider.get
new ChunkedResourceDescriptions(chunks, rs1)
ProjectConfigAdapter.install(rs1, fooProject)
val liveShadowedChunkedResourceDescriptions = provider.get
liveShadowedChunkedResourceDescriptions = provider.get
liveShadowedChunkedResourceDescriptions.context = rs1
fooContainer = new LiveShadowedChunkedContainer(liveShadowedChunkedResourceDescriptions, 'foo')
barContainer = new LiveShadowedChunkedContainer(liveShadowedChunkedResourceDescriptions, 'bar')
@ -104,16 +107,66 @@ class LiveShadowedChunkedContainerTest {
assertTrue(barContainer.hasResourceDescription(barURI))
assertFalse(barContainer.hasResourceDescription(fooURI))
assertEquals(barURI, barContainer.getResourceDescription(barURI).URI)
assertEquals('foo', (liveShadowedChunkedResourceDescriptions.globalDescriptions as ChunkedResourceDescriptions).getContainer('foo').getExportedObjects.map[qualifiedName.toString].join(','))
assertEquals('bar', (liveShadowedChunkedResourceDescriptions.globalDescriptions as ChunkedResourceDescriptions).getContainer('bar').getExportedObjects.map[qualifiedName.toString].join(','))
}
@Test
def testAddResource() {
'baz'.parse(fooProject.sourceFolders.head.path.trimSegments(1).appendSegment('baz.livecontainertestlanguage'), rs1)
def testAddRemoveResource() {
val bazResource = 'baz'.parse(fooProject.sourceFolders.head.path.trimSegments(1).appendSegment('baz.livecontainertestlanguage'), rs1).eResource
assertEquals(2, fooContainer.resourceDescriptions.size)
assertEquals(2, fooContainer.resourceDescriptionCount)
assertEquals('baz,foo', fooContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(1, barContainer.resourceDescriptions.size)
assertEquals(1, barContainer.resourceDescriptionCount)
rs1.resources.remove(bazResource)
assertEquals(1, fooContainer.resourceDescriptions.size)
assertEquals(1, fooContainer.resourceDescriptionCount)
assertEquals('foo', fooContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(1, barContainer.resourceDescriptions.size)
assertEquals(1, barContainer.resourceDescriptionCount)
}
@Test
def testMoveResourceBetweenContainers() {
val oldURI = fooProject.sourceFolders.head.path.trimSegments(1).appendSegment('baz.livecontainertestlanguage')
val bazResource = 'baz'.parse(oldURI, rs1).eResource
assertEquals(2, fooContainer.resourceDescriptions.size)
assertEquals(2, fooContainer.resourceDescriptionCount)
assertEquals('baz,foo', fooContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(oldURI, fooContainer.getExportedObjects(MODEL, QualifiedName.create('baz'), false).head.EObjectURI.trimFragment)
assertEquals(1, barContainer.resourceDescriptions.size)
assertEquals(1, barContainer.resourceDescriptionCount)
val newURI = URI.createURI(bazResource.URI.toString().replace('/foo/', '/bar/'))
bazResource.URI = newURI
assertEquals(1, fooContainer.resourceDescriptions.size)
assertEquals(1, fooContainer.resourceDescriptionCount)
assertEquals('foo', fooContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(1, fooContainer.resourceDescriptions.size)
assertEquals(1, fooContainer.resourceDescriptionCount)
assertEquals('bar,baz', barContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(2, barContainer.resourceDescriptions.size)
assertEquals(2, barContainer.resourceDescriptionCount)
assertEquals(newURI, barContainer.getExportedObjects(MODEL, QualifiedName.create('baz'), false).head.EObjectURI.trimFragment)
}
@Test
def testAddToNewContainer() {
val bazProject = new ProjectConfig('baz', workspaceConfig)
val newURI = bazProject.sourceFolders.head.path.trimSegments(1).appendSegment('baz.livecontainertestlanguage')
'baz'.parse(newURI, rs1)
val bazContainer = new LiveShadowedChunkedContainer(liveShadowedChunkedResourceDescriptions, 'baz')
assertEquals(1, fooContainer.resourceDescriptions.size)
assertEquals(1, fooContainer.resourceDescriptionCount)
assertEquals('foo', fooContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(1, barContainer.resourceDescriptions.size)
assertEquals(1, barContainer.resourceDescriptionCount)
assertEquals('bar', barContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(1, bazContainer.resourceDescriptions.size)
assertEquals(1, bazContainer.resourceDescriptionCount)
assertEquals('baz', bazContainer.exportedObjects.map[qualifiedName.toString].sort.join(','))
assertEquals(newURI, bazContainer.getExportedObjects(MODEL, QualifiedName.create('baz'), false).head.EObjectURI.trimFragment)
}
@Test

View file

@ -17,6 +17,7 @@ import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.IResourceDescription;
import org.eclipse.xtext.resource.IResourceDescriptions;
import org.eclipse.xtext.resource.LiveContainerTestLanguageInjectorProvider;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.resource.containers.LiveShadowedChunkedContainer;
@ -65,6 +66,8 @@ public class LiveShadowedChunkedContainerTest {
@Inject
private Provider<LiveShadowedChunkedResourceDescriptions> provider;
private WorkspaceConfig workspaceConfig;
private ProjectConfig fooProject;
private ProjectConfig barProject;
@ -79,13 +82,16 @@ public class LiveShadowedChunkedContainerTest {
private LiveShadowedChunkedContainer barContainer;
private LiveShadowedChunkedResourceDescriptions liveShadowedChunkedResourceDescriptions;
@Before
public void setUp() {
try {
final WorkspaceConfig workspaceConfig = new WorkspaceConfig();
ProjectConfig _projectConfig = new ProjectConfig("foo", workspaceConfig);
WorkspaceConfig _workspaceConfig = new WorkspaceConfig();
this.workspaceConfig = _workspaceConfig;
ProjectConfig _projectConfig = new ProjectConfig("foo", this.workspaceConfig);
this.fooProject = _projectConfig;
ProjectConfig _projectConfig_1 = new ProjectConfig("bar", workspaceConfig);
ProjectConfig _projectConfig_1 = new ProjectConfig("bar", this.workspaceConfig);
this.barProject = _projectConfig_1;
final XtextResourceSet rs0 = this.resourceSetProvider.get();
this.fooURI = IterableExtensions.<SourceFolder>head(this.fooProject.getSourceFolders()).getPath().trimSegments(1).appendSegment("foo.livecontainertestlanguage");
@ -98,11 +104,11 @@ public class LiveShadowedChunkedContainerTest {
this.rs1 = this.resourceSetProvider.get();
new ChunkedResourceDescriptions(chunks, this.rs1);
ProjectConfigAdapter.install(this.rs1, this.fooProject);
final LiveShadowedChunkedResourceDescriptions liveShadowedChunkedResourceDescriptions = this.provider.get();
liveShadowedChunkedResourceDescriptions.setContext(this.rs1);
LiveShadowedChunkedContainer _liveShadowedChunkedContainer = new LiveShadowedChunkedContainer(liveShadowedChunkedResourceDescriptions, "foo");
this.liveShadowedChunkedResourceDescriptions = this.provider.get();
this.liveShadowedChunkedResourceDescriptions.setContext(this.rs1);
LiveShadowedChunkedContainer _liveShadowedChunkedContainer = new LiveShadowedChunkedContainer(this.liveShadowedChunkedResourceDescriptions, "foo");
this.fooContainer = _liveShadowedChunkedContainer;
LiveShadowedChunkedContainer _liveShadowedChunkedContainer_1 = new LiveShadowedChunkedContainer(liveShadowedChunkedResourceDescriptions, "bar");
LiveShadowedChunkedContainer _liveShadowedChunkedContainer_1 = new LiveShadowedChunkedContainer(this.liveShadowedChunkedResourceDescriptions, "bar");
this.barContainer = _liveShadowedChunkedContainer_1;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
@ -147,15 +153,25 @@ public class LiveShadowedChunkedContainerTest {
Assert.assertTrue(this.barContainer.hasResourceDescription(this.barURI));
Assert.assertFalse(this.barContainer.hasResourceDescription(this.fooURI));
Assert.assertEquals(this.barURI, this.barContainer.getResourceDescription(this.barURI).getURI());
IResourceDescriptions _globalDescriptions = this.liveShadowedChunkedResourceDescriptions.getGlobalDescriptions();
final Function1<IEObjectDescription, String> _function_6 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("foo", IterableExtensions.join(IterableExtensions.<IEObjectDescription, String>map(((ChunkedResourceDescriptions) _globalDescriptions).getContainer("foo").getExportedObjects(), _function_6), ","));
IResourceDescriptions _globalDescriptions_1 = this.liveShadowedChunkedResourceDescriptions.getGlobalDescriptions();
final Function1<IEObjectDescription, String> _function_7 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("bar", IterableExtensions.join(IterableExtensions.<IEObjectDescription, String>map(((ChunkedResourceDescriptions) _globalDescriptions_1).getContainer("bar").getExportedObjects(), _function_7), ","));
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testAddResource() {
public void testAddRemoveResource() {
try {
this._parseHelper.parse("baz", IterableExtensions.<SourceFolder>head(this.fooProject.getSourceFolders()).getPath().trimSegments(1).appendSegment("baz.livecontainertestlanguage"), this.rs1);
final Resource bazResource = this._parseHelper.parse("baz", IterableExtensions.<SourceFolder>head(this.fooProject.getSourceFolders()).getPath().trimSegments(1).appendSegment("baz.livecontainertestlanguage"), this.rs1).eResource();
Assert.assertEquals(2, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(2, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function = (IEObjectDescription it) -> {
@ -164,6 +180,82 @@ public class LiveShadowedChunkedContainerTest {
Assert.assertEquals("baz,foo", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.fooContainer.getExportedObjects(), _function)), ","));
Assert.assertEquals(1, IterableExtensions.size(this.barContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.barContainer.getResourceDescriptionCount());
this.rs1.getResources().remove(bazResource);
Assert.assertEquals(1, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function_1 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("foo", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.fooContainer.getExportedObjects(), _function_1)), ","));
Assert.assertEquals(1, IterableExtensions.size(this.barContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.barContainer.getResourceDescriptionCount());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testMoveResourceBetweenContainers() {
try {
final URI oldURI = IterableExtensions.<SourceFolder>head(this.fooProject.getSourceFolders()).getPath().trimSegments(1).appendSegment("baz.livecontainertestlanguage");
final Resource bazResource = this._parseHelper.parse("baz", oldURI, this.rs1).eResource();
Assert.assertEquals(2, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(2, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("baz,foo", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.fooContainer.getExportedObjects(), _function)), ","));
Assert.assertEquals(oldURI, IterableExtensions.<IEObjectDescription>head(this.fooContainer.getExportedObjects(LiveContainerTestLanguagePackage.Literals.MODEL, QualifiedName.create("baz"), false)).getEObjectURI().trimFragment());
Assert.assertEquals(1, IterableExtensions.size(this.barContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.barContainer.getResourceDescriptionCount());
final URI newURI = URI.createURI(bazResource.getURI().toString().replace("/foo/", "/bar/"));
bazResource.setURI(newURI);
Assert.assertEquals(1, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function_1 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("foo", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.fooContainer.getExportedObjects(), _function_1)), ","));
Assert.assertEquals(1, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function_2 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("bar,baz", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.barContainer.getExportedObjects(), _function_2)), ","));
Assert.assertEquals(2, IterableExtensions.size(this.barContainer.getResourceDescriptions()));
Assert.assertEquals(2, this.barContainer.getResourceDescriptionCount());
Assert.assertEquals(newURI, IterableExtensions.<IEObjectDescription>head(this.barContainer.getExportedObjects(LiveContainerTestLanguagePackage.Literals.MODEL, QualifiedName.create("baz"), false)).getEObjectURI().trimFragment());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
@Test
public void testAddToNewContainer() {
try {
final ProjectConfig bazProject = new ProjectConfig("baz", this.workspaceConfig);
final URI newURI = IterableExtensions.<SourceFolder>head(bazProject.getSourceFolders()).getPath().trimSegments(1).appendSegment("baz.livecontainertestlanguage");
this._parseHelper.parse("baz", newURI, this.rs1);
final LiveShadowedChunkedContainer bazContainer = new LiveShadowedChunkedContainer(this.liveShadowedChunkedResourceDescriptions, "baz");
Assert.assertEquals(1, IterableExtensions.size(this.fooContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.fooContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("foo", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.fooContainer.getExportedObjects(), _function)), ","));
Assert.assertEquals(1, IterableExtensions.size(this.barContainer.getResourceDescriptions()));
Assert.assertEquals(1, this.barContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function_1 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("bar", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(this.barContainer.getExportedObjects(), _function_1)), ","));
Assert.assertEquals(1, IterableExtensions.size(bazContainer.getResourceDescriptions()));
Assert.assertEquals(1, bazContainer.getResourceDescriptionCount());
final Function1<IEObjectDescription, String> _function_2 = (IEObjectDescription it) -> {
return it.getQualifiedName().toString();
};
Assert.assertEquals("baz", IterableExtensions.join(IterableExtensions.<String>sort(IterableExtensions.<IEObjectDescription, String>map(bazContainer.getExportedObjects(), _function_2)), ","));
Assert.assertEquals(newURI, IterableExtensions.<IEObjectDescription>head(bazContainer.getExportedObjects(LiveContainerTestLanguagePackage.Literals.MODEL, QualifiedName.create("baz"), false)).getEObjectURI().trimFragment());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}

View file

@ -19,6 +19,7 @@ import org.eclipse.xtext.resource.IContainer
import org.eclipse.xtext.resource.impl.ChunkedResourceDescriptions
import org.eclipse.xtext.resource.impl.LiveShadowedChunkedResourceDescriptions
import org.eclipse.xtext.workspace.IProjectConfig
import org.eclipse.xtext.resource.impl.ResourceDescriptionsData
/**
* @author koehnlein - Initial contribution and API
@ -50,7 +51,7 @@ class LiveShadowedChunkedContainer implements IContainer {
}
protected def getChunk() {
chunkedResourceDescriptions.getContainer(containerName)
chunkedResourceDescriptions.getContainer(containerName) ?: new ResourceDescriptionsData(#[])
}
protected def getContainedLocalDescriptions() {

View file

@ -9,6 +9,7 @@ package org.eclipse.xtext.resource.containers;
import com.google.common.annotations.Beta;
import com.google.common.collect.Iterables;
import java.util.Collections;
import java.util.Set;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
@ -27,6 +28,7 @@ import org.eclipse.xtext.resource.impl.ResourceDescriptionsData;
import org.eclipse.xtext.workspace.IProjectConfig;
import org.eclipse.xtext.workspace.ISourceFolder;
import org.eclipse.xtext.workspace.IWorkspaceConfig;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
@ -65,7 +67,15 @@ public class LiveShadowedChunkedContainer implements IContainer {
}
protected ResourceDescriptionsData getChunk() {
return this.getChunkedResourceDescriptions().getContainer(this.containerName);
ResourceDescriptionsData _elvis = null;
ResourceDescriptionsData _container = this.getChunkedResourceDescriptions().getContainer(this.containerName);
if (_container != null) {
_elvis = _container;
} else {
ResourceDescriptionsData _resourceDescriptionsData = new ResourceDescriptionsData(Collections.<IResourceDescription>unmodifiableList(CollectionLiterals.<IResourceDescription>newArrayList()));
_elvis = _resourceDescriptionsData;
}
return _elvis;
}
protected Iterable<IResourceDescription> getContainedLocalDescriptions() {