import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; /// 뒤에서 저장이 끝나는 것 (책갈피 저장 등) 을 기다렸다가 지울 임시 폴더 - 시험 파일이 끝날 때 지운다. /// 시험마다 바로 지우면 늦게 끝난 저장이 폴더를 다시 만들어 %TEMP% 에 jj_* 가 남았다 (관리자 지시 10/17, tool/test_temp_check.ps1). final _later = []; /// [prefix] 로 임시 폴더를 만들고, 파일 끝 ([deleteTempDirsAtEnd]) 에 지우도록 적어 둔다 Directory tempDirUntilEnd(String prefix) { final d = Directory.systemTemp.createTempSync(prefix); _later.add(d); expectInTaggedTemp(d); return d; } /// 관리자 지시 (10/20): tool/test_temp_check.ps1 이 TEMP · TMP 를 실행 폴더 (%TEMP%\t_jjrun_<표>) 로 돌리고 표를 JJ_TEST_TMP_TAG 로 넘긴다. /// 표가 있는데 임시 폴더가 그 밖에 생기면 (환경 변수가 시험 · 앱까지 오지 않음) 다른 세션 시험과 섞이므로 시험을 실패시킨다 void expectInTaggedTemp(Directory dir) { final tag = Platform.environment['JJ_TEST_TMP_TAG'] ?? ''; if (tag.isEmpty) return; expect(dir.absolute.path.toLowerCase(), contains('t_jjrun_$tag'.toLowerCase()), reason: 'TEMP 가 시험 실행 폴더로 오지 않음 (JJ_TEST_TMP_TAG=$tag)'); } /// main() 에서 한 번 부른다: 파일의 시험이 다 끝나면 [tempDirUntilEnd] 로 만든 폴더를 지운다 /// (늦게 끝난 저장이 다시 만들 수 있어 잠깐씩 기다리며 몇 번 본다) void deleteTempDirsAtEnd() { tearDownAll(() async { for (var round = 0; round < 5; round++) { await Future.delayed(const Duration(milliseconds: 200)); for (final d in _later) { try { if (d.existsSync()) d.deleteSync(recursive: true); } on FileSystemException { // 잠깐 잡혀 있으면 다음 차례에 } } } _later.removeWhere((d) => !d.existsSync()); }); }