98 lines
3.4 KiB
Dart
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());
|
|
});
|
|
}
|