102 lines
5.0 KiB
Dart
102 lines
5.0 KiB
Dart
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/app/bookmarks_controller.dart';
|
|
import 'package:jj_mkvmaker/app/settings.dart';
|
|
import 'package:jj_mkvmaker/platform/windows/cef_runtime.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_info.dart';
|
|
import 'package:jj_mkvmaker/services/platform_services.dart';
|
|
import 'package:jj_mkvmaker/ui/app_actions.dart';
|
|
import 'package:jj_mkvmaker/ui/browser_page.dart';
|
|
import 'package:jj_mkvmaker/ui/browser/cef_view.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
/// 207: 내장 Chrome 엔진 (CEF) 은 관리자 권한이면 스스로 끝난다 (종료 코드 38). 관리자 판단: 처음 값은 시작하지 않고 이유와 고를 것을 보인다.
|
|
/// 사용자가 "그래도 쓰기" 를 고르면 설정이 켜진다. 시작하지 못하면 빙글이만 돌게 두지 않는다
|
|
void main() {
|
|
late Directory dir;
|
|
late AppController c;
|
|
late BookmarksController bm;
|
|
|
|
/// 관리자 권한 여부는 조립 (PlatformInfo) 으로 넘긴다
|
|
AppController controller({required bool elevated}) => AppController(PlatformServices(
|
|
mediaTool: ProcessMediaTool('x', 'y'),
|
|
storage: DesktopStorageService(),
|
|
platform: PlatformInfo(isAndroid: false, isWindows: true, elevated: elevated)));
|
|
setUp(() {
|
|
dir = Directory.systemTemp.createTempSync('jj_cef_elev_');
|
|
c = controller(elevated: false);
|
|
c.settings
|
|
..browser.engine = 'chrome'
|
|
..webViewDataDir = p.join(dir.path, 'webview');
|
|
bm = BookmarksController(p.join(dir.path, 'bookmarks.json'));
|
|
CefRuntime.readyThisRun = true;
|
|
});
|
|
tearDown(() {
|
|
CefRuntime.readyThisRun = false;
|
|
dir.deleteSync(recursive: true);
|
|
});
|
|
|
|
Future<void> open(WidgetTester t) async {
|
|
t.view.physicalSize = const Size(1400, 900);
|
|
t.view.devicePixelRatio = 1;
|
|
addTearDown(t.view.reset);
|
|
await t.pumpWidget(MaterialApp(
|
|
builder: (context, child) => AppScope(controller: c, bookmarks: bm, child: child!),
|
|
home: BrowserPage(c: c, bookmarks: bm, initialUrl: 'https://example.com/'),
|
|
));
|
|
await t.pump();
|
|
}
|
|
|
|
testWidgets('관리자 권한: Chrome 엔진을 시작하지 않고 이유 · [Edge 엔진으로 바꾸기]', (t) async {
|
|
c = controller(elevated: true)..settings = c.settings;
|
|
await open(t);
|
|
expect(find.text('관리자 권한으로 실행 중이라 Chrome 엔진을 쓸 수 없습니다 (보안)'), findsOneWidget);
|
|
await t.tap(find.text('Edge 엔진으로 바꾸기'));
|
|
await t.pump();
|
|
expect(c.settings.browser.engine, 'edge');
|
|
await t.pumpWidget(const SizedBox());
|
|
});
|
|
|
|
testWidgets('관리자 권한: [그래도 Chrome 엔진 쓰기…] 는 경고를 보이고, 취소하면 그대로 · 고르면 설정이 켜짐', (t) async {
|
|
c = controller(elevated: true)..settings = c.settings;
|
|
await open(t);
|
|
await t.tap(find.text('그래도 Chrome 엔진 쓰기…'));
|
|
await t.pumpAndSettle();
|
|
expect(find.textContaining('샌드박스 (웹 페이지를 가두는 보호) 가 꺼져'), findsOneWidget);
|
|
await t.tap(find.text('취소'));
|
|
await t.pumpAndSettle();
|
|
expect(c.settings.browser.cefWhenElevated, isFalse);
|
|
await t.tap(find.text('그래도 Chrome 엔진 쓰기…'));
|
|
await t.pumpAndSettle();
|
|
await t.tap(find.text('그래도 쓰기'));
|
|
await t.pumpAndSettle();
|
|
expect(c.settings.browser.cefWhenElevated, isTrue);
|
|
expect(find.text('관리자 권한으로 실행 중이라 Chrome 엔진을 쓸 수 없습니다 (보안)'), findsNothing);
|
|
await t.pumpWidget(const SizedBox());
|
|
});
|
|
|
|
testWidgets('시작하지 못하면 빙글이만 돌지 않고 "Chrome 엔진을 시작하지 못했습니다" · [Edge 엔진으로 바꾸기] · [다시 시도]', (t) async {
|
|
await open(t);
|
|
// 시험에는 Chrome 엔진 (플러그인) 이 없어 끝나지 않거나 실패한다 - 정한 시간 (20초) 이 지나면 안내 (가짜 시간을 넘김)
|
|
expect(find.text('Chrome 엔진을 시작하지 못했습니다'), findsNothing);
|
|
await t.pump(CefView.startTimeout + const Duration(seconds: 1));
|
|
expect(find.text('Chrome 엔진을 시작하지 못했습니다'), findsOneWidget);
|
|
expect(find.text('다시 시도'), findsOneWidget);
|
|
await t.tap(find.text('Edge 엔진으로 바꾸기'));
|
|
await t.pump();
|
|
expect(c.settings.browser.engine, 'edge');
|
|
await t.pumpWidget(const SizedBox());
|
|
});
|
|
|
|
test('설정: 관리자 권한일 때 Chrome 엔진 쓰기는 처음 꺼짐 · 저장 · 틀린 값은 꺼짐', () {
|
|
expect(AppSettings().browser.cefWhenElevated, isFalse);
|
|
expect(AppSettings.fromJson((AppSettings()..browser.cefWhenElevated = true).toJson()).browser.cefWhenElevated, isTrue);
|
|
expect(AppSettings.fromJson({'cefWhenElevated': 'yes'}).browser.cefWhenElevated, isFalse);
|
|
});
|
|
}
|