/// <summary>
 /// Visits the test set
 /// </summary>
 /// <param name="line">Line to add the tag for</param>
 /// <param name="context">TestSetNode to visit</param>
 /// <param name="lineNo">Current line numer</param>
 /// <param name="collectedSpans">Collection of spancs found</param>
 private void Visit(ITextSnapshotLine line, TestSetNode context, int lineNo, List <TagSpan <Z80TestTokenTag> > collectedSpans)
 {
     if (lineNo < context.Span.StartLine || lineNo > context.Span.EndLine)
     {
         return;
     }
     Visit(line, context.TestSetKeywordSpan, lineNo, collectedSpans, Z80TestTokenType.Keyword);
     Visit(line, context.TestSetIdSpan, lineNo, collectedSpans, Z80TestTokenType.Identifier);
     Visit(line, context.Sp48ModeSpan, lineNo, collectedSpans, Z80TestTokenType.Keyword);
     Visit(line, context.SourceContext, lineNo, collectedSpans);
     Visit(line, context.CallStub, lineNo, collectedSpans);
     Visit(line, context.DataBlock, lineNo, collectedSpans);
     Visit(line, context.Init, lineNo, collectedSpans);
     foreach (var testBlock in context.TestBlocks)
     {
         Visit(line, testBlock, lineNo, collectedSpans);
     }
 }
Example #2
0
        /// <summary>
        /// Visits a single test plan
        /// </summary>
        /// <param name="plan">Test plan to emit</param>
        /// <param name="node">TestSetNode to use</param>
        private TestSetPlan VisitTestSet(TestFilePlan plan, TestSetNode node)
        {
            var testSetPlan = new TestSetPlan(node.TestSetId, node.Span);

            VisitMachineContext(plan, testSetPlan, node.MachineContext);
            VisitSourceContext(plan, testSetPlan, node.SourceContext);
            VisitTestOptions(plan, testSetPlan, node.TestOptions);
            VisitDataBlock(plan, testSetPlan, node.DataBlock);
            if (node.Init != null)
            {
                foreach (var asgn in node.Init.Assignments)
                {
                    var asgnPlan = VisitAssignment(plan, testSetPlan, asgn);
                    if (asgnPlan != null)
                    {
                        testSetPlan.InitAssignments.Add(asgnPlan);
                    }
                }
            }
            if (node.Setup != null)
            {
                testSetPlan.Setup = VisitInvoke(plan, testSetPlan, node.Setup);
            }
            if (node.Cleanup != null)
            {
                testSetPlan.Cleanup = VisitInvoke(plan, testSetPlan, node.Cleanup);
            }

            foreach (var block in node.TestBlocks)
            {
                var blockPlan = VisitTestBlock(plan, testSetPlan, block);
                if (blockPlan != null)
                {
                    if (testSetPlan.TestBlocks.Any(tb =>
                                                   string.Compare(tb.Id, blockPlan.Id, StringComparison.InvariantCultureIgnoreCase) == 0))
                    {
                        ReportError(Errors.T0007, plan, block.TestIdSpan, block.TestId);
                        continue;
                    }
                    testSetPlan.TestBlocks.Add(blockPlan);
                }
            }
            return(testSetPlan);
        }
        /// <summary>
        /// Visit a parse tree produced by <see cref="Z80TestParser.testSet"/>.
        /// <para>
        /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
        /// on <paramref name="context"/>.
        /// </para>
        /// </summary>
        /// <param name="context">The parse tree.</param>
        /// <return>The visitor result.</return>
        public override object VisitTestSet(Z80TestParser.TestSetContext context)
        {
            if (IsInvalidContext(context))
            {
                return(null);
            }

            var node = new TestSetNode(context);

            Compilation.TestSets.Add(node);
            if (context.machineContext() != null)
            {
                node.MachineContext = (MachineContextNode)VisitMachineContext(context.machineContext());
            }
            node.SourceContext = (SourceContextNode)VisitSourceContext(context.sourceContext());
            if (context.testOptions() != null)
            {
                node.TestOptions = (TestOptionsNode)VisitTestOptions(context.testOptions());
            }

            if (context.dataBlock() != null)
            {
                node.DataBlock = (DataBlockNode)VisitDataBlock(context.dataBlock());
            }
            if (context.initSettings() != null)
            {
                node.Init = (AssignmentsNode)VisitInitSettings(context.initSettings());
            }
            if (context.setupCode() != null)
            {
                node.Setup = (InvokeCodeNode)VisitSetupCode(context.setupCode());
            }
            if (context.cleanupCode() != null)
            {
                node.Cleanup = (InvokeCodeNode)VisitCleanupCode(context.cleanupCode());
            }

            foreach (var tbContext in context.testBlock())
            {
                node.TestBlocks.Add((TestBlockNode)VisitTestBlock(tbContext));
            }
            return(node);
        }