Example #1
0
        public async Task WhenVisitorVisitsOneCommit_OneDiffIsReturned()
        {
            var commit = Fakes.Commit().Object;

            var visitor = new Mock <Core.Visitor>();

            visitor.Setup(v => v.Walk(commit))
            .Raises(v => v.Visited += null, visitor.Object, commit);

            var listener = new Mock <IDiffListener>();

            listener.Setup(l => l.OnCommitVisited(It.IsAny <Core.Visitor>(), It.IsAny <Commit>()))
            .Callback(() =>
                      listener.SetupGet(l => l.Diffs)
                      .Returns(new List <(Commit, TreeEntryChanges)>()
            {
                (commit, new Mock <TreeEntryChanges>().Object)
            })
                      );

            var walker = new DiffCollector(visitor.Object, listener.Object);
            var result = await walker.Walk(commit);

            Assert.Equal(commit.Sha, result.First().Commit.Sha);
        }
Example #2
0
        public void ParentsShareAParent_OnlyVisitGrandParentOnce()
        {
            var grandParent  = Fakes.Commit();
            var grandParents = new List <Commit>()
            {
                grandParent.Object
            };

            var commit = Fakes.Commit()
                         .WithParents(new List <Commit>()
            {
                Fakes.Commit().WithParents(grandParents).Object,
                Fakes.Commit().WithParents(grandParents).Object
            });

            var visitor = new CommitVisitor();

            var visitedCount            = 0;
            var grandParentVisitedCount = 0;

            visitor.Visited += (sender, visited) => {
                visitedCount++;
                if (visited.Sha == grandParent.Object.Sha)
                {
                    grandParentVisitedCount++;
                }
            };

            visitor.Walk(commit.Object);

            Assert.Equal(4, visitedCount);
            Assert.Equal(1, grandParentVisitedCount);
        }
Example #3
0
        public void CanCallWalkMultipleTimes()
        {
            var grandParent  = Fakes.Commit();
            var grandParents = new List <Commit>()
            {
                grandParent.Object
            };

            var commit = Fakes.Commit()
                         .WithParents(new List <Commit>()
            {
                Fakes.Commit().WithParents(grandParents).Object,
                Fakes.Commit().WithParents(grandParents).Object
            });

            var visitor = new CommitVisitor();

            var visitedCount            = 0;
            var grandParentVisitedCount = 0;

            visitor.Visited += (sender, visited) => {
                visitedCount++;
                if (visited.Sha == grandParent.Object.Sha)
                {
                    grandParentVisitedCount++;
                }
            };

            visitor.Walk(commit.Object);
            visitor.Walk(commit.Object);

            Assert.Equal(8, visitedCount);
            Assert.Equal(2, grandParentVisitedCount);
        }
        public void OneEntryIsCounted()
        {
            var diffs = new List <CommitDiff>()
            {
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/file").Object),
            };

            Assert.Equal(1, CountFileChanges(diffs).Single().Count);
        }
        public void TwoEntriesForSameFileAreCounted()
        {
            var diffs = new List <CommitDiff>()
            {
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/file").Object),
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/file").Object),
            };

            Assert.Equal(2, CountFileChanges(diffs).Single().Count);
        }
        public void TwoEntriesForTwoDifferentFilesAreCountedSeparately()
        {
            var diffs = new List <CommitDiff>()
            {
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/fileA").Object),
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/fileB").Object),
                new(Fakes.Commit().Object, Fakes.TreeEntryChanges("path/to/fileB").Object),
            };

            Assert.Equal(1, CountFileChanges(diffs).Single(d => d.Path == "path/to/fileA").Count);
            Assert.Equal(2, CountFileChanges(diffs).Single(d => d.Path == "path/to/fileB").Count);
        }
Example #7
0
        public void NoParents_OnlyVisitsCurrentCommit()
        {
            var commit = Fakes.Commit();

            var visitor = new CommitVisitor();

            var visitedCount = 0;

            visitor.Visited += (sender, visited) => visitedCount++;
            visitor.Walk(commit.Object);

            Assert.Equal(1, visitedCount);
        }
Example #8
0
        public async Task WhenDateFilterIsPresent_DisplayFilteredResults()
        {
            var diffs = Fakes.Diffs(Fakes.Commit().WithAuthor(DateTimeOffset.Parse("2017-06-21 13:30 -4:00")));

            _asyncVisitor.Setup(v => v.Walk(It.IsAny <Commit>()))
            .Returns(Task.FromResult(diffs));

            var result = await _controller.RunAnalysis(new Options()
            {
                DateFilter = DateTime.Parse("2017-07-21")
            });

            var pathCounts = Analysis.CountFileChanges(Enumerable.Empty <CommitDiff>());

            _view.Verify(v => v.DisplayPathCounts(pathCounts));
            Assert.Equal(Result.Success, result);
        }
        public async Task WhenVisitorVisitsOneCommit_OneDiffIsReturned()
        {
            var commit = Fakes.Commit().Object;

            var visitor = new Mock <Core.Visitor>();

            visitor.Setup(v => v.Walk(commit))
            .Raises(v => v.Visited += null, visitor.Object, commit);

            var listener = new Mock <IDiffListener>();

            listener.Setup(l => l.OnCommitVisited(It.IsAny <Core.Visitor>(), It.IsAny <Commit>()))
            .Callback(() =>
                      listener.SetupGet(l => l.Diffs)
                      .Returns(new List <CommitDiff>()
            {
                new(commit, new Mock <TreeEntryChanges>().Object)
            })
Example #10
0
        public void OneParent_VisitsCurrentCommitAndParent()
        {
            var commit = Fakes.Commit()
                         .WithParents(new List <Commit>()
            {
                Fakes.Commit().Object
            });

            var visitor = new CommitVisitor();

            var visitedCount = 0;

            visitor.Visited += (sender, visited) => visitedCount++;

            visitor.Walk(commit.Object);

            Assert.Equal(2, visitedCount);
        }
        public void RenamedFileHasHistory()
        {
            var fileA = Fakes.TreeEntryChanges("fileA");
            var fileB = Fakes.TreeEntryChanges("fileB");

            fileB.SetupGet(d => d.Status).Returns(ChangeKind.Renamed);
            fileB.SetupGet(d => d.OldPath).Returns(fileA.Object.Path);

            var diffs = new List <CommitDiff>()
            {
                new(Fakes.Commit().Object, fileA.Object),
                new(Fakes.Commit().Object, fileB.Object)
            };

            var pathCounts = CountFileChanges(diffs);

            Assert.Equal("fileB", pathCounts.Single().Path);
            Assert.Equal(2, pathCounts.Single().Count);
        }
Example #12
0
        public void WhenCommitIsVisited_DiffWithItsParentIsStored()
        {
            //arrange
            var treeChangeA = new Mock <TreeEntryChanges>();

            treeChangeA.Setup(t => t.Path).Returns("a");
            var treeChangeB = new Mock <TreeEntryChanges>();

            treeChangeB.Setup(t => t.Path).Returns("b");
            var treeEntryChanges = new List <TreeEntryChanges>()
            {
                treeChangeA.Object,
                treeChangeB.Object
            };

            var expected = Fakes.TreeChanges(treeEntryChanges);

            var diff = new Mock <Diff>();

            diff.Setup(d => d.Compare <TreeChanges>(It.IsAny <Tree>(), It.IsAny <Tree>()))
            .Returns(expected.Object);
            var repo = new Mock <IRepository>();

            repo.Setup(r => r.Diff)
            .Returns(diff.Object);

            var commit = Fakes.Commit().WithParents().Object;

            //act
            var listener = new DiffListener(repo.Object);

            listener.OnCommitVisited(new CommitVisitor(), commit);

            var actual = listener.Diffs
                         .Select(d => d.Diff)
                         .OrderBy(change => change.Path)
                         .ToList();

            //assert
            Assert.Equal(treeEntryChanges, actual);
            Assert.Equal(commit, listener.Diffs.Select(d => d.Commit).First());
        }