/
katherinesiv
/
CSharp_Practice6
Обзор
Документация
Войти
/
katherinesiv
/
CSharp_Practice6
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
FieldParserTaskTests.cs
93 строки
3 KB
Сиваева Екатерина
create FieldParserTaskTests.cs
16 ноя 2025, 21:11
16 ноя 2025, 21:11
72f2f30
Код
Авторство
О чём код?
using System.Collections.Generic; using NUnit.Framework; using NUnit.Framework.Legacy; namespace TableParser; [TestFixture] public class FieldParserTaskTests { public static void Test(string input, string[] expectedResult) { var actualResult = FieldsParserTask.ParseLine(input); ClassicAssert.AreEqual(expectedResult.Length, actualResult.Count); for (int i = 0; i < expectedResult.Length; ++i) { ClassicAssert.AreEqual(expectedResult[i], actualResult[i].Value); } } [TestCase("text", new[] { "text" })] [TestCase("hello world", new[] { "hello", "world" })] [TestCase("a b", new[] { "a", "b" })] [TestCase("", new string[0])] [TestCase(" ", new string[0])] [TestCase("a b", new[] { "a", "b" })] [TestCase(" a b ", new[] { "a", "b" })] [TestCase("'a b'", new[] { "a b" })] [TestCase("'a' b", new[] { "a", "b" })] [TestCase("'a\\'b'", new[] { "a'b" })] [TestCase("\"a\\\"b\"", new[] { "a\"b" })] [TestCase("'a", new[] { "a" })] [TestCase("''", new[] { "" })] [TestCase("a 'b'", new[] { "a", "b" })] [TestCase("'a\\\\'", new[] { "a\\" })] [TestCase("'a\\\\b'", new[] { "a\\b" })] [TestCase("\"a'b\"", new[] { "a'b" })] [TestCase("'a\"b'", new[] { "a\"b" })] [TestCase("ab", new[] { "ab" })] [TestCase("a'b", new[] { "a", "b" })] [TestCase("'a ", new[] { "a " })] public static void RunTests(string input, string[] expectedOutput) { Test(input, expectedOutput); } } public class FieldsParserTask { public static List<Token> ParseLine(string line) { var startIndex = 0; var tokens = new List<Token>(); while (startIndex < line.Length) { startIndex = SkipSpaces(line, startIndex); Token token; if (startIndex == line.Length) break; if (line[startIndex] == '\'' || line[startIndex] == '\"') token = ReadQuotedField(line, startIndex); else token = ReadField(line, startIndex); tokens.Add(token); startIndex = token.GetIndexNextToToken(); } return tokens; } private static int SkipSpaces(string line, int startIndex) { while (startIndex < line.Length && line[startIndex] == ' ') startIndex++; return startIndex; } private static Token ReadField(string line, int startIndex) { var lengthToken = 0; for (var i = startIndex; i < line.Length; i++) { if (line[i] == ' ' || line[i] == '\"' || line[i] == '\'') break; lengthToken++; } return new Token(line.Substring(startIndex, lengthToken), startIndex, lengthToken); } public static Token ReadQuotedField(string line, int startIndex) { return QuotedFieldTask.ReadQuotedField(line, startIndex); } }