public void AddMissingDependency_MissingMemberOfSupportedType_TypeIsNotMarkedMissing()
        {
            var targets = TargetPlatforms(2);
            var type = new MemberInfo
            {
                MemberDocId = "T:Spam.Spam",
                IsSupportedAcrossTargets = true,
                TargetStatus = targets.Select(t => new Version(t.Version.ToString())).ToList()
            };

            var missingMember = MissingMember(type.MemberDocId, "Eggs");
            missingMember.TargetStatus = new List<Version>
            {
                new Version("1.0"),
                null
            };

            var reportingResult = new ReportingResult(targets, new List<MemberInfo>() { type }, Guid.NewGuid().ToString(), AnalyzeRequestFlags.None);
            reportingResult.AddMissingDependency(null, missingMember, "Add more spam.");

            var typeIsMarkedMissing = reportingResult.GetMissingTypes()
                .First(t => string.Equals(t.TypeName, type.MemberDocId, StringComparison.Ordinal))
                .IsMissing;
            Assert.False(typeIsMarkedMissing);
        }
        public CciMetadataTraverser(ReportingResult analysis, PdbReader pdbReader)
        {
            _analysis = analysis;
            _pdbReader = pdbReader;

            var missingMembers = from type in analysis.GetMissingTypes()
                                 from member in type.MissingMembers
                                 select member;

            _interestingMethods = missingMembers
                .ToDictionary(m => m.MemberName, m => m);

            _interestingTypes = analysis.GetMissingTypes()
                .Where(type => type.IsMissing)
                .ToDictionary(t => t.DocId, t => t);
        }
        public void AddMissingDependency_MemberOfUnidentifiedType_TypeAddedToMissingTypes()
        {
            var targets = TargetPlatforms(2);
            var typeDocId = "T:Spam.Spam";
            var missingMember = MissingMember(typeDocId, "Eggs");
            missingMember.TargetStatus = new List<Version>
            {
                new Version("1.0"),
                null
            };

            var reportingResult = new ReportingResult(targets, new List<MemberInfo>(), Guid.NewGuid().ToString(), AnalyzeRequestFlags.None);
            reportingResult.AddMissingDependency(null, missingMember, "Add more spam.");

            var typeWasAdded = reportingResult.GetMissingTypes().Any(t => string.Equals(t.DocId, typeDocId, StringComparison.Ordinal));
            Assert.True(typeWasAdded);
        }
        public void AddMissingDependency_MemberOfUnidentifiedType_TypeInheritsMemberTargetStatus()
        {
            var targets = TargetPlatforms(2);
            var typeDocId = "T:Spam.Spam";
            var missingMember = MissingMember(typeDocId, "Eggs");
            missingMember.TargetStatus = new List<Version>
            {
                new Version("1.0"),
                null
            };

            var reportingResult = new ReportingResult(targets, new List<MemberInfo>(), Guid.NewGuid().ToString(), AnalyzeRequestFlags.None);
            reportingResult.AddMissingDependency(null, missingMember, "Add more spam.");

            var type = reportingResult.GetMissingTypes()
                .First(t => string.Equals(t.TypeName, typeDocId, StringComparison.Ordinal));

            Assert.True(missingMember.TargetStatus.Count == type.TargetVersionStatus.Count()
                     && missingMember.TargetStatus.All(v => type.TargetVersionStatus.Contains(v)));
        }