mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-11-04 00:33:12 +00:00
* test: remove tests that do not pin user-visible behavior Apply the AGENTS.md test rules to the existing Rust and Flutter suites. A test is kept when it is the only coverage of user- or API-visible behavior, the regression test of a reported or fixed bug, a security boundary (one test per rejection class), or a check against an external reference. Tests that assert private state or the order of internal steps, pin review-round corner cases, or repeat what a kept test already covers are removed. Rust: 679 -> 298 tests. Dart: 118 -> 45 tests. Test-only helpers left without callers go with them (applyLastOnlineStateForTesting, terminalKeyboardRowWidth, debugBufferedInputCount, tokio's test-util dev feature), and cfg gates and visibility that existed only for the deleted tests are narrowed. Runtime behavior is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WS1HTjp6UQuG43KEcQPq1R * test: keep tests that pin security and user-visible behavior Restore six tests that review showed are the only coverage of their behavior: - update metadata rejects an artifact file name with path components; - ICE candidates from another session are dropped; - KCP delivers every multi-segment frame queued before a close; - set_files rejects an empty name in a multi-file transfer; - a lopsided elongated cursor keeps its centre hotspot (#16242); - toggling Show hidden during a pending same-path read issues a new read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WS1HTjp6UQuG43KEcQPq1R * test: keep offline update and key-exchange downgrade rejections Restore three tests that are the only coverage of their rejection class: - offline update metadata rejects a signed artifact with an http or credential-bearing URL; - offline verification rejects a renamed local file and a version that does not match the release; - a key-exchange pick lowered in transit leaves both sides unable to decrypt, so a v0 fallback after a failed v1 decrypt cannot pass unnoticed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WS1HTjp6UQuG43KEcQPq1R * test: keep the decomposed-grapheme and reconnect-cancel tests Each catches a plausible wrong change that passes every kept test: mapping the first scalar under a locked Ctrl turns é into \x05, and a reconnect that does not fail pending reads leaves them hanging until the 30 s timeout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WS1HTjp6UQuG43KEcQPq1R --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
68 lines
1.7 KiB
Dart
68 lines
1.7 KiB
Dart
import 'package:flutter_hbb/common/widgets/autocomplete.dart';
|
|
import 'package:flutter_hbb/models/peer_model.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
Peer _peer({
|
|
required String id,
|
|
String alias = '',
|
|
String username = '',
|
|
String hostname = '',
|
|
bool online = false,
|
|
}) {
|
|
final peer = Peer(
|
|
id: id,
|
|
username: username,
|
|
hostname: hostname,
|
|
alias: alias,
|
|
platform: '',
|
|
tags: [],
|
|
hash: '',
|
|
password: '',
|
|
forceAlwaysRelay: false,
|
|
rdpPort: '',
|
|
rdpUsername: '',
|
|
loginName: '',
|
|
device_group_name: '',
|
|
note: '',
|
|
);
|
|
peer.online = online;
|
|
return peer;
|
|
}
|
|
|
|
void main() {
|
|
test('merged autocomplete peers keep address book metadata and online state',
|
|
() {
|
|
final peers = mergeAutocompletePeers(
|
|
addressBookPeers: [
|
|
_peer(id: '123456789', alias: 'Office PC', username: 'ab-user'),
|
|
],
|
|
lanPeers: [
|
|
_peer(id: '123456789', username: 'lan-user', online: true),
|
|
],
|
|
);
|
|
|
|
expect(peers, hasLength(1));
|
|
expect(peers.single.id, '123456789');
|
|
expect(peers.single.alias, 'Office PC');
|
|
expect(peers.single.username, 'ab-user');
|
|
expect(peers.single.online, isTrue);
|
|
});
|
|
|
|
test('online callback updates currently displayed options', () async {
|
|
final loader = AllPeersLoader(
|
|
queryOnlines: (ids) async {},
|
|
queryOnlineDebounce: Duration(milliseconds: 1),
|
|
);
|
|
final displayedOptions = [_peer(id: '123456789')];
|
|
|
|
loader.queryOnlines(displayedOptions);
|
|
loader.updateOnlineStateForTesting({
|
|
'onlines': '123456789',
|
|
'offlines': '',
|
|
});
|
|
|
|
expect(displayedOptions.single.online, isTrue);
|
|
await Future.delayed(Duration(milliseconds: 2));
|
|
});
|
|
}
|