public void TestSimpleChoice2() { ValidationContext validationContext = new ValidationContext(); OpenXmlElement errorChild; BuildSubElement bldSub = new BuildSubElement(); var particleConstraint = bldSub.ParticleConstraint.Build(Version); var target = particleConstraint.ParticleValidator as ChoiceParticleValidator; validationContext.Element = bldSub; var expected = bldSub; //<xsd:complexType name="CT_AnimationGraphicalObjectBuildProperties"> // <xsd:choice> // <xsd:element name="bldDgm" type="CT_AnimationDgmBuildProperties"> // <xsd:element name="bldChart" type="CT_AnimationChartBuildProperties"> // </xsd:choice> //</xsd:complexType> // ***** good case ****** bldSub.AppendChild(new Drawing.BuildChart()); target.Validate(validationContext); Assert.True(validationContext.Valid); bldSub.RemoveAllChildren(); bldSub.AppendChild(new Drawing.BuildDiagram()); target.Validate(validationContext); Assert.True(validationContext.Valid); // ***** error case ****** // empty bldSub.RemoveAllChildren(); 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_IncompleteContentExpectingComplex", validationContext.Errors[0].Id); Assert.Contains(":bldDgm", validationContext.Errors[0].Description); Assert.Contains(":bldChart", validationContext.Errors[0].Description); validationContext.Clear(); // both element are exist bldSub.Append(new Drawing.BuildChart(), new Drawing.BuildDiagram()); errorChild = bldSub.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_UnexpectedElementContentExpectingComplex", validationContext.Errors[0].Id); Assert.DoesNotContain(ValidationErrorStrings.Fmt_ListOfPossibleElements, validationContext.Errors[0].Description); validationContext.Clear(); //first is invalid errorChild = bldSub.PrependChild(new Paragraph()); 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(":bldDgm", validationContext.Errors[0].Description); Assert.Contains(":bldChart", validationContext.Errors[0].Description); }
private void TestSimpleChoice2(SdbSchemaDatas sdbSchemaDatas) { ValidationContext validationContext = new ValidationContext(); ValidationResult actual = new ValidationResult(); validationContext.ValidationErrorEventHandler += actual.OnValidationError; OpenXmlElement errorChild; BuildSubElement bldSub = new BuildSubElement(); var particleConstraint = sdbSchemaDatas.GetSchemaTypeData(bldSub).ParticleConstraint; var target = particleConstraint.ParticleValidator as ChoiceParticleValidator; validationContext.Element = bldSub; var expected = bldSub; //<xsd:complexType name="CT_AnimationGraphicalObjectBuildProperties"> // <xsd:choice> // <xsd:element name="bldDgm" type="CT_AnimationDgmBuildProperties"> // <xsd:element name="bldChart" type="CT_AnimationChartBuildProperties"> // </xsd:choice> //</xsd:complexType> // ***** good case ****** bldSub.AppendChild(new Drawing.BuildChart()); target.Validate(validationContext); Assert.True(actual.Valid); bldSub.RemoveAllChildren(); bldSub.AppendChild(new Drawing.BuildDiagram()); target.Validate(validationContext); Assert.True(actual.Valid); // ***** error case ****** // empty bldSub.RemoveAllChildren(); target.Validate(validationContext); Assert.False(actual.Valid); Assert.Equal(1, actual.Errors.Count); Assert.Same(expected, actual.Errors[0].Node); Assert.Equal(ValidationErrorType.Schema, actual.Errors[0].ErrorType); Assert.Equal("Sch_IncompleteContentExpectingComplex", actual.Errors[0].Id); Assert.True(actual.Errors[0].Description.Contains(":bldDgm")); Assert.True(actual.Errors[0].Description.Contains(":bldChart")); actual.Clear(); // both element are exist bldSub.Append(new Drawing.BuildChart(), new Drawing.BuildDiagram()); errorChild = bldSub.LastChild; target.Validate(validationContext); Assert.False(actual.Valid); Assert.Equal(1, actual.Errors.Count); Assert.Same(expected, actual.Errors[0].Node); Assert.Same(errorChild, actual.Errors[0].RelatedNode); Assert.Equal(ValidationErrorType.Schema, actual.Errors[0].ErrorType); Assert.Equal("Sch_UnexpectedElementContentExpectingComplex", actual.Errors[0].Id); Assert.False(actual.Errors[0].Description.Contains(ValidationErrorStrings.Fmt_ListOfPossibleElements)); actual.Clear(); //first is invalid errorChild = bldSub.PrependChild(new Paragraph()); target.Validate(validationContext); Assert.False(actual.Valid); Assert.Equal(1, actual.Errors.Count); Assert.Same(expected, actual.Errors[0].Node); Assert.Same(errorChild, actual.Errors[0].RelatedNode); Assert.Equal(ValidationErrorType.Schema, actual.Errors[0].ErrorType); Assert.Equal("Sch_InvalidElementContentExpectingComplex", actual.Errors[0].Id); Assert.True(actual.Errors[0].Description.Contains(":bldDgm")); Assert.True(actual.Errors[0].Description.Contains(":bldChart")); }