public static void Dispose()
        {
#if DEBUG
            Console.WriteLine("Dispose");
#endif
            var managedPath =
                "Data" +
                Path.DirectorySeparatorChar +
                "edit-file-already-exists-dispose.txt";

            // Simulate a preparation

            var manager = new EditExistingFileManager(
                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 Dispose(bool overwrite)
        {
#if DEBUG
            Console.WriteLine("Dispose");
#endif
            var sourcePath =
                "Data" +
                Path.DirectorySeparatorChar +
                "copy-file-source.txt";

            string managedPath =
                overwrite
                ?
                "Data" +
                Path.DirectorySeparatorChar +
                "copy-file-is-new-dispose.txt"
                :
                "Data" +
                Path.DirectorySeparatorChar +
                "copy-file-is-new-dispose-cannot-overwrite.txt";

            // Assure that the managed file is new
            // in case of overwrite: false
            if (!overwrite)
            {
                File.Delete(managedPath);
            }

            // Simulate a preparation

            var manager = new CopyFileManager(sourcePath,
                                              managedPath, overwrite: overwrite);

            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(); }
                );

            // Delete the managed file in case of overwrite: false
            if (!overwrite)
            {
                File.Delete(managedPath);
            }
        }