public void ProcessSetVariableValueResponse() {
            // Arrange
            const int commandId = 3;
            var resultFactoryMock = new Mock<IEvaluationResultFactory>();
            resultFactoryMock.Setup(factory => factory.Create(It.IsAny<INodeVariable>()))
                .Returns(() => new NodeEvaluationResult(0, null, null, null, null, null, NodeExpressionType.None, null));
            var stackFrame = new NodeStackFrame(0);
            const string variableName = "port";
            const int handle = 40;
            var setVariableValueCommand = new SetVariableValueCommand(commandId, resultFactoryMock.Object, stackFrame, variableName, handle);

            // Act
            setVariableValueCommand.ProcessResponse(SerializationTestData.GetSetVariableValueResponse());

            // Assert
            Assert.AreEqual(commandId, setVariableValueCommand.Id);
            Assert.IsNotNull(setVariableValueCommand.Result);
            resultFactoryMock.Verify(factory => factory.Create(It.IsAny<INodeVariable>()), Times.Once);
        }
        public void CreateSetVariableValueCommand() {
            // Arrange
            const int commandId = 3;
            const int frameId = 1;
            var resultFactoryMock = new Mock<IEvaluationResultFactory>();
            var stackFrame = new NodeStackFrame(frameId);
            const string variableName = "port";
            const int handle = 40;

            // Act
            var setVariableValueCommand = new SetVariableValueCommand(commandId, resultFactoryMock.Object, stackFrame, variableName, handle);

            // Assert
            Assert.AreEqual(commandId, setVariableValueCommand.Id);
            Assert.AreEqual(
                string.Format("{{\"command\":\"setVariableValue\",\"seq\":{0},\"type\":\"request\",\"arguments\":{{\"name\":\"{1}\",\"newValue\":{{\"handle\":{2}}},\"scope\":{{\"frameNumber\":{3},\"number\":0}}}}}}",
                    commandId, variableName, handle, frameId),
                setVariableValueCommand.ToString());
        }
        internal async Task<NodeEvaluationResult> SetVariableValueAsync(
            NodeStackFrame stackFrame,
            string name,
            string value,
            CancellationToken cancellationToken = new CancellationToken()) {
            DebugWriteCommand("Set Variable Value");

            // Create a new value
            var evaluateValueCommand = new EvaluateCommand(CommandId, _resultFactory, value, stackFrame);
            await _client.SendRequestAsync(evaluateValueCommand, cancellationToken).ConfigureAwait(false);
            int handle = evaluateValueCommand.Result.Handle;

            // Set variable value
            var setVariableValueCommand = new SetVariableValueCommand(CommandId, _resultFactory, stackFrame, name, handle);
            await _client.SendRequestAsync(setVariableValueCommand, cancellationToken).ConfigureAwait(false);
            return setVariableValueCommand.Result;
        }