translate 시험 2개: 좁은 도구 막대에서는 [더 보기] 메뉴로 누른다 (예전부터의 실패, rc2 에서도)
- 시험 창의 브라우저 화면이 804 너비라 도구 막대가 좁은 꼴 (640 미만) - 번역 · 작업 현황 단추가 [더 보기] 메뉴 안에 있어 툴팁으로 찾던 시험이 실패했다. 앱 쪽 문제 아님 (관리자 10/24: 시험 쪽이면 기대값 그대로, 메뉴를 열어 누름) - tapToolbar: 넓으면 그 단추, 좁으면 도구 막대 안의 [더 보기] → 같은 항목. 고른 결과는 메뉴가 닫힌 뒤 들어오므로 (번역이 도는 동안 그리기가 느림) 메뉴가 닫힐 때까지 기다림 확인: analyze 0 · translate_split 1 ×2 · web_translate 1 ×2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>modular
parent
b9b23e9122
commit
093cf3252e
|
|
@ -10,6 +10,7 @@ import 'package:jj_mkvmaker/core/languages.dart';
|
||||||
import 'package:jj_mkvmaker/core/models.dart';
|
import 'package:jj_mkvmaker/core/models.dart';
|
||||||
import 'package:jj_mkvmaker/core/output_paths.dart';
|
import 'package:jj_mkvmaker/core/output_paths.dart';
|
||||||
import 'package:jj_mkvmaker/services/platform_services.dart';
|
import 'package:jj_mkvmaker/services/platform_services.dart';
|
||||||
|
import 'package:jj_mkvmaker/ui/browser/browser_toolbar.dart';
|
||||||
import 'package:jj_mkvmaker/ui/browser_page.dart';
|
import 'package:jj_mkvmaker/ui/browser_page.dart';
|
||||||
import 'support/temp_dir.dart';
|
import 'support/temp_dir.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
@ -65,7 +66,7 @@ void main() {
|
||||||
expect(c.pendingJobs, ['MKV 만들기']);
|
expect(c.pendingJobs, ['MKV 만들기']);
|
||||||
|
|
||||||
// 화면 분할 열기 → 진행 표시
|
// 화면 분할 열기 → 진행 표시
|
||||||
await tester.tap(find.byTooltip('작업 현황 보기 · 화면 분할 (Ctrl+Shift+J)'));
|
await tapToolbar(tester, '작업 현황 보기 · 화면 분할 (Ctrl+Shift+J)', '작업 현황');
|
||||||
await tester.pump(const Duration(milliseconds: 300));
|
await tester.pump(const Duration(milliseconds: 300));
|
||||||
expect(find.text('작업 현황'), findsOneWidget);
|
expect(find.text('작업 현황'), findsOneWidget);
|
||||||
expect(find.textContaining('▶ 자막 번역'), findsOneWidget);
|
expect(find.textContaining('▶ 자막 번역'), findsOneWidget);
|
||||||
|
|
@ -103,3 +104,23 @@ void main() {
|
||||||
await server.close(force: true);
|
await server.close(force: true);
|
||||||
}, timeout: const Timeout(Duration(minutes: 15)));
|
}, timeout: const Timeout(Duration(minutes: 15)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 도구 막대 단추 누르기: 넓으면 [tip] 단추, 좁으면 (640 미만 - 시험 창 804 너비에 패널) [더 보기] 메뉴의 [item]
|
||||||
|
Future<void> tapToolbar(WidgetTester tester, String tip, String item) async {
|
||||||
|
if (find.byTooltip(tip).evaluate().isNotEmpty) {
|
||||||
|
await tester.tap(find.byTooltip(tip));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 도구 막대 안의 [더 보기] (앱 맨 위 줄에도 [더 보기] 가 있다)
|
||||||
|
await tester.tap(find.descendant(of: find.byType(BrowserToolbar), matching: find.byTooltip('더 보기')));
|
||||||
|
for (var i = 0; i < 5; i++) {
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
await tester.tap(find.text(item).last);
|
||||||
|
// 고른 결과는 메뉴가 닫힌 뒤에 들어온다 - 번역이 도는 동안은 그리기가 느려 정한 시간이 아니라 닫힐 때까지
|
||||||
|
for (var i = 0; i < 50 && find.byType(PopupMenuItem<String>).evaluate().isNotEmpty; i++) {
|
||||||
|
await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50)));
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import 'package:jj_mkvmaker/app/bookmarks_controller.dart';
|
||||||
import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.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/platform/windows/process_media_tool.dart';
|
||||||
import 'package:jj_mkvmaker/services/platform_services.dart';
|
import 'package:jj_mkvmaker/services/platform_services.dart';
|
||||||
|
import 'package:jj_mkvmaker/ui/browser/browser_toolbar.dart';
|
||||||
import 'package:jj_mkvmaker/ui/browser_page.dart';
|
import 'package:jj_mkvmaker/ui/browser_page.dart';
|
||||||
import 'support/temp_dir.dart';
|
import 'support/temp_dir.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
|
@ -100,7 +101,7 @@ void main() {
|
||||||
expect(d['js'], isNot('no script')); // 페이지 스크립트가 돌았다 (그 글도 번역됨)
|
expect(d['js'], isNot('no script')); // 페이지 스크립트가 돌았다 (그 글도 번역됨)
|
||||||
|
|
||||||
// 2. 번역 버튼 → 원문
|
// 2. 번역 버튼 → 원문
|
||||||
await tester.tap(find.byTooltip('원문 보기 (번역 끄기)'));
|
await tapToolbar(tester, '원문 보기 (번역 끄기)', '원문 보기 (번역 끄기)');
|
||||||
d = await waitFor((d) => d['h'] == 'Hello world', '원문 보기');
|
d = await waitFor((d) => d['h'] == 'Hello world', '원문 보기');
|
||||||
expect(d['h'], 'Hello world');
|
expect(d['h'], 'Hello world');
|
||||||
expect(d['p'], ' Download the video ');
|
expect(d['p'], ' Download the video ');
|
||||||
|
|
@ -129,7 +130,7 @@ void main() {
|
||||||
if (Platform.isAndroid) {
|
if (Platform.isAndroid) {
|
||||||
// 4. Android 웹뷰는 JavaScript 를 끄면 앱이 넣는 스크립트도 막는다 → 번역 · 페이지 읽기가 안 됨 (설정 설명대로)
|
// 4. Android 웹뷰는 JavaScript 를 끄면 앱이 넣는 스크립트도 막는다 → 번역 · 페이지 읽기가 안 됨 (설정 설명대로)
|
||||||
expect(await dom(), isEmpty);
|
expect(await dom(), isEmpty);
|
||||||
await tester.tap(find.byTooltip('이 페이지를 한국어(으)로 번역'));
|
await tapToolbar(tester, '이 페이지를 한국어(으)로 번역', '이 페이지 번역');
|
||||||
await tester.runAsync(() => Future<void>.delayed(const Duration(seconds: 3)));
|
await tester.runAsync(() => Future<void>.delayed(const Duration(seconds: 3)));
|
||||||
await tester.pump();
|
await tester.pump();
|
||||||
// ignore: avoid_print
|
// ignore: avoid_print
|
||||||
|
|
@ -140,7 +141,7 @@ void main() {
|
||||||
expect(d['late'], ''); // setTimeout 도 돌지 않음
|
expect(d['late'], ''); // setTimeout 도 돌지 않음
|
||||||
|
|
||||||
// 4. Edge 는 JavaScript 를 꺼도 번역 버튼으로 번역된다 (앱이 넣는 스크립트는 실행)
|
// 4. Edge 는 JavaScript 를 꺼도 번역 버튼으로 번역된다 (앱이 넣는 스크립트는 실행)
|
||||||
await tester.tap(find.byTooltip('이 페이지를 한국어(으)로 번역'));
|
await tapToolbar(tester, '이 페이지를 한국어(으)로 번역', '이 페이지 번역');
|
||||||
d = await waitFor((d) => hangul.hasMatch(d['h']!), 'JavaScript 끈 채 번역');
|
d = await waitFor((d) => hangul.hasMatch(d['h']!), 'JavaScript 끈 채 번역');
|
||||||
expect(d['h'], matches(hangul));
|
expect(d['h'], matches(hangul));
|
||||||
expect(d['js'], matches(hangul)); // "no script" 도 번역
|
expect(d['js'], matches(hangul)); // "no script" 도 번역
|
||||||
|
|
@ -159,3 +160,23 @@ void main() {
|
||||||
await server.close(force: true);
|
await server.close(force: true);
|
||||||
}, timeout: const Timeout(Duration(minutes: 3)));
|
}, timeout: const Timeout(Duration(minutes: 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 도구 막대 단추 누르기: 넓으면 [tip] 단추, 좁으면 (640 미만 - 시험 창 804 너비에 패널) [더 보기] 메뉴의 [item]
|
||||||
|
Future<void> tapToolbar(WidgetTester tester, String tip, String item) async {
|
||||||
|
if (find.byTooltip(tip).evaluate().isNotEmpty) {
|
||||||
|
await tester.tap(find.byTooltip(tip));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 도구 막대 안의 [더 보기] (앱 맨 위 줄에도 [더 보기] 가 있다)
|
||||||
|
await tester.tap(find.descendant(of: find.byType(BrowserToolbar), matching: find.byTooltip('더 보기')));
|
||||||
|
for (var i = 0; i < 5; i++) {
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
await tester.tap(find.text(item).last);
|
||||||
|
// 고른 결과는 메뉴가 닫힌 뒤에 들어온다 - 번역이 도는 동안은 그리기가 느려 정한 시간이 아니라 닫힐 때까지
|
||||||
|
for (var i = 0; i < 50 && find.byType(PopupMenuItem<String>).evaluate().isNotEmpty; i++) {
|
||||||
|
await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50)));
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
await tester.pump(const Duration(milliseconds: 100));
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue