public void NonTruncatedEmptyInputTest()
        {
            var terminalState    = new TerminalState();
            var isInputLengthSet = terminalState.TrySetTerminalInputLengthLimit(1);
            var isInputTruncated = terminalState.TryTruncateInput(string.Empty, out var truncatedInput);

            Assert.IsTrue(isInputLengthSet);
            Assert.IsFalse(isInputTruncated);
            Assert.IsNull(truncatedInput);
        }
        public void SetInputLengthLimitTest()
        {
            var terminalState = new TerminalState();
            var expected      = 20;
            var isLimitSet    = terminalState.TrySetTerminalInputLengthLimit(expected);
            var actual        = terminalState.GetInputLengthLimit();

            Assert.IsTrue(isLimitSet);
            Assert.AreEqual(expected, actual);
        }
        public void InvalidInputEmptyTest()
        {
            var terminalState    = new TerminalState();
            var isInputLengthSet = terminalState.TrySetTerminalInputLengthLimit(1);
            var isInputValid     = terminalState.TryValidateInput(string.Empty, out var validInput);

            Assert.IsTrue(isInputLengthSet);
            Assert.IsFalse(isInputValid);
            Assert.IsNull(validInput);
        }
        public void SetCurrentInputOverLengthLimitTest()
        {
            var terminalState         = new TerminalState();
            var stringOverLengthLimit = "this is a really long test";
            var isLengthLimitSet      = terminalState.TrySetTerminalInputLengthLimit(10);
            var isInputSet            = terminalState.TrySetCurrentInput(stringOverLengthLimit);

            Assert.IsTrue(isLengthLimitSet);
            Assert.IsFalse(isInputSet);
        }
        public void ValidInputTest()
        {
            var terminalState    = new TerminalState();
            var expected         = "test";
            var isInputLengthSet = terminalState.TrySetTerminalInputLengthLimit(10);
            var isInputValid     = terminalState.TryValidateInput(expected, out var validInput);

            Assert.IsTrue(isInputLengthSet);
            Assert.IsTrue(isInputValid);
            Assert.AreEqual(expected, validInput);
        }
        public void InitializeTerminalState(TerminalState terminalState, int inputLengthCharacterLimit, int inputHistoryLimit)
        {
            Debug.Assert(inputLengthCharacterLimit > 0, "Input length character limit is invalid.");
            Debug.Assert(inputHistoryLimit > 0, "Input history limit is invalid.");

            var isInputLengthSetSuccess  = terminalState.TrySetTerminalInputLengthLimit(inputLengthCharacterLimit);
            var isInputHistorySetSuccess = terminalState.TrySetCommandHistoryLimit(inputHistoryLimit);

            Debug.Assert(isInputLengthSetSuccess, "Failed to set maximum input length.");
            Debug.Assert(isInputHistorySetSuccess, "Failed to set maximum input history limit.");
        }
        public void SetCurrentInputTest()
        {
            var terminalState    = new TerminalState();
            var expected         = "test";
            var isLengthLimitSet = terminalState.TrySetTerminalInputLengthLimit(10);
            var isInputSet       = terminalState.TrySetCurrentInput(expected);
            var actual           = terminalState.GetCurrentInput();

            Assert.IsTrue(isLengthLimitSet);
            Assert.IsTrue(isInputSet);
            Assert.AreEqual(actual, expected);
        }
        public void TruncatedInputTest()
        {
            var terminalState    = new TerminalState();
            var input            = "test";
            var lengthLimit      = 1;
            var isInputLengthSet = terminalState.TrySetTerminalInputLengthLimit(lengthLimit);
            var isInputTruncated = terminalState.TryTruncateInput(input, out var truncatedInput);

            Assert.IsTrue(isInputLengthSet);
            Assert.IsTrue(isInputTruncated);
            Assert.AreNotEqual(input, truncatedInput);
            Assert.AreEqual(truncatedInput.Length, lengthLimit);
        }
        public void ClearCurrentInputTest()
        {
            var terminalState    = new TerminalState();
            var previousInput    = "exists";
            var isLengthLimitSet = terminalState.TrySetTerminalInputLengthLimit(10);
            var isInputSet       = terminalState.TrySetCurrentInput(previousInput);

            terminalState.ClearCurrentInput();
            var actual = terminalState.GetCurrentInput();

            Assert.IsTrue(isLengthLimitSet);
            Assert.IsTrue(isInputSet);
            Assert.IsNotNull(actual);
            Assert.IsEmpty(actual);
        }