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