54 lines
1.7 KiB
Dart
54 lines
1.7 KiB
Dart
import 'dart:typed_data';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:korken_mosaic/project_codec.dart';
|
|
|
|
void main() {
|
|
test('MosaicProjectData json roundtrip keeps values including catalog snapshot', () {
|
|
final original = MosaicProjectData(
|
|
useCapSize: true,
|
|
gridWidth: '50',
|
|
gridHeight: '40',
|
|
capSize: '10',
|
|
fidelityStructure: 0.3,
|
|
ditheringStrength: 0.2,
|
|
edgeEmphasis: 0.4,
|
|
colorVariation: 0.5,
|
|
selectedPreset: 'realistisch',
|
|
sourceImageBytes: Uint8List.fromList([1, 2, 3]),
|
|
catalogSnapshot: const [
|
|
MosaicPaletteSnapshotEntry(name: 'White', colorValue: 0xFFF2F2F2),
|
|
MosaicPaletteSnapshotEntry(name: 'Blue', colorValue: 0xFF3F6FD8),
|
|
],
|
|
savedAt: DateTime.parse('2026-01-01T12:00:00Z'),
|
|
);
|
|
|
|
final decoded = MosaicProjectData.fromJson(original.toJson());
|
|
|
|
expect(decoded.useCapSize, isTrue);
|
|
expect(decoded.gridWidth, '50');
|
|
expect(decoded.gridHeight, '40');
|
|
expect(decoded.capSize, '10');
|
|
expect(decoded.selectedPreset, 'realistisch');
|
|
expect(decoded.sourceImageBytes, isNotNull);
|
|
expect(decoded.sourceImageBytes!, [1, 2, 3]);
|
|
expect(decoded.catalogSnapshot.length, 2);
|
|
expect(decoded.catalogSnapshot.first.name, 'White');
|
|
expect(decoded.catalogSnapshot.last.colorValue, 0xFF3F6FD8);
|
|
});
|
|
|
|
test('MosaicProjectData defaults to empty snapshot when old project has none', () {
|
|
final decoded = MosaicProjectData.fromJson({
|
|
'useCapSize': false,
|
|
'gridWidth': '40',
|
|
'gridHeight': '30',
|
|
'capSize': '12',
|
|
'selectedPreset': 'ausgewogen',
|
|
'savedAt': '2026-01-01T12:00:00Z',
|
|
});
|
|
|
|
expect(decoded.catalogSnapshot, isEmpty);
|
|
expect(decoded.sourceImageBytes, isNull);
|
|
});
|
|
}
|