public void GivenListOfPrimitiveElementNodes_WhenGetDecendantsByType_AllNodesShouldBeReturned()
        {
            Date        date       = new Date();
            Instant     instant    = new Instant();
            FhirBoolean boolean    = new FhirBoolean();
            FhirString  fhirString = new FhirString();

            var nodes = new PrimitiveType[] { date, instant, boolean, fhirString }.Select(n => ElementNode.FromElement(n.ToTypedElement()));

            var results = FhirPathSymbolExtensions.NodesByType(nodes, "string").Select(n => n.Location);

            Assert.Single(results);
            Assert.Contains("string", results);

            results = FhirPathSymbolExtensions.NodesByType(nodes, "date").Select(n => n.Location);
            Assert.Single(results);
            Assert.Contains("date", results);

            results = FhirPathSymbolExtensions.NodesByType(nodes, "boolean").Select(n => n.Location);
            Assert.Single(results);
            Assert.Contains("boolean", results);

            results = FhirPathSymbolExtensions.NodesByType(nodes, "instant").Select(n => n.Location);
            Assert.Single(results);
            Assert.Contains("instant", results);
        }
        public void GivenListOfElementNodes_WhenGetDecendantsByType_AllNodesShouldBeReturned()
        {
            Patient patient = new Patient();

            patient.Active = true;
            patient.Address.Add(new Address()
            {
                City = "Test0"
            });
            patient.Contact.Add(new Patient.ContactComponent()
            {
                Address = new Address()
                {
                    City = "Test1"
                }
            });
            Address address = new Address()
            {
                City = "Test2"
            };

            Organization organizaton = new Organization();

            organizaton.Address.Add(new Address()
            {
                City = "Test3"
            });

            // contained resource should not be returned.
            Organization organizatonInContained = new Organization();

            organizatonInContained.Address.Add(new Address()
            {
                City = "Test3"
            });
            patient.Contained.Add(organizatonInContained);

            // Verify primitive object
            Date date = new Date();

            var nodes = new ITypedElement[] { patient.ToTypedElement(), address.ToTypedElement(), organizaton.ToTypedElement(), date.ToTypedElement() }.Select(n => ElementNode.FromElement(n));
            var results = FhirPathSymbolExtensions.NodesByType(nodes, "Address").Select(n => n.Location);

            Assert.Equal(4, results.Count());
            Assert.Contains("Patient.address[0]", results);
            Assert.Contains("Address", results);
            Assert.Contains("Organization.address[0]", results);
            Assert.Contains("Patient.contact[0].address[0]", results);
        }