예제 #1
0
    public ScoreTab(FileReader file)
    {
        this.file = file;
        TrackerData.ValidateFile(file);

        Text = "Scores";
        Dock = DockStyle.Fill;

        Controls.Add(tabs);

        addComparison.Dock    = DockStyle.Left;
        addComparison.Text    = "Add Comparison";
        removeComparison.Dock = DockStyle.Right;
        removeComparison.Text = "Remove Comparison";

        Panel p = new Panel();

        p.Height = 20;
        p.Controls.Add(addComparison);
        p.Controls.Add(removeComparison);
        p.Dock = DockStyle.Top;

        pages.Add("Best Run", ConfigureTab("Best Run"));
        pages.Add("Top Scores", ConfigureTab("Top Scores"));
        tabs.TabPages.Add(ToTabPage(pages["Best Run"]));
        tabs.TabPages.Add(ToTabPage(pages["Top Scores"]));
        comparisons.Text = "Comparisons";
        selector         = new ComparisonSelector(file);
        selector.SetType = ScoresetType.Comparison;
        selector.Reload();
        selector.Dock          = DockStyle.Top;
        currentComparison.Dock = DockStyle.Fill;
        comparisons.Controls.Add(currentComparison);
        comparisons.Controls.Add(selector);
        comparisons.Controls.Add(p);

        selector.Changed  = ReloadComparisons;
        selector.Reloaded = ReloadComparisons;
        selector.Index    = selectorIndex;

        ReloadComparisons();

        tabs.TabPages.Add(comparisons);

        tabs.SelectedIndexChanged += delegate { CacheTabIndex(); };
        addComparison.Click       += delegate { AddComparison(); };
        removeComparison.Click    += delegate { ConfirmComparisonDeletion(); };

        Layout += new LayoutEventHandler((object sender, LayoutEventArgs e) => DoLayout());

        tabs.SelectedIndex = tabIndex;

        DoLayout();
    }
        public void When_Remove_Invalid_Results_Is_Called_All_Results_That_Have_The_Same_Main_And_Ref_Branches_As_An_Earlier_Result_Should_Be_Removed()
        {
            /* SetUp */
            var branch1 = new Branch {
                Name = "Branch 1"
            };
            var branch2 = new Branch {
                Name = "Branch 2"
            };
            var branch3 = new Branch {
                Name = "Branch 3"
            };
            var mockComp = new Mock <IBranchComparer>().Object;
            var selector = new ComparisonSelector(mockComp);
            var results  = new List <ComparerResult>
            {
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch2
                },
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch3
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch1
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch3
                },
                new ComparerResult {
                    MainBranch = branch3, RefBranch = branch2
                }
            };
            var expectedResults = new List <ComparerResult>
            {
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch2
                },
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch3
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch3
                }
            };

            /* Test */
            var finalResults = selector.RemoveInvalidResults(results);

            /* Assert */
            Assert.That(finalResults.Select(r => r.MainBranch), Is.EqualTo(expectedResults.Select(r => r.MainBranch)));
            Assert.That(finalResults.Select(r => r.RefBranch), Is.EqualTo(expectedResults.Select(r => r.RefBranch)));
        }
        public void When_Remove_Duplicates_Is_Called_Only_The_First_Instance_Of_All_Results_That_Have_The_Same_Main_Branch_Should_Be_Kept()
        {
            /* Setup */
            var branch1 = new Branch {
                Name = "Branch 1"
            };
            var branch2 = new Branch {
                Name = "Branch 2"
            };
            var branch3 = new Branch {
                Name = "Branch 3"
            };
            var results = new List <ComparerResult>
            {
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch2
                },
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch3
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch1
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch3
                },
                new ComparerResult {
                    MainBranch = branch3, RefBranch = branch2
                }
            };
            var expectedResults = new List <ComparerResult>
            {
                new ComparerResult {
                    MainBranch = branch1, RefBranch = branch2
                },
                new ComparerResult {
                    MainBranch = branch2, RefBranch = branch1
                },
                new ComparerResult {
                    MainBranch = branch3, RefBranch = branch2
                }
            };
            var mockComparer = new Mock <IBranchComparer>().Object;
            var selector     = new ComparisonSelector(mockComparer);

            /* Test */
            var finalResults = selector.RemoveDuplicates(results);

            /* Assert */
            Assert.That(finalResults.Select(r => r.MainBranch), Is.EqualTo(expectedResults.Select(r => r.MainBranch)));
            Assert.That(finalResults.Select(r => r.RefBranch), Is.EqualTo(expectedResults.Select(r => r.RefBranch)));
        }
        public void When_Compare_Branches_Is_Called_The_Status_Of_The_Result_Should_Be_The_Same_As_That_Of_The_Comparison_Between_The_Main_Branch_And_The_Ref_Branch(ResultStatus status, ResultStatus expectedStatus)
        {
            /* Setup */
            _mockBranchComparer
            .Setup(m => m.Compare(_mainBranch, _refBranch))
            .Returns(new ComparerResult {
                MainBranch = _mainBranch, RefBranch = _refBranch, Status = status
            });

            var selector = new ComparisonSelector(_mockBranchComparer.Object);

            /* Test */
            var result = selector.CompareBranches(_mainBranch, _refBranch);

            /* Assert */
            Assert.That(result.Status, Is.EqualTo(expectedStatus));
        }
        public void When_Check_Branch_Is_Called_A_Comparison_With_Result_Yes_Always_Returns_Yes_Otherwise_The_Result_Status_Is_That_Of_The_Last_Comparison(ResultStatus status1, ResultStatus status2, ResultStatus expectedStatus)
        {
            /* Setup */
            _mockBranchComparer
            .Setup(m => m.Compare(_mainBranch, _mainBranch))
            .Returns(new ComparerResult {
                Status = status1
            });
            _mockBranchComparer
            .Setup(m => m.Compare(_mainBranch, _refBranch))
            .Returns(new ComparerResult {
                Status = status2
            });
            var selector = new ComparisonSelector(_mockBranchComparer.Object);

            /* Test */
            var result = selector.CheckBranch(_mainBranch, new List <Branch> {
                _mainBranch, _refBranch
            });

            /* Assert */
            Assert.That(result.Status, Is.EqualTo(expectedStatus));
        }
 public void CreateComparisonSelector()
 {
     _selector = new ComparisonSelector(new BranchComparer(BranchComparer.CommitComparers));
 }
        public void When_Compare_All_Possible_Branch_Pairs_Is_Called_It_Should_Return_A_List_Of_All_Results_With_Status_Yes_And_The_Correct_Combination_Of_Main_And_Ref_Branches()
        {
            /* Setup */
            var mockBranch1 = new Mock <Branch>().Object;
            var mockBranch2 = new Mock <Branch>().Object;
            var mockBranch3 = new Mock <Branch>().Object;
            var branches    = new List <Branch> {
                mockBranch1, mockBranch2, mockBranch3
            };

            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch1, mockBranch1))
            .Returns(new ComparerResult {
                MainBranch = mockBranch1, RefBranch = mockBranch1, Status = ResultStatus.No
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch1, mockBranch2))
            .Returns(new ComparerResult {
                MainBranch = mockBranch1, RefBranch = mockBranch2, Status = ResultStatus.Yes
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch1, mockBranch3))
            .Returns(new ComparerResult {
                MainBranch = mockBranch1, RefBranch = mockBranch3, Status = ResultStatus.Yes
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch2, mockBranch1))
            .Returns(new ComparerResult {
                MainBranch = mockBranch2, RefBranch = mockBranch1, Status = ResultStatus.Yes
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch2, mockBranch2))
            .Returns(new ComparerResult {
                MainBranch = mockBranch2, RefBranch = mockBranch2, Status = ResultStatus.No
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch2, mockBranch3))
            .Returns(new ComparerResult {
                MainBranch = mockBranch2, RefBranch = mockBranch3, Status = ResultStatus.Yes
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch3, mockBranch1))
            .Returns(new ComparerResult {
                MainBranch = mockBranch3, RefBranch = mockBranch1, Status = ResultStatus.No
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch3, mockBranch2))
            .Returns(new ComparerResult {
                MainBranch = mockBranch3, RefBranch = mockBranch2, Status = ResultStatus.No
            });
            _mockBranchComparer
            .Setup(m => m.Compare(mockBranch3, mockBranch3))
            .Returns(new ComparerResult {
                MainBranch = mockBranch3, RefBranch = mockBranch3, Status = ResultStatus.No
            });

            var selector        = new ComparisonSelector(_mockBranchComparer.Object);
            var expectedResults = new List <ComparerResult>
            {
                new ComparerResult {
                    MainBranch = mockBranch1, RefBranch = mockBranch2
                },
                new ComparerResult {
                    MainBranch = mockBranch1, RefBranch = mockBranch3
                },
                new ComparerResult {
                    MainBranch = mockBranch2, RefBranch = mockBranch1
                },
                new ComparerResult {
                    MainBranch = mockBranch2, RefBranch = mockBranch3
                }
            };

            /* Test */
            var results = selector.CompareAllPossibleBranchPairs(branches);

            /* Assert */
            Assert.That(results.Select(r => r.MainBranch), Is.EqualTo(expectedResults.Select(r => r.MainBranch)));
            Assert.That(results.Select(r => r.RefBranch), Is.EqualTo(expectedResults.Select(r => r.RefBranch)));
        }
예제 #8
0
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.RollingFile(@"C:\\Documents\\{Date}.txt").CreateLogger();
            // Gets directories at basepath
            var basepath    = ConfigurationManager.AppSettings["basePath"];
            var repoFolders = Directory.GetDirectories(basepath).Select(r => new DirectoryInfo(r).Name).ToArray();

            // Asks user to select repository from directories
            string selectedRepo;

            ConsoleTools.Select("Select repo", repoFolders, out selectedRepo);
            selectedRepo = basepath + "\\" + selectedRepo;

            // Sets selected repository
            Repository repo = null;

            try
            {
                // Gets selected repo (as LibGit2Sharp.Repository) with submitted path
                repo = new Repository(selectedRepo);
            }
            catch (RepositoryNotFoundException ex)
            {
                Log.Information(ex, ex.ToString(), true);
                return;
            }

            // Gets selected repo's branches (as Model.Branch)
            var branches    = repo.Branches.Where(b => !b.IsRemote).Select(b => new Branch(b)).ToList();
            var branchNames = branches.Select(b => b.Name).ToArray();

            if (branches.Count >= 2)
            {
                // Asks user to select which comparison to run
                Enum compChoice;
                ConsoleTools.SelectEnum("Select comparison", CompChoices, out compChoice);

                // Starts comparison with list of branch comparers
                var branchComparer   = new BranchComparer(BranchComparer.CommitComparers);
                var comparisonHelper = new ComparisonSelector(branchComparer);
                // If CheckAll
                if (compChoice.Equals(ComparisonOptions.CheckAll))
                {
                    // Runs comparison and gets the deletable branches
                    var deletableBranches = comparisonHelper.CheckAllBranches(branches).Where(b => b.Status.Equals(ResultStatus.Yes)).Select(b => b.MainBranch);
                    // Prints result message according to result status
                    if (deletableBranches.Any())
                    {
                        foreach (var branch in deletableBranches)
                        {
                            Console.WriteLine("It's safe to remove " + branch.Name + ".");
                        }
                    }
                    else
                    {
                        Console.WriteLine("It's not safe to remove any of this repository's branches.");
                    }
                }
                else
                {
                    // Asks user to select and sets main branch
                    string mainBranchName;
                    ConsoleTools.Select("Select the branch of interest", branchNames, out mainBranchName);
                    var mainBranch = new Branch();
                    foreach (var branch in branches)
                    {
                        if (branch.Name.Equals(mainBranchName))
                        {
                            mainBranch = branch;
                        }
                    }
                    ComparerResult compResult;
                    // If CheckOne
                    if (compChoice.Equals(ComparisonOptions.CheckOne))
                    {
                        compResult = comparisonHelper.CheckBranch(mainBranch, branches);
                        // Prints result message according to result status
                        if (compResult.Status.Equals(ResultStatus.Yes))
                        {
                            Console.WriteLine("It's safe to delete the branch " + mainBranchName + ".");
                        }
                        else
                        {
                            Console.WriteLine("It's not safe to delete the branch " + mainBranchName + ".");
                        }
                    }
                    // If CompareTwo
                    else
                    {
                        // Asks user to select reference branch
                        string refBranchName;
                        ConsoleTools.Select("Compare " + mainBranchName + " with reference branch", branchNames.Where(b => b != mainBranch.Name).ToArray(), out refBranchName);
                        Branch refBranch = new Branch();
                        foreach (var branch in branches)
                        {
                            if (branch.Name.Equals(refBranchName))
                            {
                                refBranch = branch;
                            }
                        }
                        compResult = comparisonHelper.CompareBranches(mainBranch, refBranch);
                        // Prints result message according to result status
                        if (compResult.Status.Equals(ResultStatus.Yes))
                        {
                            Console.WriteLine("It's safe to delete the branch " + mainBranchName + ".");
                        }
                        else
                        {
                            Console.WriteLine("It's not safe to delete the branch " + mainBranchName + ".");
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("This repository only contains 1 local branch and thus no comparison can be made.");
            }

            // TEST
            Console.ReadLine();
        }