Esempio n. 1
0
 /// <summary>
 /// Verifies that two doubles are not equal within a tolerance range.
 /// </summary>
 /// <param name="expected">The expected value</param>
 /// <param name="actual">The value to compare against</param>
 /// <param name="precision">The level of precision to use when making the comparison</param>
 public static void NotEqual(DateTime expected, DateTime actual, DatePrecision precision)
 {
     if (precision.Truncate(expected) == precision.Truncate(actual))
     {
         throw new NotEqualException(precision.Truncate(actual), precision.Truncate(actual));
     }
 }
Esempio n. 2
0
 public DateTime Equal(DateTime expected, DatePrecision precision)
 {
     if (Negate)
     {
         assertProvider.AreNotEqual(expected, Target, precision);
     }
     else
     {
         assertProvider.AreEqual(expected, Target, precision);
     }
     return(Target);
 }
Esempio n. 3
0
        public static bool IsCalculable( DatePrecision thisPrecision )
        {
            switch ( thisPrecision ) {
                case DatePrecision.Day:
                case DatePrecision.Decade:
                case DatePrecision.Month:
                case DatePrecision.Year:
                    return true;

                default:
                    return false;
            }
        }
        private string GetLocalLaunchDateTime(ulong guildId, DateTime utc, DatePrecision precision)
        {
            var convertedToLocal = precision == DatePrecision.Hour
                ? _timeZoneService.ConvertUtcToLocalTime(guildId, utc)
                : utc;

            if (convertedToLocal == null)
            {
                return(null);
            }

            return(DateFormatter.GetDateStringWithPrecision(convertedToLocal.Value, precision, false, true, true));
        }
Esempio n. 5
0
        public static bool isCalculable(DatePrecision thisPrecision)
        {
            switch (thisPrecision)
            {
            case DatePrecision.Day:
            case DatePrecision.Decade:
            case DatePrecision.Month:
            case DatePrecision.Year:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Returns true if date precision has a timezone
        /// </summary>
        public static bool HasTimeZone(this DatePrecision a)
        {
            switch (a)
            {
            case DatePrecision.FullNoTimezone:
            case DatePrecision.HourNoTimezone:
            case DatePrecision.MinuteNoTimezone:
            case DatePrecision.SecondNoTimezone:
                return(false);

            default:
                return(true);
            }
        }
        /// <summary>
        /// Create a timestamp
        /// </summary>
        public TS CreateTS(TimestampPart part)
        {
            if (part == null)
            {
                return(null);
            }
            DatePrecision prec = default(DatePrecision);

            foreach (var kv in m_precisionMap)
            {
                if (kv.Value.Equals(part.Precision))
                {
                    prec = kv.Key;
                }
            }
            return(new TS(part.Value, prec));
        }
Esempio n. 8
0
        /// <summary>
        /// Create a timestamp
        /// </summary>
        public TS CreateTS(TimestampPart part, List <IResultDetail> dtls)
        {
            if (part == null)
            {
                return(null);
            }
            DatePrecision prec = default(DatePrecision);

            foreach (var kv in ComponentUtil.m_precisionMap)
            {
                if (kv.Value.Equals(part.Precision))
                {
                    prec = kv.Key;
                }
            }
            return(new TS(part.Value, prec));
        }
Esempio n. 9
0
        public static string GetDateStringWithPrecision(DateTime date, DatePrecision precision, bool includeUtc, bool displayPrecision, bool longDate)
        {
            string format;

            switch (precision)
            {
            case DatePrecision.Year:
            case DatePrecision.Half:
            case DatePrecision.Quarter:
                format = "yyyy";
                break;

            case DatePrecision.Month:
                format = longDate ? "MMMM yyyy" : "MM-yyyy";
                break;

            case DatePrecision.Day:
                format = longDate ? "dddd, dd MMMM yyyy" : "dd-MM-yyyy";
                break;

            case DatePrecision.Hour:
                format = longDate ? "dddd, dd MMMM yyyy HH:mm" : "dd-MM-yyyy HH:mm";
                break;

            default:
                format = longDate ? "dddd, dd MMMM yyyy HH:mm" : "dd-MM-yyyy HH:mm";
                break;
            }

            var output = date.ToString(format, CultureInfo.InvariantCulture);

            if (includeUtc && precision == DatePrecision.Hour)
            {
                output += " UTC";
            }

            if (displayPrecision && precision != DatePrecision.Hour)
            {
                output += $" ({precision.ToString().ToLower(CultureInfo.InvariantCulture)} precision)";
            }

            return(output);
        }
Esempio n. 10
0
 /// <summary>
 /// Verifies that two values are equal within a given tolerance.
 /// </summary>
 /// <param name="actual">The value to be compared against</param>
 /// <param name="expected">The expected value</param>
 /// <param name="precision">The level of precision to use when making the comparison</param>
 /// <exception cref="EqualException">Thrown when the objects are not equal</exception>
 public static void ShouldEqual(this DateTime actual, DateTime expected, DatePrecision precision)
 {
     CustomizeAssert.Equal(expected, actual, precision);
 }
 public static DateTime Equal(this IShould <DateTime> should, DateTime expected, DatePrecision precision)
 {
     return(should.Apply(
                (t, a) => a.AreEqual(expected, t, precision),
                (t, a) => a.AreNotEqual(expected, t, precision)
                ));
 }
Esempio n. 12
0
        public static void RenderLocalizedDate(Interpreter interpreter, IFormatting?element, IVariable?value, string?delimiter, DateFormat dateFormat, DatePrecision precision, IEnumerable <DatePartElement> dateParts)
        {
            var parts = new List <DatePartElement>();

            var locale = interpreter.LocaleFile;

            var localeDate = locale.Dates !.FirstOrDefault(e => e.Format == dateFormat);

            parts.AddRange(localeDate.DateParts);

            if (dateParts != null)
            {
                foreach (var part in dateParts)
                {
                    Replace(parts, part.Name, part);
                }
            }

            RenderDate(interpreter, element, value, delimiter, precision, parts.ToArray());
        }
Esempio n. 13
0
 /// <summary>
 /// Create a new instance of TS with the specified datetime value and the precision specified
 /// </summary>
 /// <param name="value">The value of the timestamp</param>
 /// <param name="precision">The precision of the timestamp</param>
 public TS(DateTime value, DatePrecision precision) : this(value) { this.DateValuePrecision = precision; }
Esempio n. 14
0
        public static void RenderDate(Interpreter interpreter, IFormatting?element, IVariable?value, string?delimiter, DatePrecision precision, DatePartElement[] dateParts)
        {
            if (!(value is IDateVariable date) || dateParts == null)
            {
                return;
            }

            int precisionValue = (int)precision;

            var available = new List <DatePartName>()
            {
                DatePartName.Year
            };

            if (date.MonthFrom.HasValue && date.MonthTo.HasValue && dateParts.Any(x => x.Name == DatePartName.Month) && precisionValue < 2)
            {
                // add month
                available.Add(DatePartName.Month);

                // day?
                if (date.DayFrom.HasValue && date.DayTo.HasValue && dateParts.Any(x => x.Name == DatePartName.Day) && precisionValue == 0)
                {
                    available.Add(DatePartName.Day);
                }
            }

            // find differing date parts
            DatePartName[] differing = Array.Empty <DatePartName>();
            if (date.YearFrom != date.YearTo)
            {
                // year, month, day
                differing = available.ToArray();
            }
            else if (date.MonthFrom.HasValue && date.MonthTo.HasValue && date.MonthFrom.Value != date.MonthTo.Value)
            {
                // month, day
                differing = available
                            .Where(x => x != DatePartName.Year)
                            .ToArray();
            }
            else if (date.DayFrom.HasValue && date.DayTo.HasValue && date.DayFrom.Value != date.DayTo.Value)
            {
                // day
                differing = available
                            .Where(x => x == DatePartName.Day)
                            .ToArray();
            }

            // range?
            if (differing.Length == 0)
            {
                // render single date
                RenderDateParts(interpreter, dateParts, date.YearFrom, date.SeasonFrom, date.MonthFrom, date.DayFrom, delimiter, true, true);
            }
            else
            {
                // render from
                var delimiterIndex = Enumerable.Range(1, dateParts.Length)
                                     .Select(i => dateParts.Take(i).Select(x => x.Name).ToArray())
                                     .First(a => differing.All(x => a.Contains(x)))
                                     .Length;
                var fromParts = dateParts
                                .Take(delimiterIndex)
                                .ToArray();

                RenderDateParts(interpreter, fromParts, date.YearFrom, date.SeasonFrom, date.MonthFrom, date.DayFrom, delimiter, true, false);

                var lastFromPart = fromParts[^ 1];
Esempio n. 15
0
 public void AreNotEqual(DateTime expected, DateTime actual, DatePrecision precision)
 {
     Assert.NotEqual(expected, actual, precision);
 }
Esempio n. 16
0
        public static void RenderNonLocalizedDate(Interpreter interpreter, IFormatting?element, IVariable?value, string?delimiter, DatePrecision precision, IEnumerable <DatePartElement> dateParts)
        {
            if (dateParts == null)
            {
                return;
            }

            RenderDate(interpreter, element, value, delimiter, precision, dateParts.ToArray());
        }
Esempio n. 17
0
 /// <summary>
 /// Verifies that two values are not equal within a given tolerance.
 /// </summary>
 /// <param name="actual">The value to be compared against</param>
 /// <param name="expected">The expected value</param>
 /// <param name="precision">The level of precision to use when making the comparison</param>
 /// <exception cref="EqualException">Thrown when the objects are equal</exception>
 public static void ShouldNotEqual(this DateTime actual, DateTime expected, DatePrecision precision)
 {
     Assert.NotEqual(expected, actual, precision);
 }
Esempio n. 18
0
        /// <summary>
        /// Note: This method requires Newtonsoft Json to be installed
        /// </summary>
        /// <returns></returns>
        private bool ExtractJSON()
        {
            //Interpret the JSON - Basically read in a level at a time.
            var DataFromWiki = JObject.Parse(Content);
            var Entities     = (JObject)DataFromWiki["entities"];

            var    Entity    = Entities.Properties().First(); // Name is variable, so grab data by using first method
            string EntityKey = Entity.Name;

            var EntityData = (JObject)Entity.Value;

            if (EntityKey == "-1")
            {
                WikidataExtractErrors.NotWikidata();
                return(false);
            }

            string Qcode = (string)EntityData["id"];

            Fields.Id = Convert.ToInt32(Qcode.Substring(1));
            string EntityType = (string)EntityData["type"];

            if (EntityType == null)
            {
                WikidataExtractErrors.QcodeNotExist(EntityKey);
                return(false);
            }

            var Descriptions   = (JObject)EntityData["descriptions"];
            var Labels         = (JObject)EntityData["labels"];
            var WikipediaLinks = (JObject)EntityData["sitelinks"];

            if (Labels != null)
            {
                foreach (var Label in Labels.Properties())
                {
                    var LabelData = (JObject)Label.Value;
                    Fields.Labels.Add((string)LabelData["language"], (string)LabelData["value"]);
                }
            }

            if (Descriptions != null)
            {
                foreach (var Description in Descriptions.Properties())
                {
                    var    DescriptionData = (JObject)Description.Value;
                    string l = (string)DescriptionData["language"];
                    Fields.Description.Add((string)DescriptionData["language"], (string)DescriptionData["value"]);
                }
            }

            if (WikipediaLinks != null)
            {
                foreach (var WikipediaLink in WikipediaLinks.Properties())
                {
                    var WikipediaLinkData = (JObject)WikipediaLink.Value;
                    Fields.WikipediaLinks.Add((string)WikipediaLinkData["site"], (string)WikipediaLinkData["title"]);
                }
            }

            var Claims = (JObject)EntityData["claims"];

            if (Claims != null)
            {
                //Now we get to loop through each claim property for that article
                foreach (var Claim in Claims.Properties())
                {
                    string ClaimKey = Claim.Name;

                    if (ClaimsRequired != null && Array.IndexOf(ClaimsRequired, ClaimKey) == -1)
                    {
                        continue;
                    }

                    var ClaimData = (JArray)Claim.Value;

                    for (int ThisClaim = 0; ThisClaim < ClaimData.Count(); ThisClaim++)
                    {
                        //claimData is an array - another loop

                        WikidataClaim ThisClaimData = new WikidataClaim();

                        var    MainSnak      = (JObject)ClaimData[ThisClaim]["mainsnak"];
                        string SnakType      = (string)MainSnak["snaktype"];
                        string SnakDataType  = (string)MainSnak["datatype"];
                        var    SnakDataValue = (JObject)MainSnak["datavalue"];

                        if (SnakType == "novalue" || SnakType == "somevalue")
                        {
                            ThisClaimData.ValueAsString = SnakType;
                        }
                        else
                        {
                            if (SnakDataType == "string" || SnakDataType == "commonsMedia" || SnakDataType == "url")
                            {
                                ThisClaimData.ValueAsString = (string)SnakDataValue["value"];
                            }
                            else if (SnakDataType == "wikibase-item")
                            {
                                var ObjectValue = (JObject)SnakDataValue["value"];
                                ThisClaimData.Qcode         = (int)ObjectValue["numeric-id"];
                                ThisClaimData.ValueAsString = Cache.RetrieveLabel(ThisClaimData.Qcode);
                            }
                            else if (SnakDataType == "time")
                            {
                                var ObjectValue = (JObject)SnakDataValue["value"];

                                string ValueTime = (string)ObjectValue["time"];


                                string ValueTimePrecision     = (string)ObjectValue["precision"];
                                string ValueTimeCalendarModel = (string)ObjectValue["calendarmodel"];

                                bool Julian    = false;
                                bool Gregorian = false;

                                if (ValueTimeCalendarModel != "http://www.Wikidata.org/entity/Q1985727")
                                {
                                    Gregorian = true;
                                }
                                if (ValueTimeCalendarModel == "http://www.Wikidata.org/entity/Q1985786")
                                {
                                    Julian = true;
                                }

                                if (ValueTimePrecision == "11" || ValueTimePrecision == "10" || ValueTimePrecision == "9" ||
                                    ValueTimePrecision == "8" || ValueTimePrecision == "7" || ValueTimePrecision == "6")
                                {
                                    int DateStart = ValueTime.IndexOf("-", 2) - 4;

                                    string ThisDateString = (ValueTime.Substring(DateStart, 10));
                                    ThisDateString = ThisDateString.Replace("-00", "-01");  // Occasionally get 1901-00-00 ?

                                    bool     ValidDate = true;
                                    DateTime thisDate;
                                    try
                                    {
                                        thisDate = DateTime.Parse(ThisDateString, null, DateTimeStyles.RoundtripKind);
                                    }
                                    catch
                                    {
                                        thisDate  = DateTime.MinValue;
                                        ValidDate = false;
                                    }
                                    if (Julian == true && ValueTimePrecision == "11")
                                    {
                                        // All dates will be Gregorian
                                        // Julian flag tells us to display Julian date.
                                        // JulianCalendar JulCal = new JulianCalendar();
                                        // DateTime dta = JulCal.ToDateTime(thisDate.Year, thisDate.Month, thisDate.Day, 0, 0, 0, 0);
                                        // thisDate = dta;
                                    }

                                    DatePrecision Precision = DatePrecision.Null;


                                    if (ValidDate == false)
                                    {
                                        Precision = DatePrecision.Invalid;
                                    }
                                    else if (ValueTime.Substring(0, 1) == "+")
                                    {
                                        switch (ValueTimePrecision)
                                        {
                                        case "11":
                                            Precision = DatePrecision.Day;
                                            break;

                                        case "10":
                                            Precision = DatePrecision.Month;
                                            break;

                                        case "9":
                                            Precision = DatePrecision.Year;
                                            break;

                                        case "8":
                                            Precision = DatePrecision.Decade;
                                            break;

                                        case "7":
                                            Precision = DatePrecision.Century;
                                            break;

                                        case "6":
                                            Precision = DatePrecision.Millenium;
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        Precision = DatePrecision.BCE;
                                    }

                                    ThisClaimData.ValueAsDateTime.thisDate      = thisDate;
                                    ThisClaimData.ValueAsDateTime.thisPrecision = Precision;
                                }
                            }
                            else if (SnakDataType == "monolingualtext")
                            {
                                var    ObjectValue   = (JObject)SnakDataValue["value"];
                                string ValueText     = (string)ObjectValue["text"];
                                string ValueLanguage = (string)ObjectValue["language"];
                                // TODO Multi language handling
                                ThisClaimData.ValueAsString = ValueText + "(" + ValueLanguage + ")";
                            }
                            else if (SnakDataType == "quantity")
                            {
                                var    ObjectValue = (JObject)SnakDataValue["value"];
                                string ValueAmount = (string)ObjectValue["amount"];
                                string ValueUnit   = (string)ObjectValue["unit"];
                                string ValueUpper  = (string)ObjectValue["upperBound"];
                                string ValueLower  = (string)ObjectValue["lowerBound"];

                                ThisClaimData.ValueAsString = "(" + ValueLower + " to " + ValueUpper + ") Unit " + ValueUnit;
                            }
                        }
                        Fields.Claims.Add(new KeyValuePair <int, WikidataClaim>(Convert.ToInt32(ClaimKey.Substring(1)), ThisClaimData));
                    }
                }
            }
            return(true);
        }