private void TestSimpleAll2(SdbSchemaDatas sdbSchemaDatas) { ValidationContext validationContext = new ValidationContext(); OpenXmlElement errorChild; ShapeLayout shapeLayout = new ShapeLayout(); var particleConstraint = sdbSchemaDatas.GetSchemaTypeData(shapeLayout).ParticleConstraint; var target = particleConstraint.ParticleValidator as AllParticleValidator; validationContext.Element = shapeLayout; var expected = shapeLayout; //<xsd:complexType name="CT_ShapeLayout"> // <xsd:all> // <xsd:element name="idmap" type="CT_IdMap" minOccurs="0"> // <xsd:element name="regrouptable" type="CT_RegroupTable" minOccurs="0"> // <xsd:element name="rules" type="CT_Rules" minOccurs="0"> // </xsd:all> // <xsd:attributeGroup ref="v:AG_Ext" /> //</xsd:complexType> // ***** good case ****** // empty is ok target.Validate(validationContext); Assert.True(validationContext.Valid); // any one is ok shapeLayout.AppendChild(new RegroupTable()); target.Validate(validationContext); Assert.True(validationContext.Valid); // any order is ok shapeLayout.AppendChild(new ShapeIdMap()); target.Validate(validationContext); Assert.True(validationContext.Valid); // any order is ok shapeLayout.AppendChild(new Rules()); target.Validate(validationContext); Assert.True(validationContext.Valid); // ***** error case ****** // first is invlaid errorChild = shapeLayout.PrependChild(new Paragraphs()); target.Validate(validationContext); Assert.False(validationContext.Valid); Assert.Single(validationContext.Errors); Assert.Same(expected, validationContext.Errors[0].Node); Assert.Same(errorChild, validationContext.Errors[0].RelatedNode); Assert.Equal(ValidationErrorType.Schema, validationContext.Errors[0].ErrorType); Assert.Equal("Sch_InvalidElementContentExpectingComplex", validationContext.Errors[0].Id); Assert.Contains(":idmap", validationContext.Errors[0].Description); Assert.Contains(":rules", validationContext.Errors[0].Description); shapeLayout.RemoveChild(errorChild); validationContext.Clear(); //invalid child in middle errorChild = shapeLayout.InsertBefore(new Paragraphs(), shapeLayout.LastChild); target.Validate(validationContext); Assert.False(validationContext.Valid); Assert.Single(validationContext.Errors); Assert.Same(expected, validationContext.Errors[0].Node); Assert.Same(errorChild, validationContext.Errors[0].RelatedNode); Assert.Equal(ValidationErrorType.Schema, validationContext.Errors[0].ErrorType); Assert.Equal("Sch_InvalidElementContentExpectingComplex", validationContext.Errors[0].Id); Assert.Contains(":rules", validationContext.Errors[0].Description); shapeLayout.RemoveChild(errorChild); validationContext.Clear(); // dup errorChild = shapeLayout.FirstChild; shapeLayout.PrependChild(new RegroupTable()); target.Validate(validationContext); Assert.False(validationContext.Valid); Assert.Single(validationContext.Errors); Assert.Same(expected, validationContext.Errors[0].Node); Assert.Equal(ValidationErrorType.Schema, validationContext.Errors[0].ErrorType); Assert.Equal("Sch_AllElement", validationContext.Errors[0].Id); Assert.Same(errorChild, validationContext.Errors[0].RelatedNode); shapeLayout.RemoveChild(errorChild); }