private static bool ValidateLongTime(EdiSimpleDataElement el, MapSimpleDataElement definition) { if (string.IsNullOrEmpty(el.Val)) { return(IsOptional(el.Val, definition)); } switch (el.Val.Length) { case 4: return(ValidateShortTime(el, definition)); case 5: return(el.Val.IsValidDateTimeString("HHmms")); case 6: return(el.Val.IsValidDateTimeString("HHmmss")); case 7: return(el.Val.IsValidDateTimeString("HHmmssf")); case 8: return(el.Val.IsValidDateTimeString("HHmmssff")); default: throw new NotSupportedException($"Time validation with length {el.Val.Length} is not implemented. {el.Type}"); } }
public void Validation_MandatoryDateTimeTest() { EAny def = new EAny() { DataType = DataType.DT, ReqDes = RequirementDesignator.Mandatory, MinLength = 6, MaxLength = 6, }; EAny def2 = new EAny() { DataType = DataType.TM, ReqDes = RequirementDesignator.Mandatory, MinLength = 4, MaxLength = 8, }; var el = new EdiSimpleDataElement(def, ""); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, null); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def2, ""); Assert.IsFalse(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, null); Assert.IsFalse(el.IsValid(def2)); }
public void Validation_OptionalDateTimeTest() { EAny def = new EAny() { DataType = DataType.DT, ReqDes = RequirementDesignator.Optional, MinLength = 6, MaxLength = 6, }; EAny def2 = new EAny() { DataType = DataType.DT, ReqDes = RequirementDesignator.Optional, MinLength = 8, MaxLength = 8, }; EAny def3 = new EAny() { DataType = DataType.TM, ReqDes = RequirementDesignator.Optional, MinLength = 4, MaxLength = 4, }; var el = new EdiSimpleDataElement(def, "160102"); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "125566"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, ""); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def2, "20160102"); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, "22125566"); Assert.IsFalse(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, ""); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def3, "1122"); Assert.IsTrue(el.IsValid(def3)); el = new EdiSimpleDataElement(def3, "4567"); Assert.IsFalse(el.IsValid(def3)); el = new EdiSimpleDataElement(def3, ""); Assert.IsTrue(el.IsValid(def3)); el = new EdiSimpleDataElement(def3, "1526"); Assert.IsTrue(el.IsValid(def3)); }
private static bool ValidateShortDate(EdiSimpleDataElement el, MapSimpleDataElement definition) { if (string.IsNullOrEmpty(el.Val)) { return(IsOptional(el.Val, definition)); } return(el.Val.IsValidDateTimeString("yyMMdd")); }
public void Validation_NumericTest() { EAny def = new EAny() { DataType = DataType.N0, ReqDes = RequirementDesignator.Optional, MinLength = 3, MaxLength = 6, }; EAny def2 = new EAny() { DataType = DataType.N1, ReqDes = RequirementDesignator.Optional, MinLength = 3, MaxLength = 6, }; EAny def3 = new EAny() { DataType = DataType.R, ReqDes = RequirementDesignator.Optional, MinLength = 3, MaxLength = 6, }; var el = new EdiSimpleDataElement(def, "123"); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "12c"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, ""); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def2, "123"); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, "12c"); Assert.IsFalse(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, ""); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def3, "123.23"); Assert.IsTrue(el.IsValid(def3)); el = new EdiSimpleDataElement(def3, "1233c"); Assert.IsFalse(el.IsValid(def3)); el = new EdiSimpleDataElement(def3, ""); Assert.IsTrue(el.IsValid(def3)); }
private static void ValidateSimpleDataElement(EdiSimpleDataElement el, string segName, int segPos, int elPos, IValidatedEntity validationScope) { if (el.Definition == null) { AddError(segName, segPos, elPos, $"Unexpected element '{el.Val}'", validationScope); } else if (el.Definition != null && !el.IsValid(el.Definition)) { AddError(segName, segPos, elPos, $"Invalid value '{el.Val}'", validationScope); } }
public void Validation_BinaryTest() { EAny def = new EAny() { DataType = DataType.B, MinLength = 1, MaxLength = 100, ReqDes = RequirementDesignator.Optional }; var el = new EdiSimpleDataElement(def, "!@#@$$@$!"); Assert.IsTrue(el.IsValid(def)); }
public void Validation_OptionalTimeTest() { EAny def = new EAny() { DataType = DataType.TM, ReqDes = RequirementDesignator.Optional, MinLength = 4, MaxLength = 4, }; EAny def2 = new EAny() { DataType = DataType.TM, ReqDes = RequirementDesignator.Optional, MinLength = 4, MaxLength = 8, }; var el = new EdiSimpleDataElement(def, "1122"); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "4567"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, ""); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "1526"); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "152605"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def2, "0105"); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, "101525"); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, "1105355"); Assert.IsTrue(el.IsValid(def2)); el = new EdiSimpleDataElement(def2, "11053559"); Assert.IsTrue(el.IsValid(def2)); }
private static void ProcessComposite(EdiCompositeDataElement composite, string [] content) { int i = 0; foreach (string val in content) { MapSimpleDataElement elDef = null; if (i < composite.Definition.Content.Count) { elDef = composite.Definition.Content[i]; } EdiSimpleDataElement el = new EdiSimpleDataElement(elDef, val); composite.Content.Add(el); i++; } }
public static EdiSegment ProcessSegment(MapBaseEntity definition, string[] content, int rowPos, string compositeSeparator, IValidatedEntity validationScope) { MapSegment segDef = (MapSegment)definition; EdiSegment seg = new EdiSegment(segDef); int i = 0; foreach (string val in content.Skip(1)) { MapSimpleDataElement elDef = null; MapCompositeDataElement cDef = null; if (i < segDef.Content.Count) { if (segDef.Content[i] is MapSimpleDataElement) { elDef = (MapSimpleDataElement)segDef.Content[i]; } else if (segDef.Content[i] is MapCompositeDataElement) { cDef = (MapCompositeDataElement)segDef.Content[i]; } } //if cDef is null - create simple element. Even if elDef is null // validation will add error of unknown element later on if (cDef == null) { EdiSimpleDataElement el = new EdiSimpleDataElement(elDef, val); seg.Content.Add(el); } else { EdiCompositeDataElement composite = new EdiCompositeDataElement(cDef); string[] compositeContent = val.Split(new[] { compositeSeparator }, StringSplitOptions.None); ProcessComposite(composite, compositeContent); seg.Content.Add(composite); } i++; } SegmentValidator.ValidateSegment(seg, rowPos, validationScope); return(seg); }
public void Validation_IdTest() { EAny def = new EAny() { DataType = DataType.ID, MinLength = 1, MaxLength = 1, ReqDes = RequirementDesignator.Optional }; def.AllowedValues.AddRange(new[] { "C", "F", "N", "R" }); var el = new EdiSimpleDataElement(def, "F"); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "Z"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, ""); Assert.IsTrue(el.IsValid(def)); }
public void Validation_OptionalMinMaxLen() { EAny def = new EAny() { DataType = DataType.AN, ReqDes = RequirementDesignator.Optional, MinLength = 2, MaxLength = 5, }; var el = new EdiSimpleDataElement(def, ""); Assert.IsTrue(el.IsValid(def)); el = new EdiSimpleDataElement(def, "a"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, "abcdefg"); Assert.IsFalse(el.IsValid(def)); el = new EdiSimpleDataElement(def, "abcde"); Assert.IsTrue(el.IsValid(def)); }
public static void ValidateSegment(EdiSegment seg, int rowPos, IValidatedEntity validationScope) { int i = 0; foreach (var dataElement in seg.Content) { if (dataElement is EdiSimpleDataElement) { EdiSimpleDataElement el = (EdiSimpleDataElement)dataElement; ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope); } else if (dataElement is EdiCompositeDataElement) { EdiCompositeDataElement c = (EdiCompositeDataElement)dataElement; foreach (EdiSimpleDataElement el in c.Content) { ValidateSimpleDataElement(el, seg.Name, rowPos, i + 1, validationScope); } } i++; } var syntaxNotes = ((MapSegment)seg.Definition).SyntaxNotes; if (syntaxNotes != null && syntaxNotes.Count > 0) { foreach (var sn in syntaxNotes) { var syntaxNote = SyntaxNoteFactory.GetSyntaxNote(sn); if (!syntaxNote.IsValid(seg.Content.Select(e => e.Val).ToArray())) { AddError(seg.Name, rowPos, null, $"Syntax note violation '{syntaxNote}'", validationScope); } } } }
public static bool IsValid(this EdiSimpleDataElement el, MapSimpleDataElement definition) { //required if (definition.ReqDes == RequirementDesignator.Mandatory && string.IsNullOrEmpty(el.Val)) //whitespaces allowed { return(false); } //Min max len if (!string.IsNullOrEmpty(el.Val) && (el.Val.Length < definition.MinLength || el.Val.Length > definition.MaxLength)) { return(false); } DateTime dummyDt; switch (definition.DataType) { case DataType.B: case DataType.AN: return(true); case DataType.ID: return(definition.AllowedValues.IndexOf(el.Val) >= 0 || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); case DataType.N0: case DataType.N1: case DataType.N2: case DataType.N4: case DataType.N6: int dummyInt; return(int.TryParse(el.Val, out dummyInt) || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); case DataType.R: case DataType.R2: case DataType.R4: case DataType.R5: case DataType.R6: case DataType.R7: case DataType.R8: case DataType.R9: decimal dummyDec; return(decimal.TryParse(el.Val, out dummyDec) || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); case DataType.DT: switch (definition.MaxLength) { case 6: return(DateTime.TryParseExact(el.Val, "yyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dummyDt) || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); case 8: return(DateTime.TryParseExact(el.Val, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dummyDt) || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); default: throw new NotSupportedException($"Date validation with length {definition.MaxLength} is not implemented. {el.Type}"); } case DataType.TM: return(DateTime.TryParseExact(el.Val, "HHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dummyDt) || (definition.ReqDes == RequirementDesignator.Optional && string.IsNullOrEmpty(el.Val))); default: throw new NotSupportedException($"{definition.DataType} validation is not implemented. {el.Type}"); } }
public static bool IsValid(this EdiSimpleDataElement el, MapSimpleDataElement definition) { //required if (definition.ReqDes == RequirementDesignator.Mandatory && string.IsNullOrEmpty(el.Val)) //whitespaces allowed { return(false); } //Min max len if (!string.IsNullOrEmpty(el.Val) && (el.Val.Length < definition.MinLength || el.Val.Length > definition.MaxLength)) { return(false); } switch (definition.DataType) { case DataType.B: case DataType.AN: return(true); case DataType.ID: return(definition.AllowedValues.IndexOf(el.Val) >= 0 || IsOptional(el.Val, definition)); case DataType.N0: case DataType.N1: case DataType.N2: case DataType.N4: case DataType.N6: int dummyInt; return(int.TryParse(el.Val, out dummyInt) || IsOptional(el.Val, definition)); case DataType.R: case DataType.R2: case DataType.R4: case DataType.R5: case DataType.R6: case DataType.R7: case DataType.R8: case DataType.R9: decimal dummyDec; return(decimal.TryParse(el.Val, out dummyDec) || IsOptional(el.Val, definition)); case DataType.DT: switch (definition.MaxLength) { case 6: return(ValidateShortDate(el, definition)); case 8: return(ValidateLongDate(el, definition)); default: throw new NotSupportedException($"Date validation with length {definition.MaxLength} is not implemented. {el.Type}"); } case DataType.TM: switch (definition.MaxLength) { case 4: return(ValidateShortTime(el, definition)); case 8: return(ValidateLongTime(el, definition)); default: throw new NotSupportedException($"Time validation with length {definition.MaxLength} is not implemented. {el.Type}"); } default: throw new NotSupportedException($"{definition.DataType} validation is not implemented. {el.Type}"); } }