Files
sdk/pkg/dartpad_worker/test/checks_ext.dart
T
Konstantin Shcheglov be4df1a869 API. Add Folder.getFile/Folder, deprecate getChildAssumingFile/Folder
This aligns names with ResourceProvider.getFile/Folder.

Change-Id: I30383ef1fa6f7cbe60b187338e25b8ca75806730
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/511120
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jonas Jensen <jonasfj@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2026-06-11 07:46:21 -07:00

66 lines
2.2 KiB
Dart

// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:analyzer/file_system/file_system.dart';
import 'package:async/async.dart';
import 'package:checks/checks.dart';
import 'package:checks/context.dart';
import 'package:dartpad_worker/src/shared.dart';
import 'package:json_rpc_2/json_rpc_2.dart' as rpc;
export 'package:checks/checks.dart';
extension ResourceChecks on Subject<Resource> {
void get exists => has((r) => r.exists, 'exists').isTrue();
void get doesNotExist => has((r) => r.exists, 'exists').isFalse();
}
extension FolderChecks on Subject<Folder> {
Subject<File> file(String path) =>
has((f) => f.getFile(path), 'file ($path)');
Subject<Folder> folder(String path) =>
has((f) => f.getFolder(path), 'folder ($path)');
}
extension FileChecks on Subject<File> {
Subject<String> get contents => has((f) => f.readAsStringSync(), 'contents');
}
extension DartPadExceptionChecks on Subject<DartPadException> {
Subject<String> get message => has((e) => e.message, 'message');
}
extension CompileResultChecks on Subject<CompileResult> {
Subject<String?> get code => has((s) => s.code, 'code');
Subject<String> get log => has((s) => s.log, 'log');
Subject<List<String>> get compiledLibraryUris =>
has((s) => s.compiledLibraryUris, 'compiledLibraryUris');
void codeContains(Pattern pattern) => code.isNotNull().contains(pattern);
/// Compilation was successful and logs are empty (indicating no warnings)
void successEmptyLog() {
log.isEmpty();
code.isNotNull();
}
}
extension RpcServerChecks on Subject<rpc.Server> {
/// Check JSON-RPC 2.0 notifications with a stream queue.
Subject<StreamQueue<Object?>> withNotificationQueue(String name) =>
context.nest(() => ['has \'$name\' notification'], (server) {
final c = StreamController<Object?>.broadcast();
server.registerMethod(
name,
(rpc.Parameters params) => c.add(params.value),
);
return Extracted.value(StreamQueue(c.stream));
});
}