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