diff --git a/src/Generator.Tests/Passes/TestPasses.cs b/src/Generator.Tests/Passes/TestPasses.cs index 58533f0e..856767b5 100644 --- a/src/Generator.Tests/Passes/TestPasses.cs +++ b/src/Generator.Tests/Passes/TestPasses.cs @@ -232,5 +232,23 @@ namespace CppSharp.Generator.Tests.Passes var @class = AstContext.FindDecl("ClassWithAbstractOperator").First(); Assert.AreEqual(@class.Operators.First().GenerationKind, GenerationKind.None); } + + [Test] + public void TestFlattenAnonymousTypesToFields() + { + passBuilder.AddPass(new FlattenAnonymousTypesToFields()); + passBuilder.RunPasses(pass => pass.VisitASTContext(AstContext)); + + var @class = AstContext.FindDecl("TestFlattenAnonymousTypesToFields").First(); + + /* TODO: Enable this test and fix the parsing bug + var @public = @class.Fields.Where(f => f.Name == "Public").FirstOrDefault(); + Assert.IsNotNull(@public); + Assert.AreEqual(AccessSpecifier.Public, @public.Access); */ + + var @protected = @class.Fields.Where(f => f.Name == "Protected").FirstOrDefault(); + Assert.IsNotNull(@protected); + Assert.AreEqual(AccessSpecifier.Protected, @protected.Access); + } } } diff --git a/src/Generator/Passes/FlattenAnonymousTypesToFields.cs b/src/Generator/Passes/FlattenAnonymousTypesToFields.cs index 964cb710..b8fa0b01 100644 --- a/src/Generator/Passes/FlattenAnonymousTypesToFields.cs +++ b/src/Generator/Passes/FlattenAnonymousTypesToFields.cs @@ -75,6 +75,7 @@ namespace CppSharp.Passes { Field nestedField = fieldType.Fields[j]; nestedField.Namespace = @class; + nestedField.Access = fieldType.Access; @class.Fields.Insert(i + j, nestedField); } } diff --git a/tests/Native/Passes.h b/tests/Native/Passes.h index 79ab7ab3..40d794c3 100644 --- a/tests/Native/Passes.h +++ b/tests/Native/Passes.h @@ -84,3 +84,19 @@ enum ConnectionRole }; bool ConnectionRoleToString(const ConnectionRole& role, const char* role_str); + +class TestFlattenAnonymousTypesToFields +{ +/* TODO: Enable this code (and respective test in TestPasses). +public: + union + { + int Public; + }; +*/ +protected: + union + { + int Protected; + }; +};