Beispiel #1
0
        void VerifyKeptAllTypesAndMembersInAssembly(AssemblyDefinition linked)
        {
            var original = ResolveOriginalsAssembly(linked.MainModule.Assembly.Name.Name);

            if (original == null)
            {
                Assert.Fail($"Failed to resolve original assembly {linked.MainModule.Assembly.Name.Name}");
            }

            var originalTypes = original.AllDefinedTypes().ToDictionary(t => t.FullName);
            var linkedTypes   = linked.AllDefinedTypes().ToDictionary(t => t.FullName);

            var missingInLinked = originalTypes.Keys.Except(linkedTypes.Keys);

            Assert.That(missingInLinked, Is.Empty, $"Expected all types to exist in the linked assembly, but one or more were missing");

            foreach (var originalKvp in originalTypes)
            {
                var linkedType = linkedTypes [originalKvp.Key];

                var originalMembers = originalKvp.Value.AllMembers().Select(m => m.FullName);
                var linkedMembers   = linkedType.AllMembers().Select(m => m.FullName);

                var missingMembersInLinked = originalMembers.Except(linkedMembers);

                Assert.That(missingMembersInLinked, Is.Empty, $"Expected all members of `{originalKvp.Key}`to exist in the linked assembly, but one or more were missing");
            }
        }
Beispiel #2
0
        void VerifyLoggedMessages(AssemblyDefinition original, LinkerTestLogger logger)
        {
            string allMessages = string.Join(Environment.NewLine, logger.Messages.Select(mc => mc.Message));

            foreach (var typeWithRemoveInAssembly in original.AllDefinedTypes())
            {
                foreach (var attr in typeWithRemoveInAssembly.CustomAttributes)
                {
                    if (attr.AttributeType.Resolve().Name == nameof(LogContainsAttribute))
                    {
                        var expectedMessagePattern = (string)attr.ConstructorArguments [0].Value;
                        Assert.That(
                            logger.Messages.Any(mc => Regex.IsMatch(mc.Message, expectedMessagePattern)),
                            $"Expected to find logged message matching `{expectedMessagePattern}`, but no such message was found.{Environment.NewLine}Logged messages:{Environment.NewLine}{allMessages}");
                    }

                    if (attr.AttributeType.Resolve().Name == nameof(LogDoesNotContainAttribute))
                    {
                        var unexpectedMessagePattern = (string)attr.ConstructorArguments [0].Value;
                        foreach (var loggedMessage in logger.Messages)
                        {
                            Assert.That(
                                !Regex.IsMatch(loggedMessage.Message, unexpectedMessagePattern),
                                $"Expected to not find logged message matching `{unexpectedMessagePattern}`, but found:{Environment.NewLine}{loggedMessage.Message}{Environment.NewLine}Logged messages:{Environment.NewLine}{allMessages}");
                        }
                    }
                }
            }
        }
Beispiel #3
0
        static IEnumerable <ICustomAttributeProvider> GetAttributeProviders(AssemblyDefinition assembly)
        {
            foreach (var testType in assembly.AllDefinedTypes())
            {
                foreach (var provider in testType.AllMembers())
                {
                    yield return(provider);
                }

                yield return(testType);
            }

            foreach (var module in assembly.Modules)
            {
                yield return(module);
            }

            yield return(assembly);
        }
Beispiel #4
0
        Dictionary <string, List <CustomAttribute> > BuildOtherAssemblyCheckTable(AssemblyDefinition original)
        {
            var checks = new Dictionary <string, List <CustomAttribute> > ();

            foreach (var typeWithRemoveInAssembly in original.AllDefinedTypes())
            {
                foreach (var attr in typeWithRemoveInAssembly.CustomAttributes.Where(IsTypeInOtherAssemblyAssertion))
                {
                    var assemblyName = (string)attr.ConstructorArguments [0].Value;
                    List <CustomAttribute> checksForAssembly;
                    if (!checks.TryGetValue(assemblyName, out checksForAssembly))
                    {
                        checks [assemblyName] = checksForAssembly = new List <CustomAttribute> ();
                    }

                    checksForAssembly.Add(attr);
                }
            }

            return(checks);
        }