import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:jj_mkvmaker/app/app_controller.dart';
import 'package:jj_mkvmaker/app/bookmarks_controller.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/browser_page.dart';
import 'support/temp_dir.dart';
import 'package:path/path.dart' as p;
/// 실제 웹뷰 (Windows: Edge WebView2 · Android: 시스템 WebView) + 실제 Google 번역:
/// 페이지 자동 번역 · 원문 보기 · JavaScript 끄기.
/// Android 는 JavaScript 를 끄면 앱이 페이지를 읽을 수 없어, 페이지 스크립트가 돌면 서버로 보내는 신호 (/ran) 로 확인한다.
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('웹 페이지 번역 · JavaScript 끄기', (tester) async {
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
var pageLoads = 0, scriptRuns = 0;
server.listen((req) async {
if (req.uri.path == '/ran') {
scriptRuns++;
req.response.statusCode = 204;
await req.response.close();
return;
}
if (req.uri.path != '/') {
req.response.statusCode = 404;
await req.response.close();
return;
}
pageLoads++;
req.response
..headers.contentType = ContentType.html
..write('
JJ'
'Hello world
'
' Download the video
'
'Hello code'
'안녕하세요 여러분
'
''
'no script
'
''
'');
await req.response.close();
});
final url = 'http://127.0.0.1:${server.port}/';
final dataDir = testTempDir('jj_webview_').path;
final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService()));
c.settings
..webViewDataDir = dataDir
..uiLanguage = 'ko'
..webTranslate = true;
final bm = BookmarksController(p.join(dataDir, 'bm.json'));
await tester.pumpWidget(MaterialApp(home: BrowserPage(c: c, bookmarks: bm, initialUrl: url)));
Future