コード例 #1
0
        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));
                    }
                }
            }
        }
コード例 #2
0
        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));
                        }
                    }
                }
            }
        }
コード例 #3
0
        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));
            }
        }