62 lines
2.3 KiB
Dart
62 lines
2.3 KiB
Dart
import 'dart:io';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:ponshu_room_lite/services/analysis_cache_service.dart';
|
|
|
|
void main() {
|
|
group('AnalysisCacheService - computeImageHash', () {
|
|
late String tempFilePath;
|
|
late String tempFilePath2;
|
|
|
|
setUp(() async {
|
|
// テスト用の一時ファイルを作成
|
|
final tempDir = Directory.systemTemp.createTempSync('ponshu_test_');
|
|
final tempFile = File('${tempDir.path}/test_image.jpg');
|
|
await tempFile.writeAsBytes([0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10]); // JPEG header bytes
|
|
tempFilePath = tempFile.path;
|
|
|
|
final tempFile2 = File('${tempDir.path}/test_image_2.jpg');
|
|
await tempFile2.writeAsBytes([0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x20]); // Different bytes
|
|
tempFilePath2 = tempFile2.path;
|
|
});
|
|
|
|
tearDown(() {
|
|
// 一時ファイルをクリーンアップ
|
|
try {
|
|
File(tempFilePath).deleteSync();
|
|
File(tempFilePath2).deleteSync();
|
|
File(tempFilePath).parent.deleteSync();
|
|
} catch (_) {}
|
|
});
|
|
|
|
test('should return consistent hash for the same file', () async {
|
|
final hash1 = await AnalysisCacheService.computeImageHash(tempFilePath);
|
|
final hash2 = await AnalysisCacheService.computeImageHash(tempFilePath);
|
|
|
|
expect(hash1, equals(hash2));
|
|
expect(hash1.length, 64); // SHA-256 produces 64 hex characters
|
|
});
|
|
|
|
test('should return different hashes for different files', () async {
|
|
final hash1 = await AnalysisCacheService.computeImageHash(tempFilePath);
|
|
final hash2 = await AnalysisCacheService.computeImageHash(tempFilePath2);
|
|
|
|
expect(hash1, isNot(equals(hash2)));
|
|
});
|
|
|
|
test('should return the file path when file does not exist', () async {
|
|
const nonExistentPath = '/non/existent/file.jpg';
|
|
final result = await AnalysisCacheService.computeImageHash(nonExistentPath);
|
|
|
|
// エラー時はファイルパスがそのまま返される(フォールバック動作)
|
|
expect(result, nonExistentPath);
|
|
});
|
|
|
|
test('hash should be a valid hex string', () async {
|
|
final hash = await AnalysisCacheService.computeImageHash(tempFilePath);
|
|
|
|
// SHA-256ハッシュは0-9a-fの64文字
|
|
expect(hash, matches(RegExp(r'^[0-9a-f]{64}$')));
|
|
});
|
|
});
|
|
}
|