示例#1
0
        public void InjectComplexToMonoCecilAtReturn()
        {
            const string sourceAssemblyName = "Mono.Cecil.dll";
            const string targetAssemblyName = "Mono.Cecil_Injectee_AtReturn.dll";

            File.Copy(sourceAssemblyName, targetAssemblyName, true);

            InjectionConfiguration configuration = new InjectionConfiguration(
                new List <InjecteeAssembly> {
                new InjecteeAssembly(
                    targetAssemblyName,
                    null,
                    IntegrationTestsHelper.GetStandardAllowedAssemblyReferences().AsReadOnly()
                    )
            }.AsReadOnly(),
                new List <InjectedMethod> {
                new InjectedMethod(
                    InjectedLibraryPath,
                    $"{InjectedClassName}.{nameof(TestInjectedMethods.Complex)}",
                    MethodInjectionPosition.InjecteeMethodReturn
                    )
            }.AsReadOnly()
                );

            ExecuteSimpleInjection(configuration);
        }
        protected static void ExecuteSimpleInjection(InjectionConfiguration configuration)
        {
            ResolvedInjectionConfiguration resolvedConfiguration =
                ResolvedInjectionConfigurationLoader.LoadFromInjectionConfiguration(configuration);

            IntegrationTestsHelper.ExecuteInjection(resolvedConfiguration);
            IntegrationTestsHelper.WriteModifiedAssembliesIfRequested(resolvedConfiguration);
        }
        protected static ResolvedInjectionConfiguration ExecuteSimpleTest(
            InjectionConfiguration configuration,
            string[] injecteeMethodNames,
            bool assertFirstMethodMatch = true)
        {
            ResolvedInjectionConfiguration resolvedConfiguration =
                IntegrationTestsHelper.GetBasicResolvedInjectionConfiguration(configuration, injecteeMethodNames);

            ExecuteSimpleTest(resolvedConfiguration, assertFirstMethodMatch);

            return(resolvedConfiguration);
        }
        protected static void ExecuteSimpleTest(ResolvedInjectionConfiguration resolvedConfiguration, bool assertFirstMethodMatch = true)
        {
            IntegrationTestsHelper.ExecuteInjection(resolvedConfiguration);
            IntegrationTestsHelper.WriteModifiedAssembliesIfRequested(resolvedConfiguration);

            if (assertFirstMethodMatch)
            {
                bool validReferenceOutput           = TestContext.CurrentContext.Test.Properties.Get(nameof(ValidReferenceOutputAttribute).RemoveAttribute()) is bool tmp1 && tmp1;
                bool forceRegenerateReferenceOutput = TestContext.CurrentContext.Test.Properties.Get(nameof(ForceRegenerateReferenceOutputAttribute).RemoveAttribute()) is bool tmp2 && tmp2;
                if (validReferenceOutput && !forceRegenerateReferenceOutput)
                {
                    IntegrationTestsHelper.AssertFirstMethod(resolvedConfiguration);
                }
                else
                {
                    IntegrationTestsHelper.WriteReferenceOutputFile(resolvedConfiguration);
                    Console.WriteLine(IntegrationTestsHelper.GetFormattedReferenceOutputFile());
                    Assert.Fail("Reference output not validated");
                }
            }
        }
示例#5
0
        private void AttemptInjectUsesThirdPartyLibraryBase(bool setThirdPartyLibraryPath)
        {
            InjectedMethod injectedMethod =
                new InjectedMethod(
                    InjectedLibraryPath,
                    $"{typeof(TestInjectedMethods).FullName}.{nameof(TestInjectedMethods.UsesThirdPartyLibrary)}"
                    );

            InjectionConfiguration configuration = IntegrationTestsHelper.GetBasicInjectionConfiguration(false, false, injectedMethod);

            configuration =
                configuration
                .WithInjecteeAssemblies(
                    configuration.InjecteeAssemblies.Select(
                        assembly => {
                List <IAllowedAssemblyReference> list = assembly.AllowedAssemblyReferences.ToList();
                list.Add(
                    new AllowedAssemblyReference(
                        "Tests.ThirdPartyLibrary",
                        false,
                        setThirdPartyLibraryPath ? "Tests.ThirdPartyLibrary.Different.dll" : null));
                List <IIgnoredMemberReference> list2 = assembly.IgnoredMemberReferences.ToList();
                list2.Add(new IgnoredMemberReference("some filter"));
                assembly =
                    assembly
                    .WithAllowedAssemblyReferences(list.AsReadOnly())
                    .WithIgnoredMemberReferences(list2.AsReadOnly());
                return(assembly);
            })
                    .ToList().AsReadOnly()
                    );

            ExecuteSimpleTest(
                configuration,
                new[] { $"{InjecteeClassName}.{nameof(TestInjectee.SingleStatement)}" },
                false
                );
        }