public void SettingPinOrderRaisesIsPinnedPropertyChanged( int initialPinOrder, int newPinOrder, bool shouldRaisePropertyChanged) { // Arrange var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { PinOrder = initialPinOrder }; var handler = new PropertyChangedEventHandler((s, e) => { if (e.PropertyName == nameof(DocumentMetadata.IsPinned)) { propertyChangedRaised = true; } }); metadata.PropertyChanged += handler; // Act metadata.PinOrder = newPinOrder; metadata.PropertyChanged -= handler; // Assert Assert.That(propertyChangedRaised, Is.EqualTo(shouldRaisePropertyChanged)); }
public void SettingProjectBrushToDifferentValueRaisesPropertyChanged() { // Arrange var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { ProjectBrush = Brushes.MidnightBlue }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.ProjectBrush = Brushes.White; metadata.PropertyChanged -= handler; // Assert Assert.IsTrue(propertyChangedRaised); }
public void SettingDisplayNameToDifferentValueRaisesPropertyChanged() { // Arrange var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { DisplayName = "DisplayName" }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.DisplayName = "NewDisplayName"; metadata.PropertyChanged -= handler; // Assert Assert.IsTrue(propertyChangedRaised); }
public void CreateWithInfoAndActivatedTimeSetsProjectBrush() { // Arrange var projectBrush = Brushes.MidnightBlue; var info = new DocumentMetadataInfo(); var builder = new DocumentMetadataFactoryBuilder(); builder.ProjectBrushServiceMock .Setup(p => p.GetBrush( It.IsAny <string>(), It.IsAny <IUserPreferences>())) .Returns(projectBrush); var factory = builder.CreateDocumentMetadataFactory(true); // Act var metadata = factory.Create(info, DateTime.UtcNow); // Assert Assert.That(metadata.ProjectBrush, Is.EqualTo(projectBrush)); }
public void SettingUsageOrderToSameValueDoesNotRaisePropertyChanged() { // Arrange const double value = 0.7; var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { UsageOrder = value }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.UsageOrder = value; metadata.PropertyChanged -= handler; // Assert Assert.IsFalse(propertyChangedRaised); }
public void WindowCreated(Window window) { if (window.Type == vsWindowType.vsWindowTypeDocument && window.Document.ActiveWindow != null) { if (_documentMetadataManager.ActiveDocumentMetadata.IsEmpty) { _documentMetadataManager.Synchronize(window.DTE.Documents, false); } else { var info = new DocumentMetadataInfo { FullName = window.Document.FullName, ProjectDisplayName = window.Document.ProjectItem.ContainingProject.Name, ProjectFullName = window.Document.ProjectItem.ContainingProject.FullName }; _documentMetadataManager.Add(info); } _documentMetadataManager.Activate(window.Document.FullName); } }
public void CreateWithInfoAndActivatedTimeUsesFilePathServiceToSetDisplayName() { // Arrange const string filePathServiceOutput = "FilePathServiceOutput"; var info = new DocumentMetadataInfo(); var builder = new DocumentMetadataFactoryBuilder(); builder.FilePathServiceMock .Setup(f => f.ReducePath( It.IsAny <string>(), It.IsAny <int>())) .Returns(filePathServiceOutput); var factory = builder.CreateDocumentMetadataFactory(true); // Act var metadata = factory.Create(info, DateTime.UtcNow); // Assert Assert.That(metadata.DisplayName, Is.EqualTo(filePathServiceOutput)); }
public void ExecuteActivatesDocumentWindowForEvaluatedTestFile() { // Arrange const string fullName = "FullName"; const string testFileName = "TestFileName"; var info = new DocumentMetadataInfo { FullName = fullName }; var windowMock = new Mock <Window>(); var evaluator = Mock.Of <ITestFileNameEvaluator>(t => t.EvaluateTestFileName(fullName) == testFileName); var projectItemService = Mock.Of <IProjectItemService>(s => s.FindProjectItem(testFileName) == Mock.Of <ProjectItem>(p => p.Open(Constants.vsViewKindCode) == windowMock.Object)); var builder = new DocumentMetadataFactoryBuilder(); var factory = builder.CreateDocumentMetadataFactory(true); var metadata = factory.Create(info); var command = new OpenTestFile(projectItemService, evaluator); // Act command.Execute(metadata); // Assert windowMock.Verify(w => w.Activate()); }
public void ExecuteDoesNotThrowExceptionWithNullProjectItem() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName" }; var projectItemServiceMock = new Mock <IProjectItemService>(); projectItemServiceMock .Setup(s => s.FindProjectItem(It.IsAny <string>())) .Returns <ProjectItem>(null); var builder = new DocumentMetadataFactoryBuilder(); var factory = builder.CreateDocumentMetadataFactory(true); var metadata = factory.Create(info); var command = new OpenTestFile( projectItemServiceMock.Object, Mock.Of <ITestFileNameEvaluator>()); // Act, Assert Assert.DoesNotThrow(() => command.Execute(metadata)); }
public void ExecuteSynchronizesDocumentsIfNoWindowActivated() { // Arrange var info = new DocumentMetadataInfo { FullName = "DocumentName" }; var documentMockList = new List <Document>(); var documents = CreateDocuments(documentMockList); var dte2 = Mock.Of <DTE2>(d => d.Documents == documents && d.Solution == Mock.Of <Solution>()); var builder = new DocumentMetadataFactoryBuilder(); var factory = builder.CreateDocumentMetadataFactory(true); var metadata = factory.Create(info); var documentMetadataManager = Mock.Of <IDocumentMetadataManager>(); var command = CreateActivateWindow(dte2, documentMetadataManager); // Act command.Execute(metadata); // Assert Mock.Get(documentMetadataManager).Verify(d => d.Synchronize(documents, true)); }
/// <summary> /// Creates a new <see cref="DocumentMetadata"/>, setting /// <see cref="DocumentMetadata.ActivatedAt"/> at the current time in UTC /// </summary> /// <param name="info"> /// Information about the document's full name and containing project /// </param> /// <returns>A new <see cref="DocumentMetadata"/> instance</returns> public DocumentMetadata Create(DocumentMetadataInfo info) { var utcNow = _timeProvider.UtcNow; var metadata = Create(info, utcNow); return(metadata); }
private static DocumentMetadata CreateDocumentMetadata() { var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null); return(metadata); }
public void SettingReorderingDirectionToDifferentValueRaisesPropertyChanged() { // Arrange var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { ReorderingDirection = Direction.None }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.ReorderingDirection = Direction.Up; metadata.PropertyChanged -= handler; // Assert Assert.IsTrue(propertyChangedRaised); }
public void SettingReorderingDirectionToSameValueDoesNotRaisePropertyChanged() { // Arrange const Direction reorderingDirection = Direction.Up; var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { ReorderingDirection = reorderingDirection }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.ReorderingDirection = reorderingDirection; metadata.PropertyChanged -= handler; // Assert Assert.IsFalse(propertyChangedRaised); }
public void UpdatingPathSegmentCountUpdatesDisplayName() { // Arrange var info = new DocumentMetadataInfo { FullName = @"C:\Folder\Document.txt" }; var builder = new DocumentMetadataManagerBuilder(); builder.UserPreferencesBuilder.StoredSettingsRepositoryMock .Setup(s => s.GetPathSegmentCount()) .Returns(1); var manager = builder.CreateDocumentMetadataManager(); manager.Add(info); // Act builder.UserPreferences.PathSegmentCount = 3; // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].DisplayName, Is.EqualTo(info.FullName)); }
public void CreateWithInfoUsesFilePathServiceToSetDisplayName() { // Arrange const string filePathServiceOutput = "Output"; const string preHighlightSuffix = "[PreHighlight]"; const string highlightSuffix = "[Highlight]"; const string postHighlightSuffix = "[PostHighlight]"; var info = new DocumentMetadataInfo(); var builder = new DocumentMetadataFactoryBuilder(); builder.FilePathServiceMock .Setup(f => f.ReducePath( It.IsAny <string>(), It.IsAny <int>())) .Returns(filePathServiceOutput); builder.DisplayNameHighlightEvaluatorMock .Setup(d => d.GetPreHighlight( It.IsAny <string>(), It.IsAny <bool>())) .Returns <string, bool>((str, b) => str + preHighlightSuffix); builder.DisplayNameHighlightEvaluatorMock .Setup(d => d.GetHighlight( It.IsAny <string>(), It.IsAny <bool>())) .Returns <string, bool>((str, b) => str + highlightSuffix); builder.DisplayNameHighlightEvaluatorMock .Setup(d => d.GetPostHighlight( It.IsAny <string>(), It.IsAny <bool>())) .Returns <string, bool>((str, b) => str + postHighlightSuffix); var factory = builder.CreateDocumentMetadataFactory(true); // Act var metadata = factory.Create(info); // Assert builder.DisplayNameHighlightEvaluatorMock.Verify(d => d.GetPreHighlight(filePathServiceOutput, It.IsAny <bool>())); builder.DisplayNameHighlightEvaluatorMock.Verify(d => d.GetHighlight(filePathServiceOutput, It.IsAny <bool>())); builder.DisplayNameHighlightEvaluatorMock.Verify(d => d.GetPostHighlight(filePathServiceOutput, It.IsAny <bool>())); var expected = $"{filePathServiceOutput}{preHighlightSuffix}" + $"{filePathServiceOutput}{highlightSuffix}" + $"{filePathServiceOutput}{postHighlightSuffix}"; Assert.That(metadata.DisplayName, Is.EqualTo(expected)); }
public void AddDoesNotAppendDocumentMetadataToListIfFullPathAlreadyExist() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName" }; var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Act manager.Add(info); manager.Add(info); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].FullName, Is.EqualTo(info.FullName)); }
public void CreateSetsDisplayNamePreHighlight() { // Arrange const string preHighlight = "PreHighlight"; var info = new DocumentMetadataInfo(); var builder = new DocumentMetadataFactoryBuilder(); builder.DisplayNameHighlightEvaluatorMock .Setup(d => d.GetPreHighlight( It.IsAny <string>(), It.IsAny <bool>())) .Returns(preHighlight); var factory = builder.CreateDocumentMetadataFactory(true); // Act var metadata = factory.Create(info); // Assert Assert.That(metadata.DisplayNamePreHighlight, Is.EqualTo(preHighlight)); }
public void CorrectedFullNameEqualsPathCasingRestorerOutput() { // Arrange const string correctedCasing = "FullName"; const string lowerCase = "fullname"; var builder = new DocumentMetadataFactoryBuilder(); builder.PathCasingRestorerMock .Setup(p => p.RestoreCasing(lowerCase)) .Returns(correctedCasing); var factory = builder.CreateDocumentMetadataFactory(false); var info = new DocumentMetadataInfo { FullName = lowerCase }; // Act var metadata = factory.Create(info); // Assert builder.PathCasingRestorerMock.Verify(p => p.RestoreCasing(lowerCase)); Assert.That(metadata.CorrectedFullName, Is.EqualTo(correctedCasing)); }
public void CreatingDocumentWindowWithNonEmptyMetadataCollectionAddsAndActivatesDocument() { // Arrange const string documentFullName = "DocumentFullName"; var info = new DocumentMetadataInfo { FullName = documentFullName, ProjectDisplayName = "ProjectDisplayName", ProjectFullName = "ProjectFullName" }; var metadataManagerMock = new Mock <IDocumentMetadataManager>(); metadataManagerMock.Setup(m => m.ActiveDocumentMetadata.IsEmpty).Returns(false); var service = new WindowEventsService(metadataManagerMock.Object); var document = CreateDocumentWithInfo(info); var created = Mock.Of <Window>(w => w.Type == vsWindowType.vsWindowTypeDocument && w.Document == document); // Act service.WindowCreated(created); // Assert metadataManagerMock.Verify(m => m.Add(info)); metadataManagerMock.Verify(m => m.Activate(documentFullName)); }
public void CreatePassesPathSegmentCountFromUserPreferencesToFilePathService() { // Arrange const int pathSegmentCount = 7; var info = new DocumentMetadataInfo(); var builder = new DocumentMetadataFactoryBuilder { UserPreferences = Mock.Of <IUserPreferences>(u => u.PathSegmentCount == pathSegmentCount) }; var factory = builder.CreateDocumentMetadataFactory(true); // Act factory.Create(info); // Assert builder.FilePathServiceMock.Verify(f => f.ReducePath( It.IsAny <string>(), pathSegmentCount)); }
private void Add(DocumentMetadataInfo info, bool isPinned) { var metadata = _activeDocumentMetadata.FirstOrDefault(m => _metadataEqualityService.Compare(info, m)); var exists = metadata != null; if (!exists) { metadata = _documentMetadataFactory.Create(info); _activeDocumentMetadata.Add(metadata); } metadata.HasWindow = !isPinned || exists; if (isPinned) { TogglePinnedStatus(metadata); } if (!isPinned || !exists) { ActiveDocumentMetadata.Refresh(); } }
public void CreateSetsMetadataIcon() { // Arrange const string extension = ".extension"; var info = new DocumentMetadataInfo { FullName = $"FullName{extension}" }; var builder = new DocumentMetadataFactoryBuilder(); var icon = Mock.Of <BitmapSource>(); builder.DocumentIconServiceMock .Setup(d => d.GetIcon(extension)) .Returns(icon); var factory = builder.CreateDocumentMetadataFactory(true); // Act var metadata = factory.Create(info); // Assert builder.DocumentIconServiceMock.Verify(d => d.GetIcon(extension)); Assert.That(metadata.Icon, Is.EqualTo(icon)); }
public void CollectionUpdateUsesFilePathService() { // Arrange const int pathSegmentCount = 7; const string correctedName = "CorrectedName"; var filePathServiceMock = new Mock <IFilePathService>(); var preferences = Mock.Of <IUserPreferences>(u => u.PathSegmentCount == pathSegmentCount); var updateReaction = new PathSegmentCountReaction( filePathServiceMock.Object); var info = new DocumentMetadataInfo(); var metadataList = new List <DocumentMetadata> { new DocumentMetadata(info, correctedName, null) }; var view = new ListCollectionView(metadataList); // Act updateReaction.UpdateCollection(view, preferences); // Assert filePathServiceMock.Verify(f => f.ReducePath( correctedName, pathSegmentCount)); }
public void SettingUsageOrderToDifferentValueRaisesPropertyChanged() { // Arrange var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { UsageOrder = 0.3 }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.UsageOrder = 0.7; metadata.PropertyChanged -= handler; // Assert Assert.IsTrue(propertyChangedRaised); }
public IList <DocumentMetadataInfo> Read(string fullName) { var invalid = string.IsNullOrWhiteSpace(fullName); if (invalid) { throw new ArgumentException($"'{fullName}' is not valid"); } var path = GetDerivedPath(fullName); using (var reader = _ioService.GetReader(path)) { DocumentMetadataInfo[] data; if (reader == null) { data = new DocumentMetadataInfo[0]; } else { var savedJson = reader.ReadToEnd(); data = JsonConvert.DeserializeObject <DocumentMetadataInfo[]>(savedJson); } return(data); } }
public void SettingDisplayNameToSameValueDoesNotRaisePropertyChanged() { // Arrange const string displayName = "DisplayName"; var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { DisplayName = displayName }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.DisplayName = displayName; metadata.PropertyChanged -= handler; // Assert Assert.IsFalse(propertyChangedRaised); }
public void AddUsesDocumentMetadataFactory() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName", ProjectDisplayName = "ProjectDisplayName", ProjectFullName = "ProjectFullName" }; var factoryMock = new Mock <IDocumentMetadataFactory>(); factoryMock .Setup(f => f.Create(info)) .Returns(new DocumentMetadata(info, string.Empty, null)); var builder = new DocumentMetadataManagerBuilder { DocumentMetadataFactory = factoryMock.Object }; var manager = builder.CreateDocumentMetadataManager(); // Act manager.Add(info); // Assert factoryMock.Verify(p => p.Create(info)); }
public void SettingIsActiveToSameValueDoesNotRaisePropertyChanged() { // Arrange const bool isActive = true; var propertyChangedRaised = false; var info = new DocumentMetadataInfo(); var metadata = new DocumentMetadata(info, string.Empty, null) { IsActive = isActive }; var handler = new PropertyChangedEventHandler((s, e) => { propertyChangedRaised = true; }); metadata.PropertyChanged += handler; // Act metadata.IsActive = isActive; metadata.PropertyChanged -= handler; // Assert Assert.IsFalse(propertyChangedRaised); }
public void ComparePerformsCaseInsensitiveMatchForInfoProperties() { // Arrange var infoLower = new DocumentMetadataInfo { FullName = "fullname", ProjectDisplayName = "projectdisplayname", ProjectFullName = "projectfullname" }; var infoUpper = new DocumentMetadataInfo { FullName = "FULLNAME", ProjectDisplayName = "PROJECTDISPLAYNAME", ProjectFullName = "PROJECTFULLNAME" }; var metadata = new DocumentMetadata(infoLower, null, null); var service = new DocumentMetadataEqualityService(); // Act var isEqual = service.Compare(infoUpper, metadata); // Assert Assert.IsTrue(isEqual); }