be4df1a869
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>
66 lines
2.2 KiB
Dart
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));
|
|
});
|
|
}
|