Ejemplo n.º 1
0
        public void scenario_1()
        {
            if (Directory.Exists("A"))
            {
                Directory.Delete("A", true);
            }

            Directory.CreateDirectory(@"A");
            Directory.CreateDirectory(@"A\B");
            File.WriteAllText(@"A\B\textfile.txt", "should be gone"); // ska tas bort
            Directory.CreateDirectory(@"A\B\.vs");
            File.WriteAllText(@"A\B\.vs\textfile.txt", "this should stay");
            Directory.CreateDirectory(@"A\B\.vs\C");
            Directory.CreateDirectory(@"A\D");                        // ska tas bort
            File.WriteAllText(@"A\D\textfile.txt", "should be gone"); // ska tas bort
            Directory.CreateDirectory(@"A\E");                        // ska tas bort

            var nrDeleted = new BadCopyService().DeleteFolder("A");

            Assert.AreEqual(2, nrDeleted);

            string[] subDirs = GetAllSubdirectories("A");

            CollectionAssert.AreEquivalent(new []
            {
                @"A\B",
                @"A\B\.vs",
                @"A\B\.vs\C",
            }, subDirs);

            Assert.IsTrue(File.Exists(@"A\B\.vs\textfile.txt"));

            Assert.IsFalse(File.Exists(@"A\B\textfile.txt"));
            Assert.IsFalse(File.Exists(@"A\D\textfile.txt"));
        }
Ejemplo n.º 2
0
        public void clone_one_file()
        {
            List <FileInfo> files = new List <FileInfo>
            {
                new FileInfo {
                    BatchName = "First batch",
                    FromFile  = InputFile("A\\2-Clone.txt"),
                    ToFile    = OutputFile("A\\2-Clone.txt"),
                    Action    = Action.Copy
                }
            };

            var bs = new BadCopyService();

            BadCopyService.CopyResult result = bs.Copy(files);

            Assert.IsTrue(result.AllSucceded);

            CompareContentOfFiles(ExpectedOutputFile("A\\2-Clone.txt"), OutputFile("A\\2-Clone.txt"));
        }
Ejemplo n.º 3
0
        public void copy_one_file_without_solution()
        {
            List <FileInfo> files = new List <FileInfo>
            {
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\1.txt"),
                    ToFile     = OutputFile("A\\1.txt"),
                    Action     = Action.Transform,
                    Transforms = new Transform[] { new Transform(new RemoveSolutionRegion()) }
                }
            };

            var bs = new BadCopyService();

            BadCopyService.CopyResult result = bs.Copy(files);

            Assert.IsTrue(result.AllSucceded);

            CompareContentOfFiles(OutputFile("A\\1.txt"), ExpectedOutputFile("A\\1.txt"));
        }
Ejemplo n.º 4
0
        public void scenario_2()
        {
            if (Directory.Exists("X"))
            {
                Directory.Delete("X", true);
            }

            Directory.CreateDirectory(@"X");
            Directory.CreateDirectory(@"X\Y");     // ska tas bort
            Directory.CreateDirectory(@"X\Z");     // ska tas bort
            Directory.CreateDirectory(@"X\Z\W");   // ska tas bort
            Directory.CreateDirectory(@"X\Z\W\Y"); // ska tas bort

            var nrDeleted = new BadCopyService().DeleteFolder("X");

            Assert.AreEqual(4, nrDeleted);

            string[] subDirs = GetAllSubdirectories("X");

            CollectionAssert.AreEquivalent(new string[]
            {
            }, subDirs);
        }
Ejemplo n.º 5
0
        static void Main(params string[] args)
        {
            // todo: namnbyte. Murphy. Morphy. Twins

            // todo: generell refactor, se över FileInfo, BadCopyConfig etc
            // todo: kan allt vara en transformation?
            // todo: skapa klasser för filtering (t.ex inte ha med filer som börjar med "Skip")

            // todo: se över json-filerna, hur använder jag dem. går det att förenkla? (ex med mappar)
            // todo: validering av badconfig.json (ex att FromFolders finns)
            // todo: koppla ihop FromFolder och ToFolder så det blir en variabel. Ett par.

            // todo: transfomation: [TestMethod] kan vara på andra platser än närmast signaturen
            // todo: transfomation: klipp på ett smartare sätt så det t.ex går att deklarera saker innan metoder som ska testas
            // todo: felhantering. skicka mycket exception och kedja ihop dem. visa felmeddelanden och undermeddelanden.
            // todo: refactor denna supermetod
            // todo: Microsoft Code Analysis 2019
            //try
            //{

            SetWindowSize();

            var bcs = new BadCopyService();

            CommandArguments commandargs = new CommandArguments(args);

            BadCopyConfigFile configFile = ReadBadCopyConfigurationFile(commandargs.ConfigFileName);

            BadCopyConfig config = configFile.MergeConfiguration();

            cc.Space();

            var batchesToRun = commandargs.OnlyLastBatches == null ? config.Batches : config.Batches.TakeLast((int)commandargs.OnlyLastBatches);

            foreach (var batch in batchesToRun)
            {
                switch (batch.Action)
                {
                case Core.Action.DeleteFolder:

                    var countDeletedFolders = bcs.DeleteFolder(batch.FolderToDelete);
                    cc.WriteLineGreen($"Deleted {countDeletedFolders} folders in destination folder.");
                    cc.Space();

                    break;

                case Core.Action.Copy:
                case Core.Action.Transform:

                    var files  = bcs.GetFilesToCopy(batch);
                    var result = bcs.Copy(files);

                    if (result.AllSucceded)
                    {
                        var noSolution  = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.SuccessNoSolution);
                        var clonedFiles = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.SuccessClone);

                        if (noSolution.Count() + clonedFiles.Count() == 0)
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine($"Batch '{batch.Name}' finished but nothing copied.");
                            Console.ForegroundColor = ConsoleColor.White;
                            continue;
                        }

                        cc.WriteLineGreen($"Batch '{batch.Name}' succeeded.");

                        if (noSolution.Any())
                        {
                            cc.WriteLineGreen($"\n\tWithout solution:\n");
                            foreach (var file in noSolution)
                            {
                                cc.WriteLineGreen($"\t\t{file.FileInfo.ToFile}");
                            }
                        }
                        if (clonedFiles.Any())
                        {
                            cc.WriteLineGreen($"\n\tCloned:\n");
                            foreach (var file in clonedFiles)
                            {
                                cc.WriteLineGreen($"\t\t{file.FileInfo.ToFile}");
                            }
                        }
                        cc.Space();
                    }
                    else
                    {
                        cc.WriteLineRed($"Batch '{batch.Name}' failed. ");

                        // todo: refactor, förkorta

                        var failedReads      = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.FailedRead).ToArray();
                        var failedWrites     = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.FailedWrite).ToArray();
                        var unknownCopyStyle = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.UnknownCopyStyle).ToArray();
                        var incompleted      = result.CopyResultFiles.Where(x => x.State == BadCopyService.CopyResultFileState.Incomplete).ToArray();

                        if (failedReads.Any())
                        {
                            cc.WriteLineRed($"\n\tFailed to read:\n");
                            foreach (var file in failedReads)
                            {
                                cc.WriteLineRed($"\t\t{file.FileInfo.FromFile}");
                            }
                        }

                        if (failedWrites.Any())
                        {
                            cc.WriteLineRed($"\n\tFailed to write:\n");
                            foreach (var file in failedWrites)
                            {
                                cc.WriteLineRed($"\t\t{file.FileInfo.ToFile}");
                            }
                        }


                        if (unknownCopyStyle.Any())
                        {
                            cc.WriteLineRed($"\n\tUnknown copy style:\n");
                            foreach (var file in unknownCopyStyle)
                            {
                                cc.WriteLineRed($"\t\t{file.FileInfo.FromFile}");
                            }
                        }

                        if (incompleted.Any())
                        {
                            cc.WriteLineRed($"\n\tIncompleted:\n");
                            foreach (var file in incompleted)
                            {
                                cc.WriteLineRed($"\t\t{file.FileInfo.FromFile}");
                            }
                        }
                        cc.Space();
                    }
                    break;

                default:
                    throw new Exception("Unknown action");
                }
            }
            //}
            //catch (Exception ex)
            //{
            //    throw ex;
            //    cc.WriteLineRed(ex.Message);
            //    return;
            //}

            // todo: fixa i ConsoleCompanion så att förra färgen automatiskt kommer tillbaka efter t.ex WriteLineRed (då behövs inte denna raden)
            cc.WriteLine("");
        }
Ejemplo n.º 6
0
        public void copy_multiple_files()
        {
            List <FileInfo> files = new List <FileInfo>
            {
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\1.txt"),
                    ToFile     = OutputFile("A\\1.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\Sub1\\Sub2\\6.txt"),
                    ToFile     = OutputFile("A\\Sub1\\Sub2\\6.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName = "First batch",
                    FromFile  = InputFile("A\\2-Clone.txt"),
                    ToFile    = OutputFile("A\\2-Clone.txt"),
                    Action    = Action.Copy,
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\3-Simple.txt"),
                    ToFile     = OutputFile("A\\3-Simple.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\4-Multiple.txt"),
                    ToFile     = OutputFile("A\\4-Multiple.txt"),
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) },
                    Action     = Action.Transform
                }
                ,
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("B\\5-Onemore.txt"),
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) },
                    ToFile     = OutputFile("B\\5-Onemore.txt"),
                    Action     = Action.Transform
                },
            };

            var bs = new BadCopyService();

            BadCopyService.CopyResult result = bs.Copy(files);

            Assert.IsTrue(result.AllSucceded);

            CompareContentOfFiles(OutputFile("A\\1.txt"), ExpectedOutputFile("A\\1.txt"));
            CompareContentOfFiles(OutputFile("A\\Sub1\\Sub2\\6.txt"), ExpectedOutputFile("A\\Sub1\\Sub2\\6.txt"));
            CompareContentOfFiles(OutputFile("A\\2-Clone.txt"), ExpectedOutputFile("A\\2-Clone.txt"));
            CompareContentOfFiles(OutputFile("A\\3-Simple.txt"), ExpectedOutputFile("A\\3-Simple.txt"));
            CompareContentOfFiles(OutputFile("A\\4-Multiple.txt"), ExpectedOutputFile("A\\4-Multiple.txt"));
            CompareContentOfFiles(OutputFile("B\\5-Onemore.txt"), ExpectedOutputFile("B\\5-Onemore.txt"));
        }
Ejemplo n.º 7
0
        public void should_give_correct_filepaths_from_a_batch()
        {
            var b1 = new Batch
            {
                Name           = "First batch",
                FromFolderBase = Scenario01Root + "Input",
                FromFolders    = new List <string> {
                    "A",
                    "B",
                },
                Action     = Action.Transform,
                ToFolder   = Scenario01Root + "Output",
                Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
            };

            var             bs     = new BadCopyService();
            List <FileInfo> result = bs.GetFilesToCopy(b1);

            List <FileInfo> expected = new List <FileInfo>
            {
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\1.txt"),
                    ToFile     = OutputFile("A\\1.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\2-Clone.txt"),
                    ToFile     = OutputFile("A\\2-Clone.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\3-Simple.txt"),
                    ToFile     = OutputFile("A\\3-Simple.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\4-Multiple.txt"),
                    ToFile     = OutputFile("A\\4-Multiple.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("A\\Sub1\\Sub2\\6.txt"),
                    ToFile     = OutputFile("A\\Sub1\\Sub2\\6.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
                new FileInfo {
                    BatchName  = "First batch",
                    FromFile   = InputFile("B\\5-Onemore.txt"),
                    ToFile     = OutputFile("B\\5-Onemore.txt"),
                    Action     = Action.Transform,
                    Transforms = new[] { new Transform(new RemoveSolutionRegion()) }
                },
            };

            //for (int i = 0; i < result.Count; i++)
            //{
            //    Assert.AreEqual(expected[i], result[i]);
            //}
            CollectionAssert.AreEqual(expected, result);
        }