Skip to content

Commit a9df81e

Browse files
committed
Тесты
1 parent 0ceb018 commit a9df81e

3 files changed

Lines changed: 208 additions & 0 deletions

File tree

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// MarkdownExtraTests.cs
2+
using NUnit.Framework;
3+
using FluentAssertions;
4+
using Markdown;
5+
6+
namespace Markdown.tests
7+
{
8+
[TestFixture]
9+
public class MarkdownExtraTests
10+
{
11+
private Md md;
12+
13+
[SetUp]
14+
public void Setup()
15+
{
16+
md = new Md();
17+
}
18+
19+
[Test]
20+
public void MarkdownSpec_ShouldReturnNull_WhenInputIsNull()
21+
{
22+
md.Render(null).Should().Be(null);
23+
}
24+
25+
[TestCase("#НеЗаголовок", "#НеЗаголовок", TestName = "Без пробела # не заголовок")]
26+
[TestCase("_пример число12 текста_", "_пример число12 текста_", TestName = "Числа не выделяются em")]
27+
[TestCase("__пример число12 текста__", "__пример число12 текста__", TestName = "Числа не выделяются strong")]
28+
[TestCase("текст_нет выделения_конец", "текст_нет выделения_конец", TestName = "Раздельные части не выделяются")]
29+
[TestCase("____", "____", TestName = "Пустая строка не выделяется strong")]
30+
[TestCase("__", "__", TestName = "Пустая строка не выделяется em")]
31+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenNoChangesExpected(string input, string expected)
32+
{
33+
md.Render(input).Should().Be(expected);
34+
}
35+
[TestCase("_выделение_конец", "<em>выделение</em>конец", TestName = "Выделение в начале em")]
36+
[TestCase("текст_выделение_конец", "текст<em>выделение</em>конец", TestName = "Выделение в середине em")]
37+
[TestCase("текст_выделение_", "текст<em>выделение</em>", TestName = "Выделение в конце em")]
38+
[TestCase("_а__б__с_", "<em>а__б__с</em>", TestName = "<strong> не работает в em")]
39+
[TestCase("_а_ _б_", "<em>а</em> <em>б</em>", TestName = "Два тега em")]
40+
[TestCase("_пример _текста_ пример_", "_пример <em>текста</em> пример_", TestName = "Нет вложенных em")]
41+
[TestCase("a_b c_d_", "a_b c<em>d</em>", TestName = "Пробел блокирует выделение em")]
42+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenEmExpected(string input, string expected)
43+
{
44+
md.Render(input).Should().Be(expected);
45+
}
46+
[TestCase("__выделение__конец", "<strong>выделение</strong>конец", TestName = "Выделение в начале strong")]
47+
[TestCase("текст__выделение__конец", "текст<strong>выделение</strong>конец", TestName = "Выделение в середине strong")]
48+
[TestCase("текст__выделение__", "текст<strong>выделение</strong>", TestName = "Выделение в конце strong")]
49+
[TestCase("__а__ __б__", "<strong>а</strong> <strong>б</strong>", TestName = "Два тега strong")]
50+
[TestCase("__пример __текста__ пример__", "__пример <strong>текста</strong> пример__", TestName = "Нет вложенных strong")]
51+
[TestCase("a__b c__d__", "a__b c<strong>d</strong>", TestName = "Пробел блокирует выделение strong")]
52+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenStrongExpected(string input, string expected)
53+
{
54+
md.Render(input).Should().Be(expected);
55+
}
56+
[TestCase("__а_b_в__", "<strong>а<em>b</em>в</strong>",TestName = "em разрешено в strong")]
57+
[TestCase("__a__ _b_", "<strong>a</strong> <em>b</em>")]
58+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenStrongAndEmExpected(string input, string expected)
59+
{
60+
md.Render(input).Should().Be(expected);
61+
}
62+
63+
[TestCase(@"\\_а_", @"\<em>а</em>", TestName = @"Экранироание \")]
64+
[TestCase(@"\# Заголовок", "# Заголовок", TestName = "Экранирование #")]
65+
[TestCase(@"\_пример 1 текста_", "_пример 1 текста_", TestName = "Экранирование без пары")]
66+
[TestCase(@"\_x_", "_x_", TestName = "Экранирование em")]
67+
[TestCase(@"\__x__", "__x__", TestName = "Экранирование strong")]
68+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenEscapingExpected(string input, string expected)
69+
{
70+
md.Render(input).Should().Be(expected);
71+
}
72+
73+
[TestCase("# Заголовок", "<h1>Заголовок</h1>", TestName = "Базовый заголовок")]
74+
[TestCase("# Заголовок __bold__", "<h1>Заголовок <strong>bold</strong></h1>", TestName = "Заголовок strong")]
75+
[TestCase("# Заголовок _cursive_", "<h1>Заголовок <em>cursive</em></h1>", TestName = "Заголовок em")]
76+
77+
public void MarkdownSpec_ShouldReturnExpectedValue_WhenHeaderExpected(string input, string expected)
78+
{
79+
md.Render(input).Should().Be(expected);
80+
}
81+
82+
}
83+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Text;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
using Markdown;
7+
8+
namespace Markdown.tests
9+
{
10+
[TestFixture]
11+
public class MarkdownPerformanceTests
12+
{
13+
private Md md;
14+
15+
[SetUp]
16+
public void Setup()
17+
{
18+
md = new Md();
19+
}
20+
21+
private string MakeInput(int minLength)
22+
{
23+
var sb = new StringBuilder(minLength + 100);
24+
int i = 0;
25+
while (sb.Length < minLength)
26+
{
27+
sb.Append("слово");
28+
sb.Append(i % 10);
29+
sb.Append("_");
30+
sb.Append("внутри");
31+
sb.Append(i % 100);
32+
sb.Append("__bold__ ");
33+
if (i % 7 == 0) sb.Append(@"\_esc\_ ");
34+
i++;
35+
}
36+
return sb.ToString();
37+
}
38+
39+
[Test]
40+
public void Render_ShouldScaleApproximatelyLinearly()
41+
{
42+
43+
int n1 = 50_000;
44+
int n2 = 2_000_000;
45+
var s1 = MakeInput(n1);
46+
var s2 = MakeInput(n2);
47+
48+
var sw = Stopwatch.StartNew();
49+
md.Render(s1);
50+
sw.Stop();
51+
double t1 = sw.Elapsed.TotalMilliseconds;
52+
53+
sw.Restart();
54+
md.Render(s2);
55+
sw.Stop();
56+
double t2 = sw.Elapsed.TotalMilliseconds;
57+
58+
double perChar1 = t1 / s1.Length;
59+
double perChar2 = t2 / s2.Length;
60+
61+
TestContext.WriteLine($"Размер1={s1.Length}, время1={t1} ms, на символ={perChar1} ms");
62+
TestContext.WriteLine($"Размер2={s2.Length}, время2={t2} ms, на символ={perChar2} ms");
63+
64+
// Допустимый коэффициент роста времени на символ.
65+
double allowedFactor = 3.0;
66+
67+
perChar2.Should().BeLessThan(perChar1 * allowedFactor);
68+
}
69+
}
70+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// MdTests.cs
2+
using NUnit.Framework;
3+
using FluentAssertions;
4+
using Markdown;
5+
6+
namespace Markdown.tests
7+
{
8+
[TestFixture]
9+
public class MarkdownSpecTests
10+
{
11+
private Md md;
12+
13+
[SetUp]
14+
public void Setup()
15+
{
16+
md = new Md();
17+
}
18+
19+
[TestCase("Текст, _окруженный с двух сторон_ одинарными символами",
20+
"Текст, <em>окруженный с двух сторон</em> одинарными символами")]
21+
[TestCase("__Выделенный двумя символами текст__",
22+
"<strong>Выделенный двумя символами текст</strong>")]
23+
[TestCase(@"\_Вот это\_, не должно выделиться тегом",
24+
"_Вот это_, не должно выделиться тегом")]
25+
[TestCase(@"Здесь сим\волы экранирования\ \должны остаться.\",
26+
@"Здесь сим\волы экранирования\ \должны остаться.\")]
27+
[TestCase(@"Символ экранирования тоже можно экранировать: \\_вот_ это будет выделено тегом",
28+
@"Символ экранирования тоже можно экранировать: \<em>вот</em> это будет выделено тегом")]
29+
[TestCase("Внутри __двойного выделения _одинарное_ тоже__ работает.",
30+
"Внутри <strong>двойного выделения <em>одинарное</em> тоже</strong> работает.")]
31+
[TestCase("Но не наоборот — внутри _одинарного __двойное__ не_ работает.",
32+
"Но не наоборот — внутри <em>одинарного __двойное__ не</em> работает.")]
33+
[TestCase("Подчерки внутри текста c цифрами_12_3 не считаются выделением и должны оставаться символами подчерка.",
34+
"Подчерки внутри текста c цифрами_12_3 не считаются выделением и должны оставаться символами подчерка.")]
35+
[TestCase("Однако выделять часть слова они могут: и в _нач_але, и в сер_еди_не, и в кон_це._",
36+
"Однако выделять часть слова они могут: и в <em>нач</em>але, и в сер<em>еди</em>не, и в кон<em>це.</em>")]
37+
[TestCase("В то же время выделение в ра_зных сл_овах не работает.",
38+
"В то же время выделение в ра_зных сл_овах не работает.")]
39+
[TestCase("__Непарные_ символы в рамках одного абзаца не считаются выделением.",
40+
"__Непарные_ символы в рамках одного абзаца не считаются выделением.")]
41+
[TestCase("эти_ подчерки_ не считаются выделением и остаются просто символами подчерка.",
42+
"эти_ подчерки_ не считаются выделением и остаются просто символами подчерка.")]
43+
[TestCase("Иначе эти _подчерки _не считаются_ окончанием выделения",
44+
"Иначе эти _подчерки <em>не считаются</em> окончанием выделения")]
45+
[TestCase("В случае __пересечения _двойных__ и одинарных_ подчерков ни один из них не считается выделением.",
46+
"В случае __пересечения _двойных__ и одинарных_ подчерков ни один из них не считается выделением.")]
47+
[TestCase("Если внутри подчерков пустая строка ____, то они остаются символами подчерка.",
48+
"Если внутри подчерков пустая строка ____, то они остаются символами подчерка.")]
49+
[TestCase("# Заголовок __с _разными_ символами__",
50+
"<h1>Заголовок <strong>с <em>разными</em> символами</strong></h1>")]
51+
public void MarkdownSpec_ShouldReturnExpectedValue(string input, string expected) {
52+
md.Render(input).Should().Be(expected);
53+
}
54+
}
55+
}

0 commit comments

Comments
 (0)