Проверка условий ввода данных в textBox - C#
Формулировка задачи:
Вводится последовательность слов, их должно быть не меньше 12, длинна от 1 до 5, разделитель - запятая, за последним словом - точка. Нужно проверить нет ли за последним словом 2-х точек, проверить строку на пустоту, длину слов и их количество. Когда выводится сообщение о 1 ошибке, остальные не проверять.
Собственно не получается проверить пустую строку и 2 точки (просто не понимаю как это сделать).
public void Task() //метод реализации рограммного задания
{
if (Data.Length > 0)
MessageBox.Show("Пустая строка!");
else
if (Data[Data.Length - 1] != '.')
{
MessageBox.Show("В конце строки должна быть 1 точка!");
}
else
{
char[] usl = { ',' };
string[] parts = this.Data.Split(usl);
if (parts.Rank < 12)
{
MessageBox.Show("Содержится меньше 12 слов!");
}
else
{
for (int i = 0; i < parts.Rank; i++)
{
if ((parts[i].Length >= 1) & (parts[i].Length < 6))
MessageBox.Show("В словах меньше 1 или больше 5 знаков");
}
}
}Решение задачи: «Проверка условий ввода данных в textBox»
textual
Листинг программы
[TestClass]
public class MessageCheckerTests
{
[TestMethod]
public void EmptyText()
{
var str = "";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(()=> checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.EmptyString);
}
[TestMethod]
public void LessThen12()
{
var str = "abcde,abcde.";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(() => checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.WordsCount);
}
[TestMethod]
public void WordLengthIsZero()
{
var str = "abcde,abcde,,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde.";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(() => checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.WordLength);
}
[TestMethod]
public void WordLengthGreaterThen5()
{
var str = "abcde,abcdef,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde.";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(() => checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.WordLength);
}
[TestMethod]
public void DotSkipped()
{
var str = "abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(() => checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.DotAtEndSkipped);
}
[TestMethod]
public void MultipleDots()
{
var str = "abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde,abcde..";
var checker = new MessageChecker();
var ex = AssertException.Throws<MessageCheckException>(() => checker.Check(str));
Assert.AreEqual(ex.ErrorType, MessageError.MultipleDotsAtEnd);
}
}
public class MessageChecker
{
public void Check(string msg)
{
if (msg.Length == 0)
throw new MessageCheckException(MessageError.EmptyString, "Пустая строка!");
else if (msg.Last() != '.')
{
throw new MessageCheckException(MessageError.DotAtEndSkipped, "В конце строки должна быть 1 точка!");
}
else if (msg.Last() == '.' && msg.Length > 1 && msg[msg.Length - 2] == '.')
{
throw new MessageCheckException(MessageError.MultipleDotsAtEnd, "В конце строки должна быть только 1 точка!");
}
else
{
char[] usl = { ',' };
string[] parts = msg.Split(usl);
if (parts.Length < 12)
{
throw new MessageCheckException(MessageError.WordsCount, "Содержится меньше 12 слов!");
}
else
{
for (int i = 0; i < parts.Length; i++)
{
if ((parts[i].Length < 1) || (parts[i].Length > 5))
throw new MessageCheckException(MessageError.WordLength, "В словах меньше 1 или больше 5 знаков");
}
}
}
}
}
public enum MessageError
{
EmptyString,
WordsCount,
WordLength,
DotAtEndSkipped,
MultipleDotsAtEnd
}
public class MessageCheckException : Exception
{
public MessageCheckException(MessageError errorType, string msg) : base(msg)
{
ErrorType = errorType;
}
public MessageError ErrorType { get; private set; }
}
public static class AssertException
{
public static T Throws<T>(Action action) where T : Exception
{
try
{
action();
}
catch (T ex)
{
return ex;
}
Assert.Fail("Expected exception of type {0}.", typeof(T));
return null;
}
}