/// <summary> /// Visits test set options /// </summary> /// <param name="plan">Test file plan</param> /// <param name="testSetPlan">TestSetPlan to visit</param> /// <param name="testOptions">TestOptions syntax node</param> private void VisitTestOptions(TestFilePlan plan, TestSetPlan testSetPlan, TestOptionsNode testOptions) { if (testOptions == null) { return; } VisitTestOptions(plan, testSetPlan, testOptions, out var nonmi, out var timeout); testSetPlan.DisableInterrupt = nonmi ?? false; testSetPlan.TimeoutValue = timeout ?? DEFAULT_TIMEOUT; }
/// <summary> /// Visits the test options /// </summary> /// <param name="line">Line to add the tag for</param> /// <param name="context">TestOptionsNode to visit</param> /// <param name="lineNo">Current line numer</param> /// <param name="collectedSpans">Collection of spancs found</param> private void Visit(ITextSnapshotLine line, TestOptionsNode context, int lineNo, List <TagSpan <Z80TestTokenTag> > collectedSpans) { if (context == null || lineNo < context.Span.StartLine || lineNo > context.Span.EndLine) { return; } Visit(line, context.WithKeywordSpan, lineNo, collectedSpans, Z80TestTokenType.Keyword); foreach (var option in context.Options) { Visit(line, option, lineNo, collectedSpans); } }
/// <summary> /// Visit a parse tree produced by <see cref="Z80TestParser.testOptions"/>. /// <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 VisitTestOptions(Z80TestParser.TestOptionsContext context) { if (IsInvalidContext(context)) { return(null); } var node = new TestOptionsNode(context); foreach (var toContext in context.testOption()) { node.Options.Add((TestOptionNode)VisitTestOption(toContext)); } return(node); }
/// <summary> /// Visits the test options /// </summary> /// <param name="line">Line to add the tag for</param> /// <param name="context">TestOptionsNode to visit</param> /// <param name="lineNo">Current line number</param> /// <param name="collectedSpans">Collection of spans found</param> private void Visit(ITextSnapshotLine line, TestOptionsNode context, int lineNo, List <ClassificationSpan> collectedSpans) { if (context == null || lineNo < context.Span.StartLine || lineNo > context.Span.EndLine) { return; } Visit(line, context.WithKeywordSpan, lineNo, collectedSpans, _keyword); foreach (var option in context.Options) { Visit(line, option, lineNo, collectedSpans); } }
/// <summary> /// Vistis test set and test node options /// </summary> /// <param name="plan">Test file plan</param> /// <param name="testSetPlan">TestSetPlan to visit</param> /// <param name="testOptions">TestOptions syntax node</param> /// <param name="disableInterrupt">Disable interrupt flag</param> /// <param name="timeout">TIMEOUT value</param> private void VisitTestOptions(TestFilePlan plan, TestSetPlan testSetPlan, TestOptionsNode testOptions, out bool disableInterrupt, out int timeout) { // --- Set default values disableInterrupt = false; timeout = 0; if (testOptions?.Options == null) { return; } // --- Process options var interruptModeFound = false; var timeoutFound = false; foreach (var option in testOptions.Options) { if (option is InterruptOptionNodeBase intNode) { if (interruptModeFound) { ReportError(Errors.T0005, plan, intNode.Span, "DI or EI"); return; } interruptModeFound = true; disableInterrupt = intNode is DiTestOptionNode; } else if (option is TimeoutTestOptionNode timeoutNode) { if (timeoutFound) { ReportError(Errors.T0005, plan, timeoutNode.Span, "TIMEOUT"); return; } timeoutFound = true; var value = Eval(plan, testSetPlan, timeoutNode.Expr); if (value != null) { timeout = (int)value.AsNumber(); } } } }
/// <summary> /// Vistis test set and test node options /// </summary> /// <param name="plan">Test file plan</param> /// <param name="testSetPlan">TestSetPlan to visit</param> /// <param name="testOptions">TestOptions syntax node</param> /// <param name="nonmi">NONMI value</param> /// <param name="timeout">TIMEOUT value</param> private void VisitTestOptions(TestFilePlan plan, TestSetPlan testSetPlan, TestOptionsNode testOptions, out bool?nonmi, out int?timeout) { // --- Set default values nonmi = null; timeout = null; if (testOptions?.Options == null) { return; } // --- Process options var nonmiFound = false; var timeoutFound = false; foreach (var option in testOptions.Options) { if (option is NoNmiTestOptionNode nonmiNode) { if (nonmiFound) { ReportError(Errors.T0005, plan, nonmiNode.Span, "NONMI"); return; } nonmiFound = true; nonmi = true; } else if (option is TimeoutTestOptionNode timeoutNode) { if (timeoutFound) { ReportError(Errors.T0005, plan, timeoutNode.Span, "TIMEOUT"); return; } timeoutFound = true; var value = Eval(plan, testSetPlan, timeoutNode.Expr); if (value != null) { timeout = (int)value.AsNumber(); } } } }