Esempio n. 1
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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());
        }
Esempio n. 9
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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));
        }
Esempio n. 16
0
        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));
        }
Esempio n. 18
0
        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));
        }
Esempio n. 19
0
        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));
        }
Esempio n. 21
0
        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();
            }
        }
Esempio n. 23
0
        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));
        }
Esempio n. 24
0
        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);
        }
Esempio n. 30
0
        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);
        }