Ocideck/test/inline_markdown_test.dart

78 lines
2.5 KiB
Dart
Raw Normal View History

import 'package:flutter_test/flutter_test.dart';
import 'package:ocideck/widgets/slides/inline_markdown.dart';
void main() {
group('stripInlineMarkdown', () {
test('removes emphasis markers but keeps the text', () {
expect(
stripInlineMarkdown('Dit is **vet** en *cursief*.'),
'Dit is vet en cursief.',
);
expect(stripInlineMarkdown('Een `code` stukje'), 'Een code stukje');
expect(stripInlineMarkdown('~~weg~~ ermee'), 'weg ermee');
});
test('keeps link text and drops the url', () {
expect(
stripInlineMarkdown('Zie [de site](https://example.com) nu'),
'Zie de site nu',
);
});
test('leaves plain text untouched and is cheap', () {
expect(stripInlineMarkdown('Gewoon platte tekst'), 'Gewoon platte tekst');
});
test('unterminated markers stay literal', () {
expect(stripInlineMarkdown('2 * 3 = 6'), '2 * 3 = 6');
expect(stripInlineMarkdown('een **halve vet'), 'een **halve vet');
});
test('escaped markers become literal characters', () {
expect(
stripInlineMarkdown(r'letterlijk \*sterren\*'),
'letterlijk *sterren*',
);
});
});
group('parseInlineRuns', () {
test('splits styled and plain runs', () {
final runs = parseInlineRuns('a **b** c');
expect(runs.map((r) => r.text).toList(), ['a ', 'b', ' c']);
expect(runs[0].bold, isFalse);
expect(runs[1].bold, isTrue);
expect(runs[2].bold, isFalse);
});
test('nested emphasis inside a link carries both flags', () {
final runs = parseInlineRuns('[**klik**](https://x.io)');
expect(runs, hasLength(1));
expect(runs.single.text, 'klik');
expect(runs.single.bold, isTrue);
expect(runs.single.link, 'https://x.io');
});
test('code spans are literal (no inner parsing)', () {
final runs = parseInlineRuns('`a*b*c`');
expect(runs, hasLength(1));
expect(runs.single.text, 'a*b*c');
expect(runs.single.code, isTrue);
});
test('combines bold and italic when nested', () {
final runs = parseInlineRuns('**_allebei_**');
expect(runs.single.bold, isTrue);
expect(runs.single.italic, isTrue);
expect(runs.single.text, 'allebei');
});
test('merges adjacent runs with identical styling', () {
// 'a' + escaped '*' + 'b' → één platte run "a*b"
final runs = parseInlineRuns(r'a\*b');
expect(runs, hasLength(1));
expect(runs.single.text, 'a*b');
});
});
}