import 'dart:io'; import 'dart:ui'; import 'package:flutter_test/flutter_test.dart'; import 'package:yumi/ui_kit/widgets/room/cp/room_cp_relation_formed_effect.dart'; void main() { test('reads avatar slots from the CP formed MP4 vap metadata', () { final bytes = File( 'sc_images/room/cp_invite/sc_cp_relation_formed_effect.mp4', ).readAsBytesSync(); final layout = parseRoomCpRelationFormedVapLayout(bytes); expect(layout, isNotNull); expect(layout!.canvasSize.width, 720); expect(layout.canvasSize.height, 1280); expect(layout.fps, 25); expect(layout.totalFrames, 125); expect(layout.firstDynamicFrame, 44); expect(layout.lastDynamicFrame, 95); final left = layout.leftPlacementForFrame(52); final right = layout.rightPlacementForFrame(52); expect(left?.frame.left, 230); expect(left?.frame.top, 842); expect(left?.frame.width, 121); expect(left?.frame.height, 121); expect(right?.frame.left, 365); expect(right?.frame.top, 843); expect(right?.frame.width, 121); expect(right?.frame.height, 120); }); test('scales avatar slots using the visible 720x1280 video canvas', () { final bytes = File( 'sc_images/room/cp_invite/sc_cp_relation_formed_effect.mp4', ).readAsBytesSync(); final layout = parseRoomCpRelationFormedVapLayout(bytes)!; final left = layout.leftPlacementForFrame(52)!; final contentRect = layout.contentRectForBounds(const Size(402, 874)); final scaled = layout.scaledRectForPlacement(left, const Size(402, 874)); expect(contentRect.left, moreOrLessEquals(0, epsilon: 0.01)); expect(contentRect.top, moreOrLessEquals(79.67, epsilon: 0.01)); expect(contentRect.width, moreOrLessEquals(402, epsilon: 0.01)); expect(contentRect.height, moreOrLessEquals(714.67, epsilon: 0.01)); expect(scaled.left, moreOrLessEquals(128.42, epsilon: 0.01)); expect(scaled.top, moreOrLessEquals(549.78, epsilon: 0.01)); expect(scaled.width, moreOrLessEquals(67.56, epsilon: 0.01)); expect(scaled.height, moreOrLessEquals(67.56, epsilon: 0.01)); }); }