public void Render_ShouldThrowException_WhenNegativeTurnedOffLampsValueIsGiven()
        {
            var request = new BerlinClockRendererRequest
            {
                TurnedOnLampSign       = 'X',
                AmountOfTurnedOnLamps  = 1,
                AmountOfTurnedOffLamps = -1
            };

            Assert.Throws <Exception>(() => _sut.Render(request));
        }
        public void Render_ShouldModifyResult_WhenAdditionalFormattingIsGiven()
        {
            var expectedValue = "TEST";
            var request       = new BerlinClockRendererRequest
            {
                AdditionalFormatting   = (row) => expectedValue,
                TurnedOnLampSign       = 'X',
                AmountOfTurnedOnLamps  = 1,
                AmountOfTurnedOffLamps = 1
            };

            var result = _sut.Render(request);

            Assert.That(result, Is.EqualTo(expectedValue));
        }
        public string Render(BerlinClockRendererRequest request)
        {
            if (request.AmountOfTurnedOffLamps < 0 || request.AmountOfTurnedOnLamps < 0)
            {
                throw new Exception("Cannot render negative values");
            }

            var stringBuilder = new StringBuilder();

            stringBuilder.Append(request.TurnedOnLampSign, request.AmountOfTurnedOnLamps);
            stringBuilder.Append(TurnedOffLampSign, request.AmountOfTurnedOffLamps);

            var row = stringBuilder.ToString();

            return(request.AdditionalFormatting != null
                ? request.AdditionalFormatting(row) : row);
        }