52 lines
2.5 KiB
Dart
52 lines
2.5 KiB
Dart
import 'dart:io';
|
|
import 'dart:ui' as ui;
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:integration_test/integration_test.dart';
|
|
import 'package:jj_mkvmaker/ui/text_viewer.dart';
|
|
import 'package:jj_mkvmaker/ui/theme.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
import 'support/temp_dir.dart';
|
|
|
|
/// 관리자 지시 (10/19): 글 뷰어가 줄바꿈 없는 긴 줄 (영문 · 한글 섞임) 을 나눠 그릴 때 실제 Windows 글꼴에서 줄 끝이 비지 않는지 PNG 로.
|
|
/// 크기 412 · 960. 실행: flutter test integration_test\windows_textview_shot_test.dart -d windows
|
|
void main() {
|
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
final out = Platform.environment['JJ_SHOT_DIR'] ?? p.join(Directory.systemTemp.path, 'jj_shots_textview');
|
|
for (final (w, h) in [(412, 900), (960, 600)]) {
|
|
for (final (name, line) in [
|
|
('ascii', List.generate(3000, (i) => String.fromCharCode(0x61 + i % 26)).join()),
|
|
('mixed', List.generate(3000, (i) => i.isEven ? '한' : 'x').join()),
|
|
('korean', '가나다라마바사아자차카타파하' * 200),
|
|
]) {
|
|
testWidgets('글 뷰어 긴 줄 $name ${w}x$h', (t) async {
|
|
t.view.physicalSize = Size(w.toDouble(), h.toDouble());
|
|
t.view.devicePixelRatio = 1;
|
|
addTearDown(t.view.reset);
|
|
final dir = testTempDir('jj_textview_');
|
|
final f = File(p.join(dir.path, '$name.txt'))..writeAsStringSync('$line\nend');
|
|
final key = GlobalKey();
|
|
await t.pumpWidget(RepaintBoundary(
|
|
key: key,
|
|
child: MaterialApp(theme: buildTheme(), debugShowCheckedModeBanner: false, home: TextViewerPage(path: f.path)),
|
|
));
|
|
for (var i = 0; i < 40 && find.text('end').evaluate().isEmpty && find.textContaining(line.substring(0, 6)).evaluate().isEmpty; i++) {
|
|
await t.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 60)));
|
|
await t.pump();
|
|
}
|
|
await t.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 200)));
|
|
await t.pump();
|
|
final b = key.currentContext!.findRenderObject()! as RenderRepaintBoundary;
|
|
final img = await t.runAsync(() => b.toImage());
|
|
final bytes = await t.runAsync(() => img!.toByteData(format: ui.ImageByteFormat.png));
|
|
Directory(out).createSync(recursive: true);
|
|
File(p.join(out, 'textview_${name}_$w.png')).writeAsBytesSync(bytes!.buffer.asUint8List());
|
|
await t.pumpWidget(const SizedBox());
|
|
});
|
|
}
|
|
}
|
|
}
|