private void TestSimpleChoice4(SdbSchemaDatas sdbSchemaDatas) { ValidationContext validationContext = new ValidationContext(); ValidationResult actual = new ValidationResult(); validationContext.ValidationErrorEventHandler += actual.OnValidationError; OpenXmlElement errorChild; RevisionRowColumn rRowColumn = new RevisionRowColumn(); var particleConstraint = sdbSchemaDatas.GetSchemaTypeData(rRowColumn).ParticleConstraint; var target = particleConstraint.ParticleValidator as ChoiceParticleValidator; validationContext.Element = rRowColumn; var expected = rRowColumn; //<xsd:complexType name="CT_RevisionRowColumn"> // <xsd:choice minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="undo" type="CT_UndoInfo" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rcc" type="CT_RevisionCellChange" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rfmt" type="CT_RevisionFormatting" minOccurs="0" maxOccurs="unbounded"> // </xsd:choice> //</xsd:complexType> // ***** good case ****** // empty is ok target.Validate(validationContext); Assert.True(actual.Valid); // rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(actual.Valid); // dup is ok rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(actual.Valid); // more is ok rRowColumn.AppendChild(new RevisionFormat()); target.Validate(validationContext); Assert.True(actual.Valid); // more is ok rRowColumn.AppendChild(new Undo()); target.Validate(validationContext); Assert.True(actual.Valid); // ***** error case ****** //first is invalid errorChild = rRowColumn.PrependChild(new Paragraph()); target.Validate(validationContext); Assert.False(actual.Valid); Assert.Single(actual.Errors); 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.Contains(":undo", actual.Errors[0].Description); Assert.Contains(":rfmt", actual.Errors[0].Description); actual.Clear(); //invalid child in middle rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.InsertBefore(new Paragraph(), rRowColumn.LastChild); target.Validate(validationContext); Assert.False(actual.Valid); Assert.Single(actual.Errors); 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.Contains(":undo", actual.Errors[0].Description); Assert.Contains(":rfmt", actual.Errors[0].Description); actual.Clear(); //invalid child in last rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.AppendChild(new Paragraph()); target.Validate(validationContext); Assert.False(actual.Valid); Assert.Single(actual.Errors); 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.Contains(":undo", actual.Errors[0].Description); Assert.Contains(":rfmt", actual.Errors[0].Description); }
public void TestSimpleChoice4() { ValidationContext validationContext = new ValidationContext(); OpenXmlElement errorChild; RevisionRowColumn rRowColumn = new RevisionRowColumn(); var particleConstraint = rRowColumn.ParticleConstraint.Build(FileFormatVersions.Office2007); var target = particleConstraint.ParticleValidator as ChoiceParticleValidator; validationContext.Element = rRowColumn; var expected = rRowColumn; //<xsd:complexType name="CT_RevisionRowColumn"> // <xsd:choice minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="undo" type="CT_UndoInfo" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rcc" type="CT_RevisionCellChange" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rfmt" type="CT_RevisionFormatting" minOccurs="0" maxOccurs="unbounded"> // </xsd:choice> //</xsd:complexType> // ***** good case ****** // empty is OK target.Validate(validationContext); Assert.True(validationContext.Valid); rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(validationContext.Valid); // duplicate is ok rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(validationContext.Valid); // more is ok rRowColumn.AppendChild(new RevisionFormat()); target.Validate(validationContext); Assert.True(validationContext.Valid); // more is ok rRowColumn.AppendChild(new Undo()); target.Validate(validationContext); Assert.True(validationContext.Valid); // ***** error case ****** //first is invalid errorChild = rRowColumn.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(":undo", validationContext.Errors[0].Description); Assert.Contains(":rfmt", validationContext.Errors[0].Description); validationContext.Clear(); //invalid child in middle rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.InsertBefore(new Paragraph(), rRowColumn.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(":undo", validationContext.Errors[0].Description); Assert.Contains(":rfmt", validationContext.Errors[0].Description); validationContext.Clear(); //invalid child in last rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.AppendChild(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(":undo", validationContext.Errors[0].Description); Assert.Contains(":rfmt", validationContext.Errors[0].Description); }
private void TestSimpleChoice4(SdbSchemaDatas sdbSchemaDatas) { ValidationContext validationContext = new ValidationContext(); ValidationResult actual = new ValidationResult(); validationContext.ValidationErrorEventHandler += actual.OnValidationError; OpenXmlElement errorChild; RevisionRowColumn rRowColumn = new RevisionRowColumn(); var particleConstraint = sdbSchemaDatas.GetSchemaTypeData(rRowColumn).ParticleConstraint; var target = particleConstraint.ParticleValidator as ChoiceParticleValidator; validationContext.Element = rRowColumn; var expected = rRowColumn; //<xsd:complexType name="CT_RevisionRowColumn"> // <xsd:choice minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="undo" type="CT_UndoInfo" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rcc" type="CT_RevisionCellChange" minOccurs="0" maxOccurs="unbounded"> // <xsd:element name="rfmt" type="CT_RevisionFormatting" minOccurs="0" maxOccurs="unbounded"> // </xsd:choice> //</xsd:complexType> // ***** good case ****** // empty is ok target.Validate(validationContext); Assert.True(actual.Valid); // rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(actual.Valid); // dup is ok rRowColumn.AppendChild(new RevisionCellChange()); target.Validate(validationContext); Assert.True(actual.Valid); // more is ok rRowColumn.AppendChild(new RevisionFormat()); target.Validate(validationContext); Assert.True(actual.Valid); // more is ok rRowColumn.AppendChild(new Undo()); target.Validate(validationContext); Assert.True(actual.Valid); // ***** error case ****** //first is invalid errorChild = rRowColumn.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(":undo")); Assert.True(actual.Errors[0].Description.Contains(":rfmt")); actual.Clear(); //invalid child in middle rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.InsertBefore(new Paragraph(), rRowColumn.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_InvalidElementContentExpectingComplex", actual.Errors[0].Id); Assert.True(actual.Errors[0].Description.Contains(":undo")); Assert.True(actual.Errors[0].Description.Contains(":rfmt")); actual.Clear(); //invalid child in last rRowColumn.RemoveChild(errorChild); errorChild = rRowColumn.AppendChild(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(":undo")); Assert.True(actual.Errors[0].Description.Contains(":rfmt")); }