Files
biz_xfj_cloud/test/common/terminal_network_status_test.dart
T

98 lines
3.4 KiB
Dart

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:forui/forui.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
/// 验证终端网络速率在无上行、异常采样和长下行文案下仍能稳定展示。
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
const runtimeChannel = MethodChannel('biz_xfj/runtime_environment');
const connectivityChannel = MethodChannel(
'dev.fluttercommunity.plus/connectivity',
);
var networkSampleCount = 0;
setUp(() {
networkSampleCount = 0;
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(runtimeChannel, (call) async {
if (call.method != 'getNetworkSnapshot') return null;
networkSampleCount++;
return <String, Object>{
'connected': true,
'type': 'wifi',
'rxBytes':
networkSampleCount == 1 ? 1024 : 3 * 1024 * 1024 * 1024 + 1024,
// 连续两次累计发送字节不变,模拟只有下行、没有上行的合法采样。
'txBytes': 2048,
};
});
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
connectivityChannel,
(call) async => call.method == 'check' ? <String>['wifi'] : null,
);
});
tearDown(() {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(runtimeChannel, null);
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(connectivityChannel, null);
});
test('零速率和异常采样统一显示为0 KB/s', () {
expect(formatTerminalNetworkSpeed(0), '0 KB/s');
expect(formatTerminalNetworkSpeed(-1), '0 KB/s');
expect(formatTerminalNetworkSpeed(double.nan), '0 KB/s');
expect(formatTerminalNetworkSpeed(double.infinity), '0 KB/s');
expect(formatTerminalNetworkSpeed(512), '512 B/s');
expect(formatTerminalNetworkSpeed(1024), '1.0 KB/s');
});
testWidgets('只有下行时保留独立上行行并明确显示0 KB/s', (tester) async {
await tester.binding.setSurfaceSize(const Size(1920, 1080));
addTearDown(() => tester.binding.setSurfaceSize(null));
final baseTheme = FThemes.zinc.light;
final largeTheme = FThemeData.inherit(
colorScheme: baseTheme.colorScheme,
typography: baseTheme.typography.scale(sizeScalar: 1.4),
style: baseTheme.style,
);
await tester.pumpWidget(
ScreenUtilInit(
designSize: const Size(1920, 1080),
builder: (_, __) => MaterialApp(
home: FTheme(
data: largeTheme,
child: const Scaffold(
body: Align(
alignment: Alignment.topRight,
child: TerminalNetworkStatus(),
),
),
),
),
),
);
await tester.pump();
await tester.pump(const Duration(seconds: 3));
await tester.pump();
final speedText = tester.widget<Text>(
find.byKey(const ValueKey('terminal-network-speed')),
);
expect(networkSampleCount, greaterThanOrEqualTo(2));
expect(speedText.data, contains('MB/s\n↑0 KB/s'));
expect(speedText.data, isNot(contains('\n↑/s')));
expect(speedText.softWrap, isFalse);
expect(tester.takeException(), isNull);
await tester.pumpWidget(const SizedBox.shrink());
});
}