public void TestFhirPathTrace() { var patient = new Hl7.Fhir.Model.Patient() { Id = "pat45", Active = false }; patient.Meta = new Meta() { LastUpdated = new DateTimeOffset(2018, 5, 24, 14, 48, 0, TimeSpan.Zero) }; var nav = patient.ToTypedElement(); EvaluationContext ctx = new FhirEvaluationContext(); var result = nav.Select("Resource.meta.trace('log').lastUpdated", ctx); Assert.IsNotNull(result.FirstOrDefault()); Assert.AreEqual(PartialDateTime.Parse("2018-05-24T14:48:00+00:00"), result.First().Value); bool traced = false; ctx.Tracer = (string name, System.Collections.Generic.IEnumerable <ITypedElement> results) => { System.Diagnostics.Trace.WriteLine($"{name}"); Assert.AreEqual("log", name); foreach (ITypedElement item in results) { var fhirValue = item.Annotation <IFhirValueProvider>(); System.Diagnostics.Trace.WriteLine($"--({fhirValue.FhirValue.GetType().Name}): {item.Value} {fhirValue.FhirValue}"); Assert.AreEqual(patient.Meta, fhirValue.FhirValue); traced = true; } }; result = nav.Select("Resource.meta.trace('log').lastUpdated", ctx); Assert.IsNotNull(result.FirstOrDefault()); Assert.AreEqual(PartialDateTime.Parse("2018-05-24T14:48:00+00:00"), result.First().Value); Assert.IsTrue(traced); traced = false; ctx.Tracer = (string name, System.Collections.Generic.IEnumerable <ITypedElement> results) => { System.Diagnostics.Trace.WriteLine($"{name}"); Assert.IsTrue(name == "id" || name == "log"); foreach (ITypedElement item in results) { var fhirValue = item.Annotation <IFhirValueProvider>(); System.Diagnostics.Trace.WriteLine($"--({fhirValue.FhirValue.GetType().Name}): {item.Value} {fhirValue.FhirValue}"); traced = true; } }; result = nav.Select("Resource.trace('id', id).meta.trace('log', lastUpdated).lastUpdated", ctx); Assert.IsNotNull(result.FirstOrDefault()); Assert.AreEqual(PartialDateTime.Parse("2018-05-24T14:48:00+00:00"), result.First().Value); Assert.IsTrue(traced); }