/// <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); } }
/// <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); }