blob: 78d85f0e91a068859e4a040be0a2ead2b5d11d07 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 xored software, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.core.tests.builder;
import static org.eclipse.dltk.javascript.core.tests.AllTests.PLUGIN_ID;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.builder.IProjectChange;
import org.eclipse.dltk.core.tests.model.AbstractModelTests;
import org.eclipse.dltk.internal.core.builder.IncrementalProjectChange;
/**
* Tests related to the new build infrastructure. There is no strong preference
* to use JS, but some language is actually required.
*/
@SuppressWarnings("restriction")
public class BuildChangeTests extends AbstractModelTests {
private static final String PRJ_NAME = "build";
public BuildChangeTests(String name) {
super(PLUGIN_ID, name);
}
private static final List<ChangeListener> changeListeners = new ArrayList<BuildChangeTests.ChangeListener>();
private static class ChangeListener implements IResourceChangeListener {
public ChangeListener() {
changeListeners.add(this);
getWorkspace().addResourceChangeListener(this,
IResourceChangeEvent.POST_CHANGE);
}
final List<IProjectChange> deltas = new ArrayList<IProjectChange>();
public void resourceChanged(IResourceChangeEvent event) {
final IResourceDelta delta = event.getDelta().findMember(
new Path(PRJ_NAME));
if (delta != null) {
final IncrementalProjectChange change = new IncrementalProjectChange(
delta, getProject(PRJ_NAME), new NullProgressMonitor());
deltas.add(change);
}
}
public void dispose() {
getWorkspace().removeResourceChangeListener(this);
changeListeners.remove(this);
}
public IProjectChange getChange() {
assertEquals(1, deltas.size());
return deltas.get(0);
}
}
@Override
protected void setUp() throws Exception {
super.setUp();
setUpProject(PRJ_NAME);
}
@Override
protected void tearDown() throws Exception {
for (ChangeListener changeListener : changeListeners
.toArray(new ChangeListener[changeListeners.size()])) {
changeListener.dispose();
}
changeListeners.clear();
deleteProject(PRJ_NAME);
super.tearDown();
}
public void testFileCreate() throws CoreException {
final ChangeListener listener = new ChangeListener();
getProject(PRJ_NAME).getFile("src/folder1/c.js").create(
new ByteArrayInputStream("var c=1".getBytes()), true, null);
final IProjectChange change = listener.getChange();
assertEquals(0, change.getRenames().size());
assertEquals(0, change.getDeletes(IProjectChange.DEFAULT).size());
assertEquals(1, change.getResources(IProjectChange.ALL).size());
assertEquals(1,
change.getResources(IProjectChange.ALL | IProjectChange.ADDED)
.size());
assertEquals(
0,
change.getResources(IProjectChange.ALL | IProjectChange.CHANGED)
.size());
assertEquals(0, change.getResources(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.ADDED).size());
assertEquals(0, change.getSourceModules(IProjectChange.CHANGED).size());
}
public void testMultipleFileCreate() throws CoreException {
final ChangeListener listener = new ChangeListener();
DLTKCore.run(new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
final IProject p = getProject(PRJ_NAME);
p.getFile("src/folder1/c.js").create(
new ByteArrayInputStream("var c=1".getBytes()), true,
null);
p.getFile("src/folder1/d.dat").create(
new ByteArrayInputStream("var c=1".getBytes()), true,
null);
}
}, null);
final IProjectChange change = listener.getChange();
assertEquals(0, change.getRenames().size());
assertEquals(0, change.getDeletes(IProjectChange.DEFAULT).size());
assertEquals(2, change.getResources(IProjectChange.ALL).size());
assertEquals(2,
change.getResources(IProjectChange.ALL | IProjectChange.ADDED)
.size());
assertEquals(
0,
change.getResources(IProjectChange.ALL | IProjectChange.CHANGED)
.size());
assertEquals(1, change.getResources(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.ADDED).size());
assertEquals(0, change.getSourceModules(IProjectChange.CHANGED).size());
}
public void testFileDelete() throws CoreException {
final ChangeListener listener = new ChangeListener();
getProject(PRJ_NAME).getFile("src/folder1/a.js").delete(true, null);
final IProjectChange change = listener.getChange();
assertEquals(0, change.getResources(IProjectChange.ALL).size());
assertEquals(0, change.getRenames().size());
final List<IPath> deletes = change.getDeletes(IProjectChange.DEFAULT);
assertEquals(1, deletes.size());
assertEquals("a.js", deletes.get(0).lastSegment());
}
public void testFolderDelete() throws CoreException {
final ChangeListener listener = new ChangeListener();
getProject(PRJ_NAME).getFolder("src/folder1").delete(true, null);
final IProjectChange change = listener.getChange();
assertEquals(0, change.getResources(IProjectChange.ALL).size());
assertEquals(0, change.getRenames().size());
final List<IPath> deletes = change.getDeletes(IProjectChange.DEFAULT);
assertEquals(2, deletes.size());
assertEquals("a.js", deletes.get(0).lastSegment());
assertEquals("b.js", deletes.get(1).lastSegment());
}
public void testMultipleFileDelete() throws CoreException {
final ChangeListener listener = new ChangeListener();
DLTKCore.run(new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
final IProject p = getProject(PRJ_NAME);
p.getFile("src/folder1/b.js").delete(true, null);
p.getFile("src/folder1/a.js").delete(true, null);
}
}, null);
final IProjectChange change = listener.getChange();
assertEquals(0, change.getResources(IProjectChange.ALL).size());
assertEquals(0, change.getRenames().size());
final List<IPath> deletes = change.getDeletes(IProjectChange.DEFAULT);
assertEquals(2, deletes.size());
assertEquals("a.js", deletes.get(0).lastSegment());
assertEquals("b.js", deletes.get(1).lastSegment());
}
public void testFileRename() throws CoreException {
final ChangeListener listener = new ChangeListener();
getProject(PRJ_NAME).getFile("src/folder1/a.js").move(new Path("c.js"),
true, null);
final IProjectChange change = listener.getChange();
assertEquals(1, change.getRenames().size());
assertEquals(1, change.getDeletes(IProjectChange.DEFAULT).size());
assertEquals(0, change.getDeletes(IProjectChange.NO_RENAMES).size());
assertEquals(1, change.getResources(IProjectChange.ALL).size());
assertEquals(1,
change.getResources(IProjectChange.ALL | IProjectChange.ADDED)
.size());
assertEquals(
0,
change.getResources(IProjectChange.ALL | IProjectChange.CHANGED)
.size());
assertEquals(0, change.getResources(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.DEFAULT).size());
assertEquals(1, change.getSourceModules(IProjectChange.ADDED).size());
assertEquals(0, change.getSourceModules(IProjectChange.CHANGED).size());
}
public void testFolderRename() throws CoreException {
final ChangeListener listener = new ChangeListener();
getProject(PRJ_NAME).getFolder("src/folder1").move(new Path("folder2"),
true, null);
final IProjectChange change = listener.getChange();
// System.out.println(change);
assertEquals(2, change.getRenames().size());
assertEquals(2, change.getDeletes(IProjectChange.DEFAULT).size());
assertEquals(0, change.getDeletes(IProjectChange.NO_RENAMES).size());
assertEquals(2, change.getResources(IProjectChange.ALL).size());
assertEquals(2,
change.getResources(IProjectChange.ALL | IProjectChange.ADDED)
.size());
assertEquals(
0,
change.getResources(IProjectChange.ALL | IProjectChange.CHANGED)
.size());
assertEquals(0, change.getResources(IProjectChange.DEFAULT).size());
assertEquals(2, change.getSourceModules(IProjectChange.DEFAULT).size());
assertEquals(2, change.getSourceModules(IProjectChange.ADDED).size());
assertEquals(0, change.getSourceModules(IProjectChange.CHANGED).size());
}
}