Flutter desktop app for building Marp presentations via structured slide editors, with live preview, fullscreen presenter, and PDF/PPTX export. Includes Makefile quality gate, CI workflow, and full test suite. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
67 lines
2.1 KiB
Dart
67 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:ocideck/models/deck.dart';
|
|
import 'package:ocideck/models/slide.dart';
|
|
import 'package:ocideck/widgets/slides/slide_preview.dart';
|
|
|
|
void main() {
|
|
group('TlpLevel', () {
|
|
test('labels follow the FIRST TLP 2.0 spelling', () {
|
|
expect(TlpLevel.none.label, '');
|
|
expect(TlpLevel.clear.label, 'TLP:CLEAR');
|
|
expect(TlpLevel.green.label, 'TLP:GREEN');
|
|
expect(TlpLevel.amber.label, 'TLP:AMBER');
|
|
expect(TlpLevel.amberStrict.label, 'TLP:AMBER+STRICT');
|
|
expect(TlpLevel.red.label, 'TLP:RED');
|
|
});
|
|
|
|
test('menu label shows "Geen" for none', () {
|
|
expect(TlpLevel.none.menuLabel, 'Geen');
|
|
expect(TlpLevel.red.menuLabel, 'TLP:RED');
|
|
});
|
|
|
|
test('key round-trips through fromKey for every level', () {
|
|
for (final level in TlpLevel.values) {
|
|
expect(TlpLevelX.fromKey(level.key), level);
|
|
}
|
|
});
|
|
|
|
test('fromKey is forgiving and defaults to none', () {
|
|
expect(TlpLevelX.fromKey('AMBER+STRICT'), TlpLevel.amberStrict);
|
|
expect(TlpLevelX.fromKey('amberstrict'), TlpLevel.amberStrict);
|
|
expect(TlpLevelX.fromKey('onzin'), TlpLevel.none);
|
|
expect(TlpLevelX.fromKey(''), TlpLevel.none);
|
|
});
|
|
});
|
|
|
|
group('TLP marking on slides', () {
|
|
Widget host(TlpLevel tlp) => MaterialApp(
|
|
home: Scaffold(
|
|
body: Center(
|
|
child: SizedBox(
|
|
width: 800,
|
|
height: 450,
|
|
child: SlidePreviewWidget(
|
|
slide: Slide.create(
|
|
SlideType.bullets,
|
|
).copyWith(title: 'T', bullets: ['a']),
|
|
tlp: tlp,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
testWidgets('renders the marking when a level is set', (tester) async {
|
|
await tester.pumpWidget(host(TlpLevel.red));
|
|
await tester.pump();
|
|
expect(find.text('TLP:RED'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('renders nothing when none', (tester) async {
|
|
await tester.pumpWidget(host(TlpLevel.none));
|
|
await tester.pump();
|
|
expect(find.textContaining('TLP:'), findsNothing);
|
|
});
|
|
});
|
|
}
|