Beispiel #1
0
        public LoveTestFail(LoveNode node, string message) : base(message)
        {
            Node = node;

            // FROM: http://stackoverflow.com/questions/9551780/how-to-get-property-name-when-it-uses-yield-return
            // Hack to get stack trace inside yield return
            var method = new StackTrace(true).GetFrame(1).GetMethod();

            if (method.Name == "MoveNext")
            {
                var methodType = method.DeclaringType.Name;
                TestName = System.Text.RegularExpressions.Regex.Replace(methodType, @".*<([^)]+)>.*", "$1");
            }
            else
            {
                TestName = method.Name;
            }
        }
Beispiel #2
0
        private void VisitNode(LoveTranslation translation, LoveNode node, object model)
        {
            switch (node.Kind)
            {
            case LoveNodeKind.LoveBlock:
                VisitBlock(translation, node as LoveBlock, model);
                return;

            case LoveNodeKind.LoveModelStatement:
                break;

            case LoveNodeKind.LoveName:
                break;

            case LoveNodeKind.LoveMarkup:
                break;

            case LoveNodeKind.LoveMarkupExpression:
                break;

            case LoveNodeKind.LoveBinding:
                break;

            case LoveNodeKind.LoveNotBinding:
                break;

            case LoveNodeKind.LoveControlBlock:
                break;

            case LoveNodeKind.LoveIfBlock:
                break;

            case LoveNodeKind.LoveForeachBlock:
                break;

            default:
                break;
            }

            throw new NotImplementedException();
        }
Beispiel #3
0
        private LoveBlock VisitBlock(Block block)
        {
            // Handle regular block
            var lBlock = new LoveBlock(block.Start.AbsoluteIndex, block.Length);

            foreach (var c in block.Children)
            {
                var node = VisitNode(c);

                if (node != null)
                {
                    lBlock.Children.Add(node);
                }
            }

            // Merge blocks of same type
            var      newChildren = new List <LoveNode>();
            LoveNode newChild    = null;

            foreach (var c in lBlock.Children)
            {
                if (newChild != null && newChild.GetType() == c.GetType() && c is LoveSpan)
                {
                    var cSpan   = c as LoveSpan;
                    var newSpan = newChild as LoveSpan;

                    if (cSpan is LoveBinding)
                    {
                        newChild = new LoveBinding(newSpan.Start, newSpan.Length + cSpan.Length, newSpan.Content + cSpan.Content);
                    }
                    else if (cSpan is LoveMarkup)
                    {
                        newChild = new LoveMarkup(newSpan.Start, newSpan.Length + cSpan.Length, newSpan.Content + cSpan.Content);
                    }
                    else if (cSpan is LoveMarkupExpression)
                    {
                        newChild = new LoveMarkupExpression(newSpan.Start, newSpan.Length + cSpan.Length, newSpan.Content + cSpan.Content);
                    }
                }
                else
                {
                    if (newChild != null)
                    {
                        newChildren.Add(newChild);
                        newChild = null;
                    }

                    newChild = c;
                }
            }

            if (newChild != null)
            {
                newChildren.Add(newChild);
                newChild = null;
            }

            lBlock.Children.Clear();
            lBlock.Children.AddRange(newChildren);

            if (lBlock.Children.Count == 0)
            {
                return(null);
            }

            // Simplify children
            for (int i = 0; i < lBlock.Children.Count; i++)
            {
                var child = lBlock.Children[i];

                // Convert bindings to specific bindings if possible
                if (child is LoveBinding)
                {
                    lBlock.Children[i] = ConvertBinding(child as LoveBinding);
                }
            }

            ConvertChildrenToControlBlocks(lBlock);

            //// Convert to control blocks if Possible
            //var cBlock = ConvertToControlBlock(lBlock);
            //if (cBlock != null) { return cBlock; }

            return(lBlock);
        }