Пример #1
0
        private Type GenerateTestAssemblyAndGetType(string assemblyName)
        {
            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(
                @"
				using System;
				using System.Collections.Generic;
				using Microsoft.Practices.Modeling;
				using Microsoft.Practices.Modeling.ExtensionProvider.Extension;
				using Microsoft.Practices.Modeling.ExtensionProvider.Metadata;

				namespace "                 + assemblyName + @"
				{
					[ExtensionProviderAttribute(""74ECFD8C-4906-4a71-9B23-DCB43C26928A"", ""TestExt"", ""Test Extension"", typeof(Object))]
					public class TestExtensionProvider : ExtensionProviderBase
					{
						public override IList<Type> ObjectExtenders
						{
							get { return new List<Type>(); }
						}				
					}
				}"                ,
                assemblyName);

            Assert.IsFalse(results.Errors.HasErrors, "Errors in CompileAssemblyFromSource: " + (results.Errors.HasErrors ? results.Errors[0].ErrorText : ""));
            Type generatedType = results.CompiledAssembly.GetType(assemblyName + ".TestExtensionProvider", false);

            Assert.IsTrue(File.Exists(results.PathToAssembly));

            return(generatedType);
        }
Пример #2
0
        private Type CompileAndGetType(string content)
        {
            EnsureNamespace(ref content);
            string          typeName = DefaultNamespace + ".I" + ServiceContractElementName;
            CompilerResults results  = DynamicCompilation.CompileAssemblyFromSource(content, new string[] { "System.Web.Services.dll" });

            Type generatedType = results.CompiledAssembly.GetType(typeName, false);

            Assert.IsNotNull(generatedType, "Invalid type: " + typeName);
            return(generatedType);
        }
Пример #3
0
        protected Type CompileAndGetType(string content)
        {
            EnsureNamespace(ref content);
            string          typeName = DefaultNamespace + "." + ElementName;
            CompilerResults results  = DynamicCompilation.CompileAssemblyFromSource(content);

            Type generatedType = results.CompiledAssembly.GetType(typeName, false);

            Assert.IsNotNull(generatedType, "Invalid type: " + typeName);
            return(generatedType);
        }
Пример #4
0
        public void ShouldGenerateWithXmlSerializerImporterFromData()
        {
            MyArtifactLinkWithXmlImporterFromData link     = new MyArtifactLinkWithXmlImporterFromData("SampleData\\SimpleSchema1.xsd", "element1");
            XmlSchemaCodeGenerationStrategy       strategy = new XmlSchemaCodeGenerationStrategy();
            CodeGenerationResults content = strategy.Generate(link);

            Assert.AreEqual <int>(3, content.Count);
            Assert.AreEqual <int>(0, strategy.Errors.Count);
            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(JoinContent(content), ((List <string>)strategy.AssemblyReferences).ToArray());

            TypeAsserter.AssertAttribute <XmlRootAttribute>(results.CompiledAssembly.GetType("element1"));
        }
        private string CreateMockImportersAssembly(string assemblyName)
        {
            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(
                File.ReadAllText(ConfigurationLoader.GetConfigurationFilePath(@"SampleData\DescriptionModel\MockImporters.cs")),
                assemblyName);

            if (results.PathToAssembly == null)
            {
                return(null);
            }

            return(ConfigurationLoader.GetConfigurationFilePath(results.PathToAssembly));
        }
Пример #6
0
        /// <summary>
        /// Optionally compiles and loads target rules assembly.
        /// </summary>
        /// <param name="Properties"></param>
        /// <param name="TargetsDllFilename"></param>
        /// <param name="DoNotCompile"></param>
        /// <param name="TargetScripts"></param>
        private static void CompileAndLoadTargetsAssembly(ProjectProperties Properties, string TargetsDllFilename, bool DoNotCompile, List <string> TargetScripts)
        {
            CommandUtils.Log("Compiling targets DLL: {0}", TargetsDllFilename);

            if (!DoNotCompile && GlobalCommandLine.NoCodeProject)
            {
                //throw new AutomationException("Building is not supported when -nocodeproject flag is provided.");
            }

            var ReferencedAssemblies = new List <string>()
            {
                "System.dll",
                "System.Core.dll",
                "System.Xml.dll",
                typeof(UnrealBuildTool.UnrealBuildTool).Assembly.Location
            };
            var TargetsDLL       = DynamicCompilation.CompileAndLoadAssembly(TargetsDllFilename, TargetScripts, ReferencedAssemblies, null, DoNotCompile);
            var DummyTargetInfo  = new TargetInfo(UnrealTargetPlatform.Win64, UnrealTargetConfiguration.Development);
            var AllCompiledTypes = TargetsDLL.GetTypes();

            foreach (Type TargetType in AllCompiledTypes)
            {
                // Find TargetRules but skip all "UE4Editor", "UE4Game" targets.
                if (typeof(TargetRules).IsAssignableFrom(TargetType))
                {
                    // Create an instance of this type
                    CommandUtils.LogVerbose("Creating target rules object: {0}", TargetType.Name);
                    var Rules = Activator.CreateInstance(TargetType, DummyTargetInfo) as TargetRules;
                    CommandUtils.LogVerbose("Adding target: {0} ({1})", TargetType.Name, Rules.Type);

                    SingleTargetProperties TargetData;
                    TargetData.TargetName = GetTargetName(TargetType);
                    Rules.TargetName      = TargetData.TargetName;
                    TargetData.Rules      = Rules;
                    if (Rules.Type == TargetRules.TargetType.Program)
                    {
                        Properties.Programs.Add(TargetData);
                    }
                    else
                    {
                        Properties.Targets.Add(Rules.Type, TargetData);
                    }

                    Properties.bUsesSteam |= Rules.bUsesSteam;
                    Properties.bUsesCEF3  |= Rules.bUsesCEF3;
                    Properties.bUsesSlate |= Rules.bUsesSlate;
                    Properties.bDebugBuildsActuallyUseDebugCRT |= Rules.bDebugBuildsActuallyUseDebugCRT;
                    Properties.bUsesSlateEditorStyle           |= Rules.bUsesSlateEditorStyle;
                }
            }
        }
Пример #7
0
        public void ShouldGenerateOneXmlRootAttribute()
        {
            MyArtifactLink link = new MyArtifactLink("SampleData\\OneXmlRootAttribute.xsd", "ImplementsAbstractCT");

            Utility.SetData(link, true, XmlSchemaCodeGenerationStrategy.UseXmlSerializerDataKey);
            XmlSchemaCodeGenerationStrategy strategy = new XmlSchemaCodeGenerationStrategy();
            CodeGenerationResults           content  = strategy.Generate(link);

            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(JoinContent(content), ((List <string>)strategy.AssemblyReferences).ToArray());

            TypeAsserter.AssertAttribute <XmlRootAttribute>(results.CompiledAssembly.GetType("ImplementsAbstractCT"));
            Type type = results.CompiledAssembly.GetType("MyAbstractCT");

            Assert.AreEqual <int>(0, type.GetCustomAttributes(typeof(XmlRootAttribute), true).Length);
        }
Пример #8
0
        public void ShouldGenerateTypeWithBaseTypes()
        {
            XmlSchemaCodeGenerationStrategy strategy = new XmlSchemaCodeGenerationStrategy();
            CodeGenerationResults           content  = strategy.Generate(new MyArtifactLink("SampleData\\BaseTypes.xsd", "GetLandmarkPointsByRectResponse"));

            Assert.AreEqual <int>(15, content.Count);
            Assert.AreEqual <int>(0, strategy.Errors.Count);
            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(JoinContent(content), ((List <string>)strategy.AssemblyReferences).ToArray());

            Assert.IsNotNull(results.CompiledAssembly.GetType("GetLandmarkPointsByRectResponse", false, false));
            Assert.IsNotNull(results.CompiledAssembly.GetType("LandmarkPoint", false, false));
            Assert.IsNotNull(results.CompiledAssembly.GetType("LandmarkBase", false, false));
            Assert.IsNotNull(results.CompiledAssembly.GetType("ShapeType", false, false));
            Assert.IsNotNull(results.CompiledAssembly.GetType("LonLatPt", false, false));
        }
Пример #9
0
        public void ShouldGenerateTypesRefsFromAttributes()
        {
            MyArtifactLink link = new MyArtifactLink("SampleData\\TypeRefsInAttributes.wsdl", "AttachmentAddRq");

            Utility.SetData(link, true, XmlSchemaCodeGenerationStrategy.UseXmlSerializerDataKey);
            XmlSchemaCodeGenerationStrategy strategy = new XmlSchemaCodeGenerationStrategy();
            CodeGenerationResults           content  = strategy.Generate(link);

            Assert.AreEqual <int>(69, content.Count);
            Assert.AreEqual <int>(0, strategy.Errors.Count);

            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(JoinContent(content), ((List <string>)strategy.AssemblyReferences).ToArray());

            Assert.AreEqual <int>(69, results.CompiledAssembly.GetTypes().Length);
            Assert.IsNotNull(results.CompiledAssembly.GetType("AddressType", false, false));
        }
Пример #10
0
        /// <summary>
        /// Optionally compiles and loads target rules assembly.
        /// </summary>
        /// <param name="Properties"></param>
        /// <param name="TargetsDllFilename"></param>
        /// <param name="DoNotCompile"></param>
        /// <param name="TargetScripts"></param>
        private static void CompileAndLoadTargetsAssembly(ProjectProperties Properties, FileReference TargetsDllFilename, bool DoNotCompile, List <FileReference> TargetScripts)
        {
            CommandUtils.LogVerbose("Compiling targets DLL: {0}", TargetsDllFilename);

            var ReferencedAssemblies = new List <string>()
            {
                "System.dll",
                "System.Core.dll",
                "System.Xml.dll",
                typeof(UnrealBuildTool.PlatformExports).Assembly.Location
            };
            var TargetsDLL       = DynamicCompilation.CompileAndLoadAssembly(TargetsDllFilename, TargetScripts, ReferencedAssemblies, null, DoNotCompile);
            var AllCompiledTypes = TargetsDLL.GetTypes();

            foreach (Type TargetType in AllCompiledTypes)
            {
                // Find TargetRules but skip all "UE4Editor", "UE4Game" targets.
                if (typeof(TargetRules).IsAssignableFrom(TargetType))
                {
                    string TargetName = GetTargetName(TargetType);

                    FileReference ProjectFile;
                    UProjectInfo.TryGetProjectForTarget(TargetName, out ProjectFile);

                    var DummyTargetInfo = new TargetInfo(TargetName, BuildHostPlatform.Current.Platform, UnrealTargetConfiguration.Development, "", ProjectFile);

                    // Create an instance of this type
                    CommandUtils.LogVerbose("Creating target rules object: {0}", TargetType.Name);
                    var Rules = Activator.CreateInstance(TargetType, DummyTargetInfo) as TargetRules;
                    CommandUtils.LogVerbose("Adding target: {0} ({1})", TargetType.Name, Rules.Type);

                    SingleTargetProperties TargetData;
                    TargetData.TargetName = GetTargetName(TargetType);
                    TargetData.Rules      = Rules;
                    if (Rules.Type == global::UnrealBuildTool.TargetType.Program)
                    {
                        Properties.Programs.Add(TargetData);
                    }
                    else
                    {
                        Properties.Targets.Add(Rules.Type, TargetData);
                    }
                }
            }
        }
Пример #11
0
        private static void GenerateTestAssembly(string assemblyName)
        {
            string path = Path.Combine(LibraryPath, assemblyName + ".dll");

            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(
                @" 
				namespace "                 + assemblyName + @" {
					public class TestClass { public void TestMethod() { } }
					
					public interface ITestInterface { }

					public class TestInterfaceClass : ITestInterface { public void TestNewMethod() { } }
				}
				"                ,
                path,
                new CSharp.CSharpCodeProvider(),
                new string[] { });

            Assert.IsTrue(File.Exists(path));
        }
        public void ShouldGenerateContractFromHostWithDataContractSerializerType()
        {
            ContractGenerationOptions options = new ContractGenerationOptions();

            options.OutputConfiguration = ConfigurationLoader.LoadConfiguration(@"SampleData\Empty.config");
            options.ClrNamespace        = "Test.Namespace1";
            ContractGenerator generator = new ContractGenerator(options);

            generator.Generate(GetMetadataSet(HostAddress));

            string proxyClass = GetClassFromCcu(options.CodeProvider, generator.CodeCompileUnit);

            Assert.IsNotNull(proxyClass);
            Assert.IsTrue(proxyClass.Contains(options.ClrNamespace), "Contains namespace");
            Assert.IsTrue(proxyClass.Contains("MyDataContract"), "Contains MyDataContract class");

            CompilerResults results = DynamicCompilation.CompileAssemblyFromSource(proxyClass);

            Type generatedType = results.CompiledAssembly.GetType(options.ClrNamespace + ".MyDataContract", false);

            Assert.IsNotNull(generatedType);
        }