/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.core.internal.builder;
import com.google.dart.tools.core.AbstractDartCoreTest;
import com.google.dart.tools.core.mock.MockContainer;
import com.google.dart.tools.core.mock.MockDelta;
import com.google.dart.tools.core.mock.MockFile;
import com.google.dart.tools.core.mock.MockFolder;
import com.google.dart.tools.core.mock.MockProject;
import com.google.dart.tools.core.mock.MockResource;
import static com.google.dart.tools.core.DartCore.BUILD_DART_FILE_NAME;
import static com.google.dart.tools.core.DartCore.PACKAGES_DIRECTORY_NAME;
import static com.google.dart.tools.core.DartCore.PUBSPEC_FILE_NAME;
import org.eclipse.core.resources.IResource;
import static org.eclipse.core.resources.IResourceDelta.ADDED;
import static org.eclipse.core.resources.IResourceDelta.REMOVED;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class DeltaProcessorTest extends AbstractDartCoreTest {
private MockProject projectContainer;
private MockFolder appContainer;
private MockFolder subAppContainer;
private DeltaProcessorMockProject project;
public void test_traverse_defaultContext_file_changed() throws Exception {
projectContainer.remove(PUBSPEC_FILE_NAME);
((MockContext) project.getDefaultContext()).assertExtracted(appContainer);
MockDelta delta = new MockDelta(projectContainer);
MockFile file = projectContainer.getMockFile("some.dart");
delta.add(file);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
((MockContext) project.getPubFolder(appContainer).getContext()).assertNoCalls();
project.assertChanged(null, null, new IResource[] {file}, null);
project.assertNoCalls();
}
public void test_traverse_folder2Added() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(appContainer, ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
MockFolder libContainer = appContainer.getMockFolder("lib");
IResource[] resources1 = {
appContainer.getFile(BUILD_DART_FILE_NAME), appContainer.getFile("other.dart"),
libContainer.getFile("stuff.dart"), subAppContainer.getFile("sub_stuff.dart")};
project.assertChanged(projectContainer, resources1, null, null);
project.assertPubspecAdded(appContainer, subAppContainer);
project.assertPubspecRemoved();
project.assertDiscardContextsIn();
project.assertNoCalls();
}
public void test_traverse_folder2Removed() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(appContainer, REMOVED);
projectContainer.remove(appContainer.getName());
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, null, new IResource[] {appContainer});
project.assertPubspecAdded();
project.assertPubspecRemoved();
project.assertDiscardContextsIn(appContainer);
project.assertNoCalls();
}
public void test_traverse_html_file() throws Exception {
MockFile file = projectContainer.getMockFile("some.html");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(file);
updater.applyChanges();
project.assertChanged(projectContainer, new IResource[] {file}, null, null);
project.assertNoCalls();
}
public void test_traverse_html_file_added() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockFile file = projectContainer.getMockFile("some.html");
delta.add(file, ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, new IResource[] {file}, null, null);
project.assertNoCalls();
}
public void test_traverse_html_file_changed() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockFile file = projectContainer.getMockFile("some.html");
delta.add(file);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, new IResource[] {file}, null);
project.assertNoCalls();
}
public void test_traverse_html_file_removed() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockResource file = projectContainer.remove("some.html");
delta.add(file, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, null, new IResource[] {file});
project.assertNoCalls();
}
public void test_traverse_ignored_file_change() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(".svn").add("foo.dart");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertNoCalls();
}
public void test_traverse_ignored_folder() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(".svn", REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertNoCalls();
}
public void test_traverse_package_added() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(PACKAGES_DIRECTORY_NAME).add("pkg1", ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = packages.getMockFolder("pkg1");
MockFolder pkgFolder = pkg1.getMockFolder("some_folder");
IResource[] added = new IResource[] {
pkg1.getMockFile("bar.dart"), pkg1.getMockFile("build.dart"),
pkgFolder.getMockFile("bar.dart"), pkgFolder.getMockFile("build.dart")};
project.assertChanged(projectContainer, added, null, null);
project.assertNoCalls();
}
public void test_traverse_package_file_added() throws Exception {
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = packages.getMockFolder("pkg1");
MockFile file = pkg1.getMockFile("bar.dart");
// Also test that delta processor handles deltas starting at the "packages" directory
// similar to what WorkspaceDeltaProcessor will pass to the DeltaProcessor
MockDelta delta = new MockDelta(packages);
delta.add("pkg1").add("bar.dart", ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, new IResource[] {file}, null, null);
project.assertNoCalls();
}
public void test_traverse_package_file_added2() throws Exception {
projectContainer.remove(PUBSPEC_FILE_NAME);
// Create delta with a added file in pkg1
MockFolder myApp = projectContainer.getMockFolder("myapp");
MockFolder packages = myApp.addFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = packages.addFolder("pkg1");
MockFile file = pkg1.addFile("bar.dart");
MockDelta delta = new MockDelta(projectContainer);
delta.add(myApp).add(PACKAGES_DIRECTORY_NAME).add("pkg1").add("bar.dart", ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(myApp, new IResource[] {file}, null, null);
}
public void test_traverse_package_file_changed() throws Exception {
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = packages.getMockFolder("pkg1");
MockFile file = pkg1.getMockFile("bar.dart");
MockDelta delta = new MockDelta(projectContainer);
delta.add(PACKAGES_DIRECTORY_NAME).add("pkg1").add("bar.dart");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, new IResource[] {file}, null);
project.assertNoCalls();
}
public void test_traverse_package_file_removed() throws Exception {
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg = packages.getMockFolder("pkg1");
MockFile file = (MockFile) pkg.remove("bar.dart");
MockDelta delta = new MockDelta(projectContainer);
delta.add(PACKAGES_DIRECTORY_NAME).add("pkg1").add(file, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, null, new IResource[] {file});
project.assertNoCalls();
}
public void test_traverse_package_removed() throws Exception {
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = (MockFolder) packages.remove("pkg1");
MockDelta delta = new MockDelta(projectContainer);
delta.add(PACKAGES_DIRECTORY_NAME).add(pkg1, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertPackagesRemoved(projectContainer);
project.assertNoCalls();
}
public void test_traverse_packages_added() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(PACKAGES_DIRECTORY_NAME, ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
MockFolder packages = projectContainer.getMockFolder(PACKAGES_DIRECTORY_NAME);
MockFolder pkg1 = packages.getMockFolder("pkg1");
MockFolder pkgFolder = pkg1.getMockFolder("some_folder");
IResource[] added = new IResource[] {
pkg1.getMockFile("bar.dart"), pkg1.getMockFile("build.dart"),
pkgFolder.getMockFile("bar.dart"), pkgFolder.getMockFile("build.dart")};
project.assertChanged(projectContainer, added, null, null);
project.assertNoCalls();
}
public void test_traverse_packages_removed() throws Exception {
MockFolder packages = (MockFolder) projectContainer.remove(PACKAGES_DIRECTORY_NAME);
MockDelta delta = new MockDelta(projectContainer);
delta.add(packages, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertPackagesRemoved(projectContainer);
project.assertNoCalls();
}
public void test_traverse_packages_removed_inSimpleProject() throws Exception {
projectContainer = TestProjects.newSimpleProjectWithPackages();
project = new DeltaProcessorMockProject(projectContainer);
MockFolder packages = (MockFolder) projectContainer.remove(PACKAGES_DIRECTORY_NAME);
MockDelta delta = new MockDelta(projectContainer);
delta.add(packages, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertDiscardContextsIn(packages);
project.assertChanged(null, null, null, new IResource[] {packages});
project.assertNoCalls();
}
public void test_traverse_project_file() throws Exception {
MockFile file = projectContainer.getMockFile("some.dart");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(file);
updater.applyChanges();
project.assertChanged(projectContainer, new IResource[] {file}, null, null);
project.assertNoCalls();
}
public void test_traverse_project_file_added() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockFile file = projectContainer.getMockFile("some.dart");
delta.add(file, ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, new IResource[] {file}, null, null);
project.assertNoCalls();
}
public void test_traverse_project_file_changed() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockFile file = projectContainer.getMockFile("some.dart");
delta.add(file);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, new IResource[] {file}, null);
project.assertNoCalls();
}
public void test_traverse_project_file_removed() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
MockResource file = projectContainer.remove("some.dart");
delta.add(file, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, null, new IResource[] {file});
project.assertNoCalls();
}
public void test_traverse_project_removed() throws Exception {
MockDelta delta = new MockDelta(projectContainer, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
DeltaListener mockListener = mock(DeltaListener.class);
processor.addDeltaListener(updater);
processor.addDeltaListener(mockListener);
processor.traverse(delta);
updater.applyChanges();
project.assertDiscardContextsIn(projectContainer);
project.assertNoCalls();
verify(mockListener).visitContext(any(ResourceDeltaEvent.class));
}
public void test_traverse_pubspecAdded() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add(PUBSPEC_FILE_NAME, ADDED);
project.assertPubspecAdded();
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertPubspecAdded(projectContainer);
project.assertNoCalls();
}
public void test_traverse_pubspecRemoved() throws Exception {
project.getDefaultContext(); // force project initialization
MockDelta delta = new MockDelta(projectContainer);
delta.add(PUBSPEC_FILE_NAME, REMOVED);
projectContainer.remove(PUBSPEC_FILE_NAME);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertPubspecRemoved(projectContainer);
project.assertNoCalls();
}
public void test_traverse_subpackage_ignored_file() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add("web").add(PACKAGES_DIRECTORY_NAME).add("pkg1").add("bar.dart");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertNoCalls();
}
public void test_traverse_subpackage_ignored_folder() throws Exception {
MockDelta delta = new MockDelta(projectContainer);
delta.add("web").add(PACKAGES_DIRECTORY_NAME).add("pkg1", ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertNoCalls();
}
public void test_traverse_web() throws Exception {
projectContainer.remove(PUBSPEC_FILE_NAME);
((MockContext) project.getDefaultContext()).clearCalls();
MockFolder web = projectContainer.getMockFolder("web");
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(web);
updater.applyChanges();
IResource[] added = new IResource[] {
web.getFile("other.dart"), web.getMockFolder("sub").getFile("cool.dart")};
project.assertChanged(null, added, null, null);
project.assertNoCalls();
}
public void test_traverse_web_added() throws Exception {
MockFolder web = projectContainer.getMockFolder("web");
MockDelta delta = new MockDelta(projectContainer);
delta.add(web, ADDED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
IResource[] added = new IResource[] {
web.getFile("other.dart"), web.getMockFolder("sub").getFile("cool.dart")};
project.assertChanged(projectContainer, added, null, null);
project.assertNoCalls();
}
public void test_traverse_web_removed() throws Exception {
project.getDefaultContext(); // force project initialization
MockContainer web = (MockContainer) projectContainer.remove("web");
MockDelta delta = new MockDelta(projectContainer);
delta.add(web, REMOVED);
DeltaProcessor processor = new DeltaProcessor(project);
ProjectUpdater updater = new ProjectUpdater();
processor.addDeltaListener(updater);
processor.traverse(delta);
updater.applyChanges();
project.assertChanged(projectContainer, null, null, new IResource[] {web});
project.assertDiscardContextsIn(web);
project.assertNoCalls();
}
@Override
protected void setUp() throws Exception {
projectContainer = TestProjects.newPubProject3();
appContainer = projectContainer.getMockFolder("myapp");
subAppContainer = appContainer.getMockFolder("subApp");
project = new DeltaProcessorMockProject(projectContainer);
}
}