Ejemplo n.º 1
0
        public void Test2()
        {
            var TEXT       = @"   / segment1  /segment2/ segment3  @ property1  ";
            var expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Equal(PathAnchor.Root, expression.Anchor);
            Assert.Equal("/segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            Assert.NotNull(expression.Accessor);
            Assert.Equal(MemberExpressionType.Identifier, expression.Accessor.ExpressionType);
            Assert.Equal("property1", ((IdentifierExpression)expression.Accessor).Name);
            Assert.Null(expression.Accessor.Next);

            TEXT       = @"  .. / segment1  /segment2/ segment3  [100]  ";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);
            Assert.Equal("../segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            Assert.NotNull(expression.Accessor);
            Assert.Equal(MemberExpressionType.Indexer, expression.Accessor.ExpressionType);
            var parameters = ((IndexerExpression)expression.Accessor).Arguments;

            Assert.Equal(1, parameters.Count);
            Assert.Equal(MemberExpressionType.Constant, parameters[0].ExpressionType);
            Assert.Equal(100, (int)((ConstantExpression)parameters[0]).Value);

            TEXT       = @"   segment1  /segment2/ segment3 @property1 [100] . property2  ";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Equal(PathAnchor.None, expression.Anchor);
            Assert.Equal("segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            Assert.NotNull(expression.Accessor);
            Assert.Equal(MemberExpressionType.Identifier, expression.Accessor.ExpressionType);
            Assert.Equal("property1", ((IdentifierExpression)expression.Accessor).Name);
            Assert.NotNull(expression.Accessor.Next);

            var member = expression.Accessor.Next;

            Assert.Equal(MemberExpressionType.Indexer, member.ExpressionType);
            parameters = ((IndexerExpression)member).Arguments;
            Assert.Equal(1, parameters.Count);
            Assert.Equal(MemberExpressionType.Constant, parameters[0].ExpressionType);
            Assert.Equal(100, (int)((ConstantExpression)parameters[0]).Value);
            Assert.NotNull(member.Next);

            member = member.Next;
            Assert.Equal(MemberExpressionType.Identifier, member.ExpressionType);
            Assert.Equal("property2", ((IdentifierExpression)member).Name);
            Assert.Null(member.Next);
        }
Ejemplo n.º 2
0
        public void Test1()
        {
            var TEXT       = @"/";
            var expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Root, expression.Anchor);
            Assert.Equal("/", expression.Path);
            Assert.True(expression.Segments == null || expression.Segments.Length == 0);

            TEXT       = @"./";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Current, expression.Anchor);
            Assert.Equal(".", expression.Path);
            Assert.True(expression.Segments == null || expression.Segments.Length == 0);

            TEXT       = @".. /";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);
            Assert.Equal("..", expression.Path);
            Assert.True(expression.Segments == null || expression.Segments.Length == 0);

            TEXT       = @"segment1/segment2/segment3";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.None, expression.Anchor);
            Assert.Equal("segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            TEXT       = @" / segment1 / segment2/segment3";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Root, expression.Anchor);
            Assert.Equal("/segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            TEXT       = @". /segment1/segment2 / segment3 ";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Current, expression.Anchor);
            Assert.Equal("./segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);

            TEXT       = @"../segment1/segment2/segment3";
            expression = HierarchicalExpressionParser.Parse(TEXT);

            Assert.NotNull(expression);
            Assert.Null(expression.Accessor);
            Assert.Equal(PathAnchor.Parent, expression.Anchor);
            Assert.Equal("../segment1/segment2/segment3", expression.Path);

            Assert.Equal(3, expression.Segments.Length);
            Assert.Equal("segment1", expression.Segments[0]);
            Assert.Equal("segment2", expression.Segments[1]);
            Assert.Equal("segment3", expression.Segments[2]);
        }