public void CanAddAttributeToGeneratedModelClass() { CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, "ClassAttributeTest"); generator.AddClassAttribute(new AttributeModel("Serializable")); generator.AddClassAttribute(new AttributeModel("XmlRoot", new object[] { "add" })); this.namesp.References.Add(NamespaceReference.System); this.namesp.References.Add(NamespaceReference.SystemXmlSerialization); generator.GenerateCCsharpClass(this.namesp); using (StreamReader reader = File.OpenText(Path.Combine(this.csFilePath, "ClassAttributeTest.cs"))) { string fileContents = reader.ReadToEnd(); Assert.IsTrue(fileContents.Contains("[Serializable()]")); Assert.IsTrue(fileContents.Contains("[XmlRoot(\"add\")]")); } generator.CompileClassFromGeneratedCsFile(this.namesp); string assemblyName = Path.Combine(this.csFilePath, $"{this.namesp.Name}.dll"); loadAssemblyInSecondaryAppDomain( assemblyName, generatedAssembly => { Type generatedType = generatedAssembly.GetType($"{namesp.Name}.ClassAttributeTest"); Assert.IsNotNull(generatedType); }); }
public void CanAddNamespaceReferenceToAssembledFiles() { string secondaryClassName = "DifferentTestClass"; CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "AssemblyCoordinatorTests"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); coordinator.StageModelForCompilation(model); coordinator.AddNamespaceImport(NamespaceReference.SystemXml); CodeDomClassModel model2 = coordinator.CreateClassModel(secondaryClassName); coordinator.StageModelForCompilation(model2); coordinator.CompileCSharpCode(); using (StreamReader reader = File.OpenText(Path.Combine(this.csFilePath, $"{this.className}.cs"))) { string fileContents = reader.ReadToEnd(); Assert.IsTrue(fileContents.Contains("using System;")); Assert.IsTrue(fileContents.Contains("using System.Xml;")); } using (StreamReader reader2 = File.OpenText(Path.Combine(this.csFilePath, $"{secondaryClassName}.cs"))) { string fileContents = reader2.ReadToEnd(); Assert.IsTrue(fileContents.Contains("using System;")); Assert.IsTrue(fileContents.Contains("using System.Xml;")); } }
public void CanCompileMultipleClassesIntoAssembly() { string propName = "Id"; string assemblyName = Path.Combine(this.csFilePath, "AssemblyCoordinatorTests.dll"); string secondaryClassName = "DifferentTestClass"; CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "AssemblyCoordinatorTests"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); model.AddProperty(propName, typeof(int)); coordinator.StageModelForCompilation(model); CodeDomClassModel model2 = coordinator.CreateClassModel(secondaryClassName); model2.AddProperty("StringProperty", typeof(string)); coordinator.StageModelForCompilation(model2); coordinator.CompileCSharpCode(); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{this.className}.cs"))); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{secondaryClassName}.cs"))); Assert.IsTrue(File.Exists(assemblyName)); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); object generatedObject = Activator.CreateInstance(generatedType); Assert.IsNotNull(generatedObject); Type generatedType2 = generatedAssembly.GetType($"{namesp.Name}.{secondaryClassName}"); object generatedObject2 = Activator.CreateInstance(generatedType2); Assert.IsNotNull(generatedObject2); }
public void CanInstantiateModelFromCoordinator() { CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "Generated"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); Assert.IsNotNull(model); }
public void CanCompileGeneratedFile() { CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, className); generator.CompileClassFromGeneratedCsFile(this.namesp); string assemblyName = Path.Combine(this.csFilePath, $"{this.namesp.Name}.dll"); Assert.IsTrue(File.Exists(assemblyName)); }
public void CanCreateCsFile() { string finalFileName = Path.Combine(this.csFilePath, $"{className}.cs"); CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, className); generator.GenerateCCsharpClass(this.namesp); Assert.IsTrue(File.Exists(finalFileName)); }
public void CanInstantiateClassFromGeneratedFile() { CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, className); generator.CompileClassFromGeneratedCsFile(this.namesp); string assemblyName = Path.Combine(this.csFilePath, $"{this.namesp.Name}.dll"); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); object generatedObject = Activator.CreateInstance(generatedType); Assert.IsNotNull(generatedObject); }
public void CanAddPropertyToGeneratedModel() { string propName = "Id"; CodeDomClassModel generator = new CodeDomClassModel(this.csFilePath, className); generator.AddProperty(propName, typeof(int)); generator.CompileClassFromGeneratedCsFile(this.namesp); string assemblyName = Path.Combine(this.csFilePath, $"{this.namesp.Name}.dll"); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); var accessor = TypeAccessor.Create(generatedType); object generatedObject = Activator.CreateInstance(generatedType); accessor[generatedObject, propName] = 9999; object result = accessor[generatedObject, propName]; Assert.AreEqual(9999, (int)result); }
public void ClassCanBeCompiledFromCoordinator() { string propName = "Id"; string assemblyName = Path.Combine(this.csFilePath, "AssemblyCoordinatorTests.dll"); CodeDomAssemblyCoordinator coordinator = new CodeDomAssemblyCoordinator(this.csFilePath, "AssemblyCoordinatorTests"); CodeDomClassModel model = coordinator.CreateClassModel(this.className); model.AddProperty(propName, typeof(int)); coordinator.StageModelForCompilation(model); coordinator.AddNamespaceImport(NamespaceReference.SystemXml); coordinator.CompileCSharpCode(); Assert.IsTrue(File.Exists(Path.Combine(this.csFilePath, $"{this.className}.cs"))); Assert.IsTrue(File.Exists(assemblyName)); Assembly generatedAssembly = Assembly.LoadFile(assemblyName); Type generatedType = generatedAssembly.GetType($"{namesp.Name}.{className}"); object generatedObject = Activator.CreateInstance(generatedType); Assert.IsNotNull(generatedObject); }