public void Resolve_CommitOnBranchBeforeBranchpointTag()
        {
            var f1 = new FileInfo("file1").WithBranch("branch", "1.2.0.2").WithTag("branch-branchpoint", "1.2");
            var f2 = new FileInfo("file2").WithBranch("branch", "1.1.0.2").WithTag("branch-branchpoint", "1.1");

            var commits = new List <Commit>()
            {
                new Commit("c0").WithRevision(f1, "1.1").WithRevision(f2, "1.1"),
                new Commit("c1").WithRevision(f2, "1.1.2.1"),
                new Commit("c2").WithRevision(f1, "1.2"),
            };

            var fallback = MockRepository.GenerateMock <ITagResolver>();

            var resolvedTags = new Dictionary <string, Commit>()
            {
                { "branch-branchpoint", commits[2] },
            };

            m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);

            var  resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
            bool result   = resolver.Resolve(new[] { "branch" }, commits);

            Assert.IsTrue(result, "Resolved");
            Assert.AreEqual(resolver.ResolvedTags["branch"].CommitId, "c2");
            Assert.IsTrue(resolver.Commits.Select(c => c.CommitId).SequenceEqual("c0", "c2", "c1"), "Commits reordered");
        }
		public void Resolve_BranchpointTagExists()
		{
			var fallback = MockRepository.GenerateMock<ITagResolver>();

			var commit1 = new Commit("c1");
			var resolvedTags = new Dictionary<string, Commit>()
			{
				{ "branch-branchpoint", commit1 },
			};
			m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);
 
			var resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
			bool result = resolver.Resolve(new[] { "branch" }, new[] { commit1 });

			Assert.IsTrue(result, "Resolved");
			Assert.AreSame(resolver.ResolvedTags["branch"], commit1);
			fallback.AssertWasNotCalled(f => f.Resolve(Arg<IEnumerable<string>>.Is.Anything, Arg<IEnumerable<Commit>>.Is.Anything));
		}
        public void Resolve_BranchpointTagExists()
        {
            var fallback = MockRepository.GenerateMock <ITagResolver>();

            var commit1      = new Commit("c1");
            var resolvedTags = new Dictionary <string, Commit>()
            {
                { "branch-branchpoint", commit1 },
            };

            m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);

            var  resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
            bool result   = resolver.Resolve(new[] { "branch" }, new[] { commit1 });

            Assert.IsTrue(result, "Resolved");
            Assert.AreSame(resolver.ResolvedTags["branch"], commit1);
            fallback.AssertWasNotCalled(f => f.Resolve(Arg <IEnumerable <string> > .Is.Anything, Arg <IEnumerable <Commit> > .Is.Anything));
        }
        public void Resolve_ResolveFails()
        {
            var resolvedCommits = new Dictionary <string, Commit>();

            var fallback = MockRepository.GenerateMock <ITagResolver>();

            fallback.Stub(f => f.Resolve(Arg <IEnumerable <string> > .Is.Anything, Arg <IEnumerable <Commit> > .Is.Anything)).Return(false);
            fallback.Stub(f => f.ResolvedTags).Return(resolvedCommits);
            fallback.Stub(f => f.UnresolvedTags).Return(new[] { "branch" });
            fallback.Stub(f => f.Commits).Return(Enumerable.Empty <Commit>());

            var resolvedTags = new Dictionary <string, Commit>();

            m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);

            var  resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
            bool result   = resolver.Resolve(new[] { "branch" }, Enumerable.Empty <Commit>());

            Assert.IsFalse(result, "Resolved");
            Assert.IsTrue(resolver.UnresolvedTags.SequenceEqual("branch"));
        }
		public void Resolve_CommitOnBranchBeforeBranchpointTag()
		{
			var f1 = new FileInfo("file1").WithBranch("branch", "1.2.0.2").WithTag("branch-branchpoint", "1.2");
			var f2 = new FileInfo("file2").WithBranch("branch", "1.1.0.2").WithTag("branch-branchpoint", "1.1");

			var commits = new List<Commit>()
			{
				new Commit("c0").WithRevision(f1, "1.1").WithRevision(f2, "1.1"),
				new Commit("c1").WithRevision(f2, "1.1.2.1"),
				new Commit("c2").WithRevision(f1, "1.2"),
			};

			var fallback = MockRepository.GenerateMock<ITagResolver>();

			var resolvedTags = new Dictionary<string, Commit>()
			{
				{ "branch-branchpoint", commits[2] },
			};
			m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);
 
			var resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
			bool result = resolver.Resolve(new[] { "branch" }, commits);

			Assert.IsTrue(result, "Resolved");
			Assert.AreEqual(resolver.ResolvedTags["branch"].CommitId, "c2");
			Assert.IsTrue(resolver.Commits.Select(c => c.CommitId).SequenceEqual("c0", "c2", "c1"), "Commits reordered");
		}
		public void Resolve_ResolveFails()
		{
			var resolvedCommits = new Dictionary<string, Commit>();

			var fallback = MockRepository.GenerateMock<ITagResolver>();
			fallback.Stub(f => f.Resolve(Arg<IEnumerable<string>>.Is.Anything, Arg<IEnumerable<Commit>>.Is.Anything)).Return(false);
			fallback.Stub(f => f.ResolvedTags).Return(resolvedCommits);
			fallback.Stub(f => f.UnresolvedTags).Return(new[] { "branch" });
			fallback.Stub(f => f.Commits).Return(Enumerable.Empty<Commit>());

			var resolvedTags = new Dictionary<string, Commit>();
			m_tagResolver.Stub(tr => tr.ResolvedTags).Return(resolvedTags);
 
			var resolver = new ManualBranchResolver(m_log, fallback, m_tagResolver, m_rule);
			bool result = resolver.Resolve(new[] { "branch" }, Enumerable.Empty<Commit>());

			Assert.IsFalse(result, "Resolved");
			Assert.IsTrue(resolver.UnresolvedTags.SequenceEqual("branch"));
		}