public void RoundTripEnum() { ModuleDeclaration module = ReflectToModules("public enum Foo {\ncase a, b, c\n } ", "SomeModule").Find(m => m.Name == "SomeModule"); EnumDeclaration fooClass = module.AllEnums.Where(cl => cl.Name == "Foo").FirstOrDefault(); Assert.IsNotNull(fooClass); EnumDeclaration unrootedFoo = fooClass.MakeUnrooted() as EnumDeclaration; Entity entity = new Entity { SharpNamespace = "SomeModule", SharpTypeName = "Foo", Type = unrootedFoo }; TypeDatabase db = new TypeDatabase(); db.Add(entity); MemoryStream ostm = new MemoryStream(); db.Write(ostm, "SomeModule"); ostm.Seek(0, SeekOrigin.Begin); TypeDatabase dbread = new TypeDatabase(); var errors = dbread.Read(ostm); Utils.CheckErrors(errors); Entity entityRead = dbread.EntityForSwiftName("SomeModule.Foo"); Assert.IsNotNull(entityRead); Assert.AreEqual(entity.SharpNamespace, entityRead.SharpNamespace); Assert.AreEqual(entity.SharpTypeName, entityRead.SharpTypeName); Assert.IsTrue(entity.Type is EnumDeclaration); }
EnumDeclaration ToEnumDeclaration(TypeDefinition definition) { var name = definition.Name; var moduleName = definition.Namespace; TypeAggregator.RemapModuleAndName(platform, ref moduleName, ref name, TypeType.Enum); var module = ToModuleDeclaration(moduleName); var enumDeclaration = new EnumDeclaration { Name = name, Access = ToAccessibility(definition), Module = module, ParentExtension = null, Kind = TypeKind.Enum, Members = new List <Member> (), IsObjC = true, IsDeprecated = false, IsUnavailable = false, }; foreach (var field in definition.Fields) { if (field.Name == "value__") { continue; } enumDeclaration.Elements.Add(ToEnumElement(field)); } return(enumDeclaration.MakeUnrooted() as EnumDeclaration); }