From 0e11080488fb88571c9a3c35b5aabd114171d392 Mon Sep 17 00:00:00 2001 From: beppemarazzi Date: Fri, 24 Jun 2022 12:26:31 +0200 Subject: [PATCH] fix interface for attributeGroup --- XmlSchemaClassGenerator.Tests/XmlTests.cs | 46 +++++++++++++++++++++++ XmlSchemaClassGenerator/ModelBuilder.cs | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/XmlSchemaClassGenerator.Tests/XmlTests.cs b/XmlSchemaClassGenerator.Tests/XmlTests.cs index 21dd017f..d091b056 100644 --- a/XmlSchemaClassGenerator.Tests/XmlTests.cs +++ b/XmlSchemaClassGenerator.Tests/XmlTests.cs @@ -2747,5 +2747,51 @@ public void CollectionSetterInAttributeGroupInterfaceIsPublicIfCollectionSetterM Assert.True(interfaceHasPublicSetter); Assert.True(implementerHasPublicSetter); } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void SimpleInterface(bool generateInterface) + { + const string xsd = @" + + + + + + + + + + + + +"; + + var generator = new Generator + { + NamespaceProvider = new NamespaceProvider + { + GenerateNamespace = key => "Test", + }, + GenerateInterfaces = generateInterface, + }; + var contents = ConvertXml(nameof(SimpleInterface) + $"({generateInterface})", xsd, generator).ToArray(); + var assembly = Compiler.Compile(nameof(CollectionSetterInAttributeGroupInterfaceIsPublicIfCollectionSetterModeIsPublic), contents); + + var interfaceCommon = assembly.GetType("Test.ICommon"); + var typeA = assembly.GetType("Test.A"); + var typeB = assembly.GetType("Test.B"); + if(generateInterface) + { + Assert.True(interfaceCommon.IsInterface); + Assert.True(interfaceCommon.IsAssignableFrom(typeA)); + Assert.True(interfaceCommon.IsAssignableFrom(typeB)); + } + else + { + Assert.Null(interfaceCommon); + } + } } } diff --git a/XmlSchemaClassGenerator/ModelBuilder.cs b/XmlSchemaClassGenerator/ModelBuilder.cs index 7373efc2..5f8776ff 100644 --- a/XmlSchemaClassGenerator/ModelBuilder.cs +++ b/XmlSchemaClassGenerator/ModelBuilder.cs @@ -549,7 +549,7 @@ private TypeModel CreateTypeModel(XmlSchemaComplexType complexType) classModel.Properties.AddRange(attributeProperties); if (_configuration.GenerateInterfaces) - AddInterfaces(classModel, items); + AddInterfaces(classModel, attributes); } XmlSchemaAnyAttribute anyAttribute = null;