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 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);
        }
예제 #3
0
        public ReportingResult ComputeReport(
            IList<FrameworkName> targets,
            string submissionId,
            AnalyzeRequestFlags requestFlags,
            IDictionary<MemberInfo, ICollection<AssemblyInfo>> allDependencies,
            IList<MemberInfo> missingDependencies,
            IDictionary<string, ICollection<string>> unresolvedAssemblies,
            IList<string> unresolvedUserAssemblies,
            IEnumerable<string> assembliesWithErrors)
        {
            var types = allDependencies.Keys.Where(dep => dep.TypeDocId == null);
            ReportingResult result = new ReportingResult(targets, types, submissionId, requestFlags);

            missingDependencies
                .AsParallel()
                .ForAll((Action<MemberInfo>)((item) =>
                {
                    // the calling assemblies are in Finder...
                    if (allDependencies == null)
                    {
                        lock (result)
                        {
                            result.AddMissingDependency(null, item, item.RecommendedChanges);
                        }
                    }
                    else
                    {
                        ICollection<AssemblyInfo> calledIn;
                        if (!allDependencies.TryGetValue(item, out calledIn))
                            return;

                        foreach (var callingAsm in calledIn)
                        {
                            lock (result)
                            {
                                result.AddMissingDependency(callingAsm, item, item.RecommendedChanges);
                            }
                        }
                    }
                }));

            if (assembliesWithErrors != null)
            {
                foreach (var error in assembliesWithErrors)
                {
                    result.AddAssemblyWithError(error);
                }
            }

            foreach (var unresolvedAssembly in unresolvedUserAssemblies)
            {
                result.AddUnresolvedUserAssembly(unresolvedAssembly, unresolvedAssemblies == null ? Enumerable.Empty<string>() : unresolvedAssemblies[unresolvedAssembly]);
            }

            // Compute per assembly report
            if (allDependencies != null)
            {
                var perAssemblyUsage = ComputePerAssemblyUsage(targets, missingDependencies, allDependencies);
                result.SetAssemblyUsageInfo(perAssemblyUsage);

                // Compute the map of assemblyInfo to name
                var assemblyNameMap = ComputeAssemblyNames(perAssemblyUsage);
                result.SetAssemblyNameMap(assemblyNameMap);
            }

            return result;
        }
        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)));
        }