public void Expand_SelectSingleField_OneFieldSelectorReturned()
        {
            const string MyField = "myField";
            List <FieldSelectorTreeNode> tree = FieldSelectorParser.Expand(MyField);

            Assert.Equal(1, tree.Count);
            Assert.Equal(MyField, tree[0].MemberName);
            Assert.True(tree[0].Children.IsEmpty());
        }
        public void Expand_SelectOneNestedField_TreeHasOneNestedSelector()
        {
            const string RootField           = "contacttypes";
            const string SubField            = "type";
            string       nestedFieldSelector = RootField + FieldSelectorConstants.NestedFieldSelector + SubField;

            List <FieldSelectorTreeNode> tree = FieldSelectorParser.Expand(nestedFieldSelector);

            Assert.Equal(1, tree.Count);
            Assert.Equal(RootField, tree[0].MemberName);

            Assert.Equal(1, tree[0].Children.Count);
            Assert.Equal(SubField, tree[0].Children[0].MemberName);
            Assert.True(tree[0].Children[0].Children.IsEmpty());
        }
        public void Expand_FieldSelectorBegineWithReservedToken_ThrowArgumentException()
        {
            bool exceptionCaught = false;

            try
            {
                FieldSelectorParser.Expand(FieldSelectorConstants.BeginSubSelectExpression.ToString());
            }
            catch (ArgumentException ex)
            {
                exceptionCaught = true;
                Assert.True(
                    ex.Message.Contains("A reserved token can not be the first character of the fields selector."));
            }

            Assert.True(exceptionCaught, "No Argument Exception caught!");
        }
        public void Expand_SubSelectionTokenPreceedByAnotherToken_ThrowArgumentException()
        {
            bool exceptionCaught = false;

            try
            {
                FieldSelectorParser.Expand(
                    "myField" + FieldSelectorConstants.NestedFieldSelector
                    + FieldSelectorConstants.BeginSubSelectExpression);
            }
            catch (ArgumentException ex)
            {
                exceptionCaught = true;
                Assert.True(ex.Message.Contains("Begin Subselection token"));
                Assert.True(ex.Message.Contains("can not be preceeded by another reserved token"));
            }

            Assert.True(exceptionCaught, "No Argument Exception caught!");
        }
        public void Expand_ComplexNestedFieldString_ReturnsParsedTree()
        {
            List <FieldSelectorTreeNode> tree =
                FieldSelectorParser.Expand(
                    "person(name(first,last),address(zip,street)),person/salary,link(url,description/short)");

            FieldSelectorTreeNode personNode = tree.Find(item => item.MemberName == "person");

            Assert.NotNull(personNode);
            Assert.Equal(3, personNode.Children.Count);
            Assert.NotNull(personNode.Children.Find(item => item.MemberName == "salary"));

            FieldSelectorTreeNode nameNode = personNode.Children.Find(item => item.MemberName == "name");

            Assert.NotNull(nameNode);
            Assert.Equal(2, nameNode.Children.Count);
            Assert.NotNull(nameNode.Children.Find(item => item.MemberName == "first"));
            Assert.NotNull(nameNode.Children.Find(item => item.MemberName == "last"));

            FieldSelectorTreeNode addressNode = personNode.Children.Find(item => item.MemberName == "address");

            Assert.NotNull(addressNode);
            Assert.Equal(2, addressNode.Children.Count);
            Assert.NotNull(addressNode.Children.Find(item => item.MemberName == "zip"));
            Assert.NotNull(addressNode.Children.Find(item => item.MemberName == "street"));

            FieldSelectorTreeNode linkNode = tree.Find(item => item.MemberName == "link");

            Assert.NotNull(linkNode);
            Assert.Equal(2, linkNode.Children.Count);
            Assert.NotNull(linkNode.Children.Find(item => item.MemberName == "url"));

            FieldSelectorTreeNode descriptionNode = linkNode.Children.Find(item => item.MemberName == "description");

            Assert.NotNull(descriptionNode);
            Assert.Equal(1, descriptionNode.Children.Count);
            Assert.NotNull(descriptionNode.Children.Find(item => item.MemberName == "short"));
        }
 public void Expand_EmptyFieldSelectorString_ReturnsEmptyList()
 {
     Assert.Equal(0, FieldSelectorParser.Expand(string.Empty).Count);
 }
 public void Expand_WhitespaceFieldSelectorString_ReturnsEmptyList()
 {
     Assert.Equal(0, FieldSelectorParser.Expand("  \t  \n  \r").Count);
 }
 public void Expand_NullFieldSelectorString_ReturnsEmptyList()
 {
     Assert.Equal(0, FieldSelectorParser.Expand(null).Count);
 }