public void ShouldDispatchOnlyToMatchingSynchers() { TestableProjectLinkTracker tracker = new TestableProjectLinkTracker(new MockDocumentTracker(), new MockIVsSolution()); var project1 = new MockVsHierarchy(); var project2 = new MockVsHierarchy(); var project3 = new MockVsHierarchy(); MockProjectItemsSyncer syncherMatching = new MockProjectItemsSyncer(project1.GetPropertyProjectValue, project2.GetPropertyProjectValue); MockProjectItemsSyncer syncherNonMatching = new MockProjectItemsSyncer(project3.GetPropertyProjectValue, project2.GetPropertyProjectValue); tracker.AddProjectSyncer(syncherMatching); tracker.AddProjectSyncer(syncherNonMatching); tracker.OnAfterAddFilesEx(1, 1, new[] { project1 }, new[] { 0 }, new[] { "File1.txt" }, new[] { VSADDFILEFLAGS.VSADDFILEFLAGS_NoFlags }); Assert.IsTrue(syncherMatching.FilesAddedToSourceCalled); Assert.IsFalse(syncherNonMatching.FilesAddedToSourceCalled); }