manager-app/myinfomate_layout/test/bento_layout_test.dart
2026-07-14 17:20:20 +02:00

45 lines
1.4 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'package:myinfomate_layout/myinfomate_layout.dart';
import 'package:test/test.dart';
void main() {
final fixturePath =
'${Directory.current.path}/test/fixtures/bento_layout_cases.json';
final fixture =
jsonDecode(File(fixturePath).readAsStringSync()) as Map<String, dynamic>;
final cases = fixture['cases'] as List<dynamic>;
for (final rawCase in cases) {
final testCase = rawCase as Map<String, dynamic>;
test(testCase['name'], () {
final items = (testCase['items'] as List<dynamic>)
.map((raw) => BentoItem(
id: raw['id'] as String,
colSpan: raw['colSpan'] as int,
rowSpan: raw['rowSpan'] as int,
))
.toList();
final result = bentoLayout(items, testCase['columns'] as int);
final expected = testCase['expected'] as Map<String, dynamic>;
expect(result.rowCount, expected['rowCount']);
final expectedPlacements = expected['placements'] as List<dynamic>;
expect(result.placements.length, expectedPlacements.length);
for (var i = 0; i < result.placements.length; i++) {
final p = result.placements[i];
final e = expectedPlacements[i] as Map<String, dynamic>;
expect(p.id, e['id']);
expect(p.col, e['col']);
expect(p.row, e['row']);
expect(p.colSpan, e['colSpan']);
expect(p.rowSpan, e['rowSpan']);
}
});
}
}