// Responsive sweep: every sidebar page must lay out without // RenderFlex/RenderBox overflow at the window sizes operators // actually use — a small laptop split-screen, the macOS default // window, and a full HD display. Overflow errors surface as test // failures via FlutterError.onError, so a regression in any page's // layout at any of these sizes fails this suite. // // Navigation mirrors sidebar_test.dart (fixed pumps; the app never // "settles" because of long-lived timers). import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:chain_studio/data/hub.dart'; import 'package:chain_studio/main.dart'; const _destinations = [ 'welcome', 'store', 'doctor', 'flows', 'audit', 'approvals', 'runs', 'federation', ]; const _sizes = { 'tiny (800x600)': Size(800, 600), 'small (960x600)': Size(960, 600), 'default (1280x800)': Size(1280, 800), 'large (1920x1080)': Size(1920, 1080), }; void main() { for (final entry in _sizes.entries) { testWidgets('all pages lay out without overflow — ${entry.key}', (tester) async { tester.view.physicalSize = entry.value; tester.view.devicePixelRatio = 1.0; addTearDown(tester.view.reset); await tester.pumpWidget( const StudioApp( initialThemeMode: ThemeModeValue.dark, initialLocale: Locale('de'), ), ); await tester.pump(const Duration(milliseconds: 100)); for (final id in _destinations) { await tester.tap(find.byKey(ValueKey('sidebar-item-$id'))); await tester.pump(const Duration(milliseconds: 400)); expect( tester.takeException(), isNull, reason: 'page "$id" at ${entry.key} threw during layout', ); } }); } }