public void TestDateTimeParser(TestModel testSpec) { TestPreValidation(testSpec); var referenceDateTime = testSpec.GetReferenceDateTime(); var extractResults = Extractor.Extract(testSpec.Input.ToLowerInvariant(), referenceDateTime); var actualResults = extractResults.Select(o => DateTimeParser.Parse(o, referenceDateTime)).ToArray(); var expectedResults = testSpec.CastResults <DateTimeParseResult>(); Assert.AreEqual(expectedResults.Count(), actualResults.Count(), GetMessage(testSpec)); foreach (var tuple in Enumerable.Zip(expectedResults, actualResults, Tuple.Create)) { var expected = tuple.Item1; var actual = tuple.Item2; var ignoreResultCase = true; Assert.AreEqual(expected.Type, actual.Type, GetMessage(testSpec)); Assert.AreEqual(expected.Text, actual.Text, ignoreResultCase, GetMessage(testSpec)); Assert.AreEqual(expected.Start, actual.Start, GetMessage(testSpec)); Assert.AreEqual(expected.Length, actual.Length, GetMessage(testSpec)); if (testSpec.IgnoreResolution) { Assert.Inconclusive(GetMessage(testSpec) + ". Resolution not validated."); } else { var actualValue = actual.Value as DateTimeResolutionResult; var expectedValue = JsonConvert.DeserializeObject <DateTimeResolutionResult>(expected.Value.ToString()); Assert.IsNotNull(actualValue, GetMessage(testSpec)); Assert.AreEqual(expectedValue.Timex, actualValue.Timex, GetMessage(testSpec)); if (expectedValue.Mod != null || actualValue.Mod != null) { Assert.IsNotNull(expectedValue.Mod, GetMessage(testSpec)); Assert.IsNotNull(actualValue.Mod, GetMessage(testSpec)); Assert.AreEqual(expectedValue.Mod, actualValue.Mod, GetMessage(testSpec)); } CollectionAssert.AreEqual(expectedValue.FutureResolution, actualValue.FutureResolution, GetMessage(testSpec)); CollectionAssert.AreEqual(expectedValue.PastResolution, actualValue.PastResolution, GetMessage(testSpec)); if (expectedValue.TimeZoneResolution != null || actualValue.TimeZoneResolution != null) { Assert.IsNotNull(actualValue.TimeZoneResolution, GetMessage(testSpec)); Assert.IsNotNull(expectedValue.TimeZoneResolution, GetMessage(testSpec)); Assert.AreEqual(expectedValue.TimeZoneResolution.Value, actualValue.TimeZoneResolution.Value, GetMessage(testSpec)); Assert.AreEqual(expectedValue.TimeZoneResolution.UtcOffsetMins, actualValue.TimeZoneResolution.UtcOffsetMins, GetMessage(testSpec)); } } } }
public void TestDateTimeMergedParser(TestModel testSpec) { TestPreValidation(testSpec); var referenceDateTime = testSpec.GetReferenceDateTime(); var extractResults = Extractor.Extract(testSpec.Input.ToLowerInvariant(), referenceDateTime); var actualResults = extractResults.Select(o => DateTimeParser.Parse(o, referenceDateTime)).ToArray(); var expectedResults = testSpec.CastResults <DateTimeParseResult>(); Assert.AreEqual(expectedResults.Count(), actualResults.Length, GetMessage(testSpec)); foreach (var tuple in Enumerable.Zip(expectedResults, actualResults, Tuple.Create)) { var expected = tuple.Item1; var actual = tuple.Item2; var ignoreResultCase = true; Assert.AreEqual(expected.Type, actual.Type, GetMessage(testSpec)); Assert.AreEqual(expected.Text, actual.Text, ignoreResultCase, GetMessage(testSpec)); Assert.AreEqual(expected.Start, actual.Start, GetMessage(testSpec)); Assert.AreEqual(expected.Length, actual.Length, GetMessage(testSpec)); if (testSpec.IgnoreResolution) { Assert.Inconclusive(GetMessage(testSpec) + ". Resolution not validated."); } else { if (actual.Value is IDictionary <string, object> values) { // Actual ValueSet types should not be modified as that's considered a breaking API change var actualValues = values[ResolutionKey.ValueSet] as IList <Dictionary <string, string> >; var expectedObj = JsonConvert.DeserializeObject <IDictionary <string, IList <Dictionary <string, string> > > >(expected.Value.ToString()); var expectedValues = expectedObj[ResolutionKey.ValueSet]; Assert.AreEqual(expectedValues.Count, actualValues?.Count, GetMessage(testSpec)); foreach (var(item1, item2) in expectedValues.Zip(actualValues, Tuple.Create)) { Assert.AreEqual(item1.Count, item2.Count, GetMessage(testSpec)); CollectionAssert.AreEqual(item1.OrderBy(o => o.Key).ToImmutableDictionary(), item2.OrderBy(o => o.Key).ToImmutableDictionary(), GetMessage(testSpec)); } } } } }
public void TestDateTimeExtractor(TestModel testSpec) { TestPreValidation(testSpec); var referenceDateTime = testSpec.GetReferenceDateTime(); var actualResults = Extractor.Extract(testSpec.Input.ToLowerInvariant(), referenceDateTime); var expectedResults = testSpec.CastResults <ExtractResult>(); Assert.AreEqual(expectedResults.Count(), actualResults.Count, GetMessage(testSpec)); foreach (var tuple in Enumerable.Zip(expectedResults, actualResults, Tuple.Create)) { var expected = tuple.Item1; var actual = tuple.Item2; var ignoreResultCase = true; Assert.AreEqual(expected.Type, actual.Type, GetMessage(testSpec)); Assert.AreEqual(expected.Text, actual.Text, ignoreResultCase, GetMessage(testSpec)); Assert.AreEqual(expected.Start, actual.Start, GetMessage(testSpec)); Assert.AreEqual(expected.Length, actual.Length, GetMessage(testSpec)); } }