public static void OnRollbackNoScope()
            {
#if DEBUG
                Console.WriteLine("FileIsNew_OnRollbackNoScope");
#endif
                var managedPath =
                    "Data" +
                    Path.DirectorySeparatorChar +
                    "edit-file-is-new-on-rollback-no-scope.txt";

                // Simulate a preparation

                var manager = new DeleteFileManager(
                    managedPath);

                ExceptionAssert.IsThrown(
                    () =>
                {
                    FileStream stream = (FileStream)FileManagerReflection.Invoke(
                        manager,
                        "OnPrepareFileStream",
                        new string[] { managedPath });
                },
                    expectedType: typeof(TargetInvocationException),
                    expectedMessage: "Exception has been thrown by the target of an invocation.",
                    expectedInnerType: typeof(FileNotFoundException),
                    expectedInnerMessage: "Could not find file '" +
                    Path.Combine(Environment.CurrentDirectory, managedPath) +
                    "'.");
            }
        private void Clean()
        {
            state           = State.Cleaning;
            MainBtn.Content = "Stop";

            deletedFiles       = 0;
            deletedFilesLenght = 0;

            LogTextBox.Document.Blocks.Clear();
            LogTextBox.Document.Blocks.Add(new Paragraph(new Run("Deleting...")));

            if (deleteManager == null)
            {
                deleteManager = new DeleteFileManager();

                deleteManager.OnFileDeleted    += FileDeleted;
                deleteManager.OnFileNotDeleted += FileNotDeleted;
                deleteManager.OnFinished       += CleanFinished;
            }

            DeleteFileWrapper wrapper = new DeleteFileWrapper();

            wrapper.context   = context;
            wrapper.filesList = filesToDelete;

            Thread thread = new Thread(deleteManager.Work);

            thread.Start(wrapper);
        }
        internal static void CurrentTransactionIsNull()
        {
#if DEBUG
            Console.WriteLine("CurrentTransactionIsNull");
#endif
            var managedPath =
                "Data" +
                Path.DirectorySeparatorChar +
                "delete-file-already-exists-no-current-transaction.txt";

            var manager = new DeleteFileManager(
                managedPath);

            FileStream stream = (FileStream)FileManagerReflection.Invoke(
                manager,
                "OnPrepareFileStream",
                new string[] { managedPath });

            ExceptionAssert.IsThrown(
                () => { manager.EnlistVolatile(EnlistmentOptions.None); },
                expectedType: typeof(InvalidOperationException),
                expectedMessage: String.Format(
                    "Cannot enlist resource {0}: no ambient transaction detected.",
                    managedPath));
        }
            /// <summary>
            /// Tests the constructor when parameter <i>managedPath</i> is <b>null</b>.
            /// </summary>
            public static void ManagedPathIsNull()
            {
#if DEBUG
                Console.WriteLine("Constructor_ManagedPathIsNull");
#endif
                string managedPath = null;
                ArgumentExceptionAssert.IsThrown(
                    () => { var manager = new DeleteFileManager(managedPath); },
                    expectedType: typeof(ArgumentNullException),
                    expectedPartialMessage: ArgumentExceptionAssert.NullPartialMessage,
                    expectedParameterName: "managedPath");
            }
            public static void OnRollbackNoScope()
            {
#if DEBUG
                Console.WriteLine("FileAlreadyExists_OnRollbackNoScope");
#endif
                var managedPath =
                    "Data" +
                    Path.DirectorySeparatorChar +
                    "delete-file-already-exists-on-rollback-no-scope.txt";

                // Simulate a preparation

                var manager = new DeleteFileManager(
                    managedPath);

                FileStream stream = (FileStream)FileManagerReflection.Invoke(
                    manager,
                    "OnPrepareFileStream",
                    new string[] { managedPath });

                FileManagerReflection.SetStream(manager, stream);
                stream = null;

                // Simulate a rollback (NOP)

                // We want to access the managed file to inspect its
                // edited contents, hence we need to dispose
                // its manager.
                manager.Dispose();

                // Expected results

                Assert.IsTrue(File.Exists(managedPath));
                using (stream = File.OpenRead(managedPath))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        var content = reader.ReadLine();
                        Assert.AreEqual("existing-file", content);
                    }
                }
            }
        public static void Dispose()
        {
#if DEBUG
            Console.WriteLine("Dispose");
#endif
            var managedPath =
                "Data" +
                Path.DirectorySeparatorChar +
                "delete-file-already-exists-dispose.txt";

            // Simulate a preparation

            var manager = new DeleteFileManager(
                managedPath);

            Assert.AreEqual(false, FileManagerReflection.GetField(manager, "disposed"));

            FileStream stream = (FileStream)FileManagerReflection.Invoke(
                manager,
                "OnPrepareFileStream",
                new string[] { managedPath });

            FileManagerReflection.SetStream(manager, stream);
            stream = null;

            // Dispose the manager

            manager.Dispose();

            // Expected results

            Assert.AreEqual(true, FileManagerReflection.GetField(manager, "disposed"));

            // Dispose the manager, again

            ExceptionAssert.IsNotThrown(
                () => { manager.Dispose(); }
                );
        }
            public static void OnCommit()
            {
#if DEBUG
                Console.WriteLine("FileAlreadyExists_OnCommit");
#endif
                var managedPath =
                    "Data" +
                    Path.DirectorySeparatorChar +
                    "delete-file-already-exists-on-commit.txt";

                var deleteManager = new DeleteFileManager(
                    managedPath);

                List <FileManager> managers = new List <FileManager>
                {
                    deleteManager
                };

                void results()
                {
                    // Dispose the manager, so that
                    // the following call to File.Exists
                    // has the required permissions
                    // to investigate the managed file.
                    deleteManager.Dispose();

                    Assert.IsTrue(!File.Exists(managedPath));
                }

                void rolledBack(Exception e)
                {
                }

                TransactionScopeHelper.Using(
                    managers,
                    results,
                    rolledBack);
            }