Skip to content

Commit

Permalink
Add error condition when setting verdict to something which is not ve…
Browse files Browse the repository at this point in the history
…rdict-like
  • Loading branch information
alnlarsen committed Apr 25, 2024
1 parent 43a8787 commit 439602d
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Expand Up @@ -947,7 +947,7 @@ jobs:
run: nuget push OpenTAP.*.nupkg ${{ secrets.NUGET_KEY }} -NonInteractive -Source https://api.nuget.org/v3/index.json

Publish-TapPackages:
if: github.ref == 'refs/heads/main' || contains(github.ref, 'refs/heads/release') || contains(github.ref, 'refs/tags/v')
# if: github.ref == 'refs/heads/main' || contains(github.ref, 'refs/heads/release') || contains(github.ref, 'refs/tags/v')
environment: packages.opentap.io
runs-on: ubuntu-latest
needs:
Expand Down
40 changes: 40 additions & 0 deletions Engine.UnitTests/Results2.cs
Expand Up @@ -2,6 +2,8 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using OpenTap.Engine.UnitTests;
using OpenTap.EngineUnitTestUtils;
using OpenTap.Plugins.BasicSteps;

namespace OpenTap.UnitTests
Expand Down Expand Up @@ -30,6 +32,31 @@ public override void Run()
}
}
}

public class VerdictResultPublisher : TestStep
{
public enum AddMethod
{
Set,
Add,
}
public AddMethod Method { get; set; }
public override void Run()
{
switch (Method)
{
case AddMethod.Set:
StepRun.Parameters["Verdict"] = "Something un-verdict like";
break;
case AddMethod.Add:
StepRun.Parameters.Add("", "Verdict", "Also not a verdict", new MetaDataAttribute(false, ""));
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}

public class PublishResultsSameValues2 : TestStep
{

Expand Down Expand Up @@ -87,5 +114,18 @@ public void TestManyResults(Type stepType)
}
}
}

[TestCase(VerdictResultPublisher.AddMethod.Set)]
[TestCase(VerdictResultPublisher.AddMethod.Add)]
public void BadStepRun(VerdictResultPublisher.AddMethod m)
{
var pl = new PlanRunCollectorListener();
var plan = new TestPlan();
plan.ChildTestSteps.Add(new VerdictResultPublisher() { Method = m});
var run = plan.Execute(new[] { pl });
Assert.That(run.Verdict, Is.EqualTo(Verdict.Error));
var verdict = pl.StepRuns[0].Verdict;
Assert.That(verdict, Is.EqualTo(Verdict.Error));
}
}
}
22 changes: 19 additions & 3 deletions Engine/ResultListener.cs
Expand Up @@ -369,7 +369,14 @@ int FindIndex((string name, string group) key)
public IConvertible this[string name]
{
get => this[name, ""];
set => this[name, ""] = value;
set
{
if (name == "Verdict" && !IsVerdictLike(value))
{
throw new Exception("Attempted to set verdict to something which is not a verdict!");
}
this[name, ""] = value;
}
}

static void getMetadataFromObject(object res, string nestedName, ICollection<ResultParameter> output)
Expand Down Expand Up @@ -684,7 +691,11 @@ public ResultParameters(IEnumerable<ResultParameter> items)
public void Add(ResultParameter parameter) => AddRange(new[] {parameter});

int count = 0;


private bool IsVerdictLike(IConvertible value)
{
return value is Verdict || (value is string s && Enum.TryParse(s, out Verdict _));
}
void addRangeUnsafe(IEnumerable<ResultParameter> parameters, bool initCollection = false)
{
if (initCollection)
Expand All @@ -695,7 +706,7 @@ void addRangeUnsafe(IEnumerable<ResultParameter> parameters, bool initCollection
var count2 = 0;
foreach (var par in parameters)
{
if (par?.Name == null) continue;
if (par?.Name == null) continue;
if (indexByName2.TryGetValue(par.Key, out var idx))
{
data2[idx] = par;
Expand All @@ -720,6 +731,11 @@ void addRangeUnsafe(IEnumerable<ResultParameter> parameters, bool initCollection

foreach (var par in parameters)
{
if (par.Name == "Verdict" && !IsVerdictLike(par.Value))
{
throw new Exception("Setting verdict result to something which is not a verdict!");
}

if (!indexByName.TryGetValue(par.Key, out var idx))
idx = -1;

Expand Down

0 comments on commit 439602d

Please sign in to comment.