public void StartFileWatcher_FileRenamed_CreatesNewDestinationFile()
        {
            var compilerMock = new Mock <ICompiler>();

            try
            {
                // Arrange
                InitialiseTestEnvironment();
                string _renameFileScssOldFileName = "rename.scss";
                string _renameFileScssNewFileName = "renameNew.scss";

                compilerMock.Setup(o => o.Compile(It.IsAny <string>()));
                WriteScssFile(Path.Combine(_testSourcePath, _renameFileScssOldFileName));
                var watcher = new SassFileWatcher(_testOptions, compilerMock.Object);
                watcher.StartFileWatcher();

                // Act
                var oldPath = Path.Combine(_testSourcePath, _renameFileScssOldFileName);
                var newPath = Path.Combine(_testSourcePath, _renameFileScssNewFileName);
                File.Move(oldPath, newPath);

                // Give the file system a second to catch up
                Thread.Sleep(200);

                watcher.StopFileWatcher();
            }
            finally
            {
                CleanUpTestEnvironment();
            }
            // Assert
            compilerMock.Verify(o => o.Compile(It.IsAny <string>()), Times.Once);
        }
        public void StartFileWatcher_FileUpdated_UpdatesDestinationFile()
        {
            var compilerMock = new Mock <ICompiler>();

            try
            {
                // Arrange
                InitialiseTestEnvironment();
                string _updateContentsScssFileName = "update.scss";

                compilerMock.Setup(o => o.Compile(It.IsAny <string>()));
                WriteScssFile(Path.Combine(_testSourcePath, _updateContentsScssFileName));
                var watcher = new SassFileWatcher(_testOptions, compilerMock.Object);
                watcher.StartFileWatcher();

                // Act
                WriteScssFile(Path.Combine(_testSourcePath, _updateContentsScssFileName), @"body {  
color: blue;
}");
                // Give the file system a second to catch up
                Thread.Sleep(200);

                watcher.StopFileWatcher();
            }
            finally
            {
                CleanUpTestEnvironment();
            }
            // Assert
            compilerMock.Verify(o => o.Compile(It.IsAny <string>()), Times.Once);
        }
        public void StartFileWatcher_CompileOnStartTrue_CallsICompilerCompileMethod()
        {
            // Arrange
            InitialiseTestEnvironment();
            var compilerMock = new Mock <ICompiler>();

            compilerMock.Setup(o => o.Compile(It.IsAny <string>()));
            var options = new SassFileWatcherOptions {
                SourcePath = _testOptions.SourcePath, CompileOnStart = true
            };
            var sassWatcher = new SassFileWatcher(options, compilerMock.Object);

            // Act
            sassWatcher.StartFileWatcher();
            sassWatcher.StopFileWatcher();

            CleanUpTestEnvironment();
            // Assert
            compilerMock.Verify(o => o.Compile(It.IsAny <string>()), Times.Once);
        }
        public void StartFileWatcher_CompileOnStartFalse_DoesNotCallICompilerCompileMethod()
        {
            var compilerMock = new Mock <ICompiler>();

            try
            {
                // Arrange
                InitialiseTestEnvironment();
                compilerMock.Setup(o => o.Compile(It.IsAny <string>()));
                var sassWatcher = new SassFileWatcher(_testOptions, compilerMock.Object);

                // Act
                sassWatcher.StartFileWatcher();
                sassWatcher.StopFileWatcher();
            }
            finally
            {
                CleanUpTestEnvironment();
            }
            // Assert
            compilerMock.Verify(o => o.Compile(It.IsAny <string>()), Times.Never);
        }
        public void StartFileWatcher_FileDeleted_DeletesDestinationFile()
        {
            bool fileExists = true;

            try
            {
                // Arrange
                InitialiseTestEnvironment();
                string _deleteFileScssFileName = "delete.scss";
                string _deleteFileCssFileName  = "delete.css";

                var compilerMock = new Mock <ICompiler>();
                compilerMock.Setup(o => o.Compile(It.IsAny <string>()));
                compilerMock.Setup(o => o.IsExcluded(It.IsAny <string>()));
                var scssPath = Path.Combine(_testSourcePath, _deleteFileScssFileName);
                var cssPath  = Path.Combine(_testDestinationPath, _deleteFileCssFileName);
                WriteScssFile(scssPath);
                WriteScssFile(cssPath);
                var watcher = new SassFileWatcher(_testOptions, compilerMock.Object);
                watcher.StartFileWatcher();

                // Act
                File.Delete(scssPath);

                // Give the file system a second to catch up
                Thread.Sleep(200);

                watcher.StopFileWatcher();
                fileExists = File.Exists(cssPath);
            }
            finally
            {
                CleanUpTestEnvironment();
            }

            // Assert
            Assert.False(fileExists);
        }