//Copyright 2012-2019 Keysight Technologies
|
//
|
//Licensed under the Apache License, Version 2.0 (the "License");
|
//you may not use this file except in compliance with the License.
|
//You may obtain a copy of the License at
|
//
|
//http://www.apache.org/licenses/LICENSE-2.0
|
//
|
//Unless required by applicable law or agreed to in writing, software
|
//distributed under the License is distributed on an "AS IS" BASIS,
|
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
//See the License for the specific language governing permissions and
|
//limitations under the License.
|
|
namespace OpenTap.Plugins.PluginDevelopment
|
{
|
[Display("RuleValidation Example", Groups: new[] { "Examples", "Plugin Development", "Step Settings" },
|
Description: "An example of how validation works.")]
|
// Validation works for ComponentSettings, Resources (DUTs, Instruments, and ResultListeners) and Test Steps,
|
// since they all extend ValidatingObject.
|
public class RuleValidation : TestStep
|
{
|
[Display("Should Be True Property", Description: "This value should be true to pass validation.")]
|
public bool ShouldBeTrueProp { get; set; }
|
|
public int MyInt1 { get; set; }
|
public int MyInt2 { get; set; }
|
public int MyInt3 { get; set; }
|
|
public RuleValidation()
|
{
|
// Validation rules are usually set up by the constructor.
|
// They are soft errors and do not block test plan execution by default.
|
// When using the GUI, validation rules are checked when editing.
|
// Otherwise, they have to be manually checked (see the Run implementation below).
|
|
// Calls a function that returns a boolean. Use nameof to make sure the property name is correctly specified.
|
Rules.Add(CheckShouldBeTrueFunc, "Must be true to run", nameof(ShouldBeTrueProp));
|
|
// Calls an anonymous function that returns a boolean.
|
Rules.Add(() => MyInt1 + MyInt2 == 6, "MyInt1 + MyInt2 must == 6", nameof(MyInt1), nameof(MyInt2));
|
|
// The error message can also be dynamically generated using a function.
|
Rules.Add(() => MyInt3 > 0, () => $"MyInt3 must be greater than 0, but it is {MyInt3}.", nameof(MyInt3));
|
|
// Ensure all rules fail.
|
ShouldBeTrueProp = false;
|
MyInt1 = 2;
|
MyInt2 = 2;
|
MyInt3 = -2;
|
}
|
|
private bool CheckShouldBeTrueFunc()
|
{
|
return ShouldBeTrueProp;
|
}
|
|
//public override void PrePlanRun()
|
//{
|
// // Block the test plan from being run if there are any validation errors with the current values.
|
// // Note that this might not be desirable if the test step is used with e.g sweep loops and the initial value
|
// // are not ever used. And it also does not protect in case other steps modify the values.
|
// ThrowOnValidationError(true);
|
//}
|
|
public override void Run()
|
{
|
// Block the test step from being run if there are any validation errors with the current values.
|
ThrowOnValidationError(true);
|
}
|
}
|
}
|