public void ProjectManager_Changed_DocumentAdded_InvokesGetOrCreateDocument()
        {
            // Arrange
            var changedOnDisk   = new EventHandler((o, args) => { });
            var changedInEditor = new EventHandler((o, args) => { });
            var opened          = new EventHandler((o, args) => { });
            var closed          = new EventHandler((o, args) => { });

            var editorDocumentManger = new Mock <EditorDocumentManager>(MockBehavior.Strict);

            editorDocumentManger
            .Setup(e => e.GetOrCreateDocument(It.IsAny <DocumentKey>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>()))
            .Returns(GetEditorDocument())
            .Callback <DocumentKey, EventHandler, EventHandler, EventHandler, EventHandler>((key, onChangedOnDisk, onChangedInEditor, onOpened, onClosed) =>
            {
                Assert.Same(changedOnDisk, onChangedOnDisk);
                Assert.Same(changedInEditor, onChangedInEditor);
                Assert.Same(opened, onOpened);
                Assert.Same(closed, onClosed);
            });

            var listener = new EditorDocumentManagerListener(
                Dispatcher, JoinableTaskFactory.Context, editorDocumentManger.Object, changedOnDisk, changedInEditor, opened, closed);

            var project = Mock.Of <ProjectSnapshot>(p => p.FilePath == "/Path/to/project.csproj", MockBehavior.Strict);

            // Act & Assert
            listener.ProjectManager_Changed(null, new ProjectChangeEventArgs(project, project, ProjectChangeKind.DocumentAdded));
        }
        public void ProjectManager_Changed_OpenDocumentAdded_InvokesOnOpened()
        {
            // Arrange
            var called = false;
            var opened = new EventHandler((o, args) => { called = true; });

            var editorDocumentManger = new Mock <EditorDocumentManager>(MockBehavior.Strict);

            editorDocumentManger
            .Setup(e => e.GetOrCreateDocument(It.IsAny <DocumentKey>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>()))
            .Returns(GetEditorDocument(isOpen: true));

            var listener = new EditorDocumentManagerListener(editorDocumentManger.Object, onChangedOnDisk: null, onChangedInEditor: null, onOpened: opened, onClosed: null);

            // Act
            listener.ProjectManager_Changed(null, new ProjectChangeEventArgs("/Path/to/project.csproj", ProjectChangeKind.DocumentAdded));

            // Assert
            Assert.True(called);
        }
        public void ProjectManager_Changed_OpenDocumentAdded_InvokesOnOpened()
        {
            // Arrange
            var called = false;
            var opened = new EventHandler((o, args) => called = true);

            var editorDocumentManger = new Mock <EditorDocumentManager>(MockBehavior.Strict);

            editorDocumentManger
            .Setup(e => e.GetOrCreateDocument(It.IsAny <DocumentKey>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>(), It.IsAny <EventHandler>()))
            .Returns(GetEditorDocument(isOpen: true));

            var listener = new EditorDocumentManagerListener(
                Dispatcher, JoinableTaskFactory.Context, editorDocumentManger.Object, onChangedOnDisk: null, onChangedInEditor: null, onOpened: opened, onClosed: null);

            var project = Mock.Of <ProjectSnapshot>(p => p.FilePath == "/Path/to/project.csproj", MockBehavior.Strict);

            // Act
            listener.ProjectManager_Changed(null, new ProjectChangeEventArgs(project, project, ProjectChangeKind.DocumentAdded));

            // Assert
            Assert.True(called);
        }