import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/app_controller.dart'; import 'package:jj_mkvmaker/core/wifi_share.dart'; import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; import 'package:jj_mkvmaker/services/platform_services.dart'; import 'package:jj_mkvmaker/ui/wifi_share_page.dart'; /// 89: Wi-Fi 공유 화면 - 처음엔 꺼짐 · [켜기] 뒤 6자리 코드 · 주소 · 남은 시간 · [끄기] 로 꺼짐. 설정 파일은 쓰지 않는다 (저장소 없음) void main() { late Directory tmp; setUp(() { WifiShare.debugLoopbackOnly = true; tmp = Directory.systemTemp.createTempSync('jj_wifipage_'); File('${tmp.path}${Platform.pathSeparator}a.txt').writeAsStringSync('a'); }); tearDown(() async { await WifiShare.instance?.stop(); WifiShare.debugLoopbackOnly = false; try { tmp.deleteSync(recursive: true); } catch (_) {} }); testWidgets('꺼짐 → [켜기] → 코드 · 남은 시간 → [끄기] → 꺼짐', (tester) async { final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); expect(c.settings.wifiShareMinutes, 30, reason: '처음 값 30분 (관리자 지시)'); // 폰 세로처럼 좁고 긴 화면 (아래 줄까지 다 그려지게) tester.view.physicalSize = const Size(412, 1600); tester.view.devicePixelRatio = 1; addTearDown(tester.view.reset); await tester.pumpWidget(MaterialApp(home: WifiSharePage(c: c, folder: tmp.path))); expect(find.text('켜기'), findsOneWidget); expect(find.text('30분 뒤'), findsOneWidget); expect(WifiShare.instance, isNull, reason: '화면을 열기만 해서는 켜지지 않는다 (기본 꺼짐)'); await tester.tap(find.text('켜기')); for (var i = 0; i < 20 && WifiShare.instance == null; i++) { await tester.runAsync(() => Future.delayed(const Duration(milliseconds: 50))); await tester.pump(); } await tester.pump(); final s = WifiShare.instance!; expect(find.text(s.code), findsOneWidget); expect(find.textContaining('분 뒤에 저절로 꺼집니다'), findsOneWidget); expect(find.text('아직 접속한 기기가 없습니다'), findsOneWidget); expect(c.settings.wifiShareFolder, tmp.path); await tester.tap(find.text('끄기')); await tester.runAsync(() => Future.delayed(const Duration(milliseconds: 100))); await tester.pump(); expect(WifiShare.instance, isNull); expect(find.text('켜기'), findsOneWidget); }); }