package com.google.dart.tools.core.internal.builder; import com.google.dart.engine.context.AnalysisContext; import com.google.dart.engine.context.ChangeSet; import com.google.dart.engine.index.Index; import com.google.dart.engine.sdk.DartSdk; import com.google.dart.tools.core.CallList; import com.google.dart.tools.core.analysis.model.PubFolder; import com.google.dart.tools.core.internal.analysis.model.ProjectImpl; import com.google.dart.tools.core.mock.MockContainer; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import static org.mockito.Mockito.mock; import java.io.File; /** * Specialized {@link ProjectImpl} that returns a mock context for recording what analysis is * requested rather than a context that would actually analyze the source. */ class DeltaProcessorMockProject extends ProjectImpl { private static final String DISCARD_CONTEXTS_IN = "discardContextsIn"; private static final String PUBSPEC_ADDED = "pubspecAdded"; private static final String PUBSPEC_REMOVED = "pubspecRemoved"; private final CallList calls = new CallList(); DeltaProcessorMockProject(IProject resource) { super(resource, mock(DartSdk.class), "sdk-id", mock(Index.class), new AnalysisContextFactory() { @Override public AnalysisContext createContext() { return new MockContext(); } }); } @Override public void discardContextsIn(IContainer container) { calls.add(this, DISCARD_CONTEXTS_IN, container); } @Override public void pubspecAdded(IContainer container) { calls.add(this, PUBSPEC_ADDED, container); } @Override public void pubspecRemoved(IContainer container) { calls.add(this, PUBSPEC_REMOVED, container); } void assertChanged(IContainer pubFolderResource, ChangeSet expected) { getContextFor(pubFolderResource).assertChanged(expected); } void assertChanged(IContainer pubFolderResource, File[] added, File[] changed, File[] removedFiles, File[] removedDirs) { getContextFor(pubFolderResource).assertChanged(added, changed, removedFiles, removedDirs); } void assertChanged(IContainer pubFolderResource, IResource[] added, IResource[] changed, IResource[] removed) { getContextFor(pubFolderResource).assertChanged(added, changed, removed); } void assertDiscardContextsIn(IContainer... expected) { for (IContainer container : expected) { calls.assertCall(this, DISCARD_CONTEXTS_IN, container); } } void assertNoCalls() { calls.assertNoCalls(); ((MockContext) getDefaultContext()).assertNoCalls(); for (PubFolder pubFolder : getPubFolders()) { ((MockContext) pubFolder.getContext()).assertNoCalls(); } } void assertPackagesRemoved(MockContainer pubContainer) { PubFolder pubFolder = getPubFolder(pubContainer); ChangeSet expected = new ChangeSet(); expected.removedContainer(pubFolder.getInvertedSourceContainer()); assertChanged(pubContainer, expected); } void assertPubspecAdded(IContainer... expected) { for (IContainer container : expected) { calls.assertCall(this, PUBSPEC_ADDED, container); } } void assertPubspecRemoved(IContainer... expected) { for (IContainer container : expected) { calls.assertCall(this, PUBSPEC_REMOVED, container); } } private MockContext getContextFor(IContainer pubFolderResource) { MockContext context; if (pubFolderResource != null) { PubFolder pubFolder = getPubFolder(pubFolderResource); DeltaProcessorTest.assertNotNull(pubFolder); DeltaProcessorTest.assertSame(pubFolderResource, pubFolder.getResource()); context = (MockContext) pubFolder.getContext(); } else { PubFolder pubFolder = getPubFolder(getResource()); DeltaProcessorTest.assertNull(pubFolder); context = (MockContext) getDefaultContext(); } return context; } }