1 //
2 // Copyright (c) 2010-2023 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using Antmicro.Renode.UserInterface;
8 using Antmicro.Renode.Utilities;
9 using NUnit.Framework;
10 
11 namespace Antmicro.Renode.MonitorTests.CommandTests
12 {
13     [TestFixture]
14     public class ActionArguments
15     {
16         [OneTimeSetUp]
SetUp()17         public void SetUp()
18         {
19             monitor = new Monitor();
20             commandEater = new CommandInteractionEater();
21 
22             var file = GetType().Assembly.FromResourceToTemporaryFile("MockExtension.cs");
23             monitor.Parse($"i @{file}", commandEater);
24             commandEater.Clear();
25         }
26 
27         [TestCase("emulation MethodThatTakesParamsIntArray", "args: []",
28             TestName = "ParamsIntArrayEmptyTest")]
29 
30         [TestCase("emulation MethodThatTakesParamsIntArray 1 2 3", "args: [1, 2, 3]",
31             TestName = "ParamsIntArrayTest")]
32 
33         [TestCase("emulation MethodThatTakesParamsIntArrayAfterString \"bcd\" 1 2 3", "arg: bcd args: [1, 2, 3]",
34             TestName = "ParamsIntArrayAfterStringTest")]
35 
36         [TestCase("emulation MethodThatTakesParamsIntArrayAfterString arg=\"bcd\"", "arg: bcd args: []",
37             TestName = "ParamsIntArrayEmptyAfterStringPassedByName")]
38 
39         [TestCase("emulation MethodThatTakesParamsIntArrayAfterString arg=\"bcd\" 1 2 3", "arg: bcd args: [1, 2, 3]",
40             TestName = "ParamsIntArrayAfterStringPassedByName")]
41 
42         [TestCase("emulation MethodThatTakesParamsIntArrayAfterOptionalString", "arg: default args: []",
43             TestName = "ParamsIntArrayAfterOptionalStringEmptyTest")]
44 
45         [TestCase("emulation MethodThatTakesParamsIntArrayAfterOptionalString \"bcd\" 1 2 3", "arg: bcd args: [1, 2, 3]",
46             TestName = "ParamsIntArrayAfterOptionalStringTest")]
47 
48         [TestCase("emulation MethodWithOptionalParameters", "a: 1, b: 2, c: 3",
49             TestName = "OptionalParametersProvideNone")]
50 
51         [TestCase("emulation MethodWithOptionalParameters 3 4 5", "a: 3, b: 4, c: 5",
52             TestName = "OptionalParametersProvideAll")]
53 
54         [TestCase("emulation MethodWithOptionalParameters a=4", "a: 4, b: 2, c: 3",
55             TestName = "OptionalParametersProvideFirstByName")]
56 
57         [TestCase("emulation MethodWithOptionalParameters 2 b=4", "a: 2, b: 4, c: 3",
58             TestName = "OptionalParametersProvideMiddleByName")]
59 
60         [TestCase("emulation MethodWithOptionalParameters a=3 4 5", "a: 3, b: 4, c: 5",
61             TestName = "OptionalParametersProvideFirstByNameRestByPos")]
62 
63         [TestCase("emulation MethodWithOptionalParameters 3 c=4", "a: 3, b: 2, c: 4",
64             TestName = "OptionalParametersProvideLastByName")]
65 
66         [TestCase("emulation MethodWithOptionalParameters a=3 b=4 c=5", "a: 3, b: 4, c: 5",
67             TestName = "OptionalParametersProvideAllByName")]
68 
69         [TestCase("emulation MethodWithOptionalParameters c=5 b=4 a=3", "a: 3, b: 4, c: 5",
70             TestName = "OptionalParametersProvideAllByNameReverseOrder")]
71 
72         [TestCase("emulation MethodWithOptionalParametersAndParamArray c=5 b=4 a=3", "a: 3, b: 4, c: 5; ",
73             TestName = "OptionalParametersProvideAllByNameAndEmptyArray")]
74 
75         [TestCase("emulation MethodWithOptionalParametersAndParamArray c=5 b=4 a=3 9 6", "a: 3, b: 4, c: 5; 9, 6",
76             TestName = "OptionalParametersProvideAllByNameAndArray")]
CommandResultShouldContain(string command, string expected)77         public void CommandResultShouldContain(string command, string expected)
78         {
79             monitor.Parse(command, commandEater);
80             var contentsAfter = commandEater.GetContents();
81             StringAssert.Contains(expected, contentsAfter);
82         }
83 
84         [TestCase("emulation MethodWithOptionalParameters c=5 c=3",
85             TestName = "OptionalParametersFailOnDuplicateName")]
86 
87         [TestCase("emulation MethodWithOptionalParameters 1 a=4",
88             TestName = "OptionalParametersFailOnDuplicatePositionalAndNamed")]
89 
90         [TestCase("emulation MethodWithOptionalParameters b=1 4",
91             TestName = "OptionalParametersFailOnPositionalAfterNamed")]
CommandShouldFail(string command)92         public void CommandShouldFail(string command)
93         {
94             CommandResultShouldContain(command, "The following methods are available");
95         }
96 
97         [TearDown]
TearDown()98         public void TearDown()
99         {
100             commandEater.Clear();
101         }
102 
103         private CommandInteractionEater commandEater;
104         private Monitor monitor;
105     }
106 }
107 
108