< Summary

Information
Class: ValidateLib.TabularData.Datatypes.DateDatatypes.DateTimeStampDT
Assembly: validatelib.dll
File(s): C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\ValidateLib\TabularData\Datatypes\DateDatatypes\DateTimeStampDT.cs
Line coverage
71%
Covered lines: 32
Uncovered lines: 13
Coverable lines: 45
Total lines: 95
Line coverage: 71.1%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\ValidateLib\TabularData\Datatypes\DateDatatypes\DateTimeStampDT.cs

#LineLine coverage
 1using System.Text.RegularExpressions;
 2using ValidateLib.ErrorsAndWarnings.Errors;
 3using ValidateLib.Metadata.Descriptors;
 4
 5namespace ValidateLib.TabularData.Datatypes.DateDatatypes
 6{
 7    public class DateTimeStampDT : DateTimeDT
 8    {
 19        public static readonly string dateTimeStampRegex = @".*(Z|(\+|-)[0-9][0-9]:[0-9][0-9])";
 110        public DateTimeStampDT() { }
 111        public DateTimeStampDT(string stringValue, FormatDescriptor format) : base(stringValue, format)
 12        {
 113            if (format.pattern is not null)
 14            {
 115                if (!isPatternValid(format.pattern))
 116                    ErrorFactory.ThrowInvalidFormatError(format.pattern);
 17            }
 18
 119            CheckLexicalSpace(this.stringValue);
 120        }
 21
 22        public static void CheckLexicalSpace(string stringValue)
 23        {
 124            if (!Regex.IsMatch(stringValue, dateTimeStampRegex))
 025                ErrorFactory.ThrowDatatypeValidationError();
 126        }
 27
 28        new protected bool isPatternValid(string pattern)
 29        {
 130            if (
 131                !pattern.EndsWith("X") &&
 132                !pattern.EndsWith("x")
 133                )
 134                return false;
 135            return true;
 36        }
 37
 38        override protected string NormalizeStringValueToZZZ(string stringValue, string? formatPattern)
 39        {
 40            // case when we normalize without pattern provided
 141            if (formatPattern is null)
 42            {
 143                stringValue = NormalizeZMarker(stringValue);
 44            }
 45
 46            // case when user provided a pattern format and ends with time zone marker
 47
 48            else
 49            {
 150                if (formatPattern.EndsWith("XXX"))
 51                {
 152                    stringValue = NormalizeZMarker(stringValue);
 153                    formatPattern.Replace("XXX", "zzz");
 54                }
 155                else if (formatPattern.EndsWith("XX"))
 56                {
 057                    stringValue = NormalizeZMarker(stringValue);
 058                    if (stringValue[stringValue.Length - 3] != ':')
 059                        stringValue = stringValue.Insert(stringValue.Length - 2, ":");
 060                    formatPattern.Replace("XX", "zzz");
 61                }
 162                else if (formatPattern.EndsWith("X"))
 63                {
 164                    stringValue = NormalizeZMarker(stringValue);
 165                    if (stringValue[stringValue.Length - 3] != ':')
 66                    {
 167                        if (AreMinutesOmmited(stringValue))
 068                            stringValue = stringValue + ":00";
 69                        else
 170                            stringValue = stringValue.Insert(stringValue.Length - 2, ":");
 71                    }
 172                    formatPattern.Replace("X", "zzz");
 73                }
 174                else if (formatPattern.EndsWith("xxx"))
 075                    formatPattern.Replace("xxx", "zzz");
 176                else if (formatPattern.EndsWith("xx"))
 77                {
 078                    stringValue = stringValue.Insert(stringValue.Length - 2, ":");
 079                    formatPattern.Replace("xx", "zzz");
 80                }
 181                else if (formatPattern.EndsWith("x"))
 82                {
 083                    if (AreMinutesOmmited(stringValue))
 084                        stringValue = stringValue + ":00";
 85                    else
 086                        stringValue = stringValue.Insert(stringValue.Length - 2, ":");
 087                    formatPattern.Replace("x", "zzz");
 88                }
 89            }
 90
 191            return stringValue;
 92
 93        }
 94    }
 95}