fix pedantic lints (#37)
diff --git a/example/http_server.dart b/example/http_server.dart
index 0072d52..115c49d 100644
--- a/example/http_server.dart
+++ b/example/http_server.dart
@@ -4,17 +4,17 @@
library isolate.example.http_server;
-import "dart:async";
-import "dart:io";
-import "dart:isolate";
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate';
-import "package:isolate/isolate_runner.dart";
-import "package:isolate/ports.dart";
-import "package:isolate/runner.dart";
+import 'package:isolate/isolate_runner.dart';
+import 'package:isolate/ports.dart';
+import 'package:isolate/runner.dart';
Future<Future<Object> Function()> runHttpServer(
Runner runner, int port, HttpListener listener) async {
- SendPort stopPort = await runner.run(_startHttpServer, [port, listener]);
+ var stopPort = await runner.run(_startHttpServer, [port, listener]);
return () => _sendStop(stopPort);
}
@@ -57,31 +57,33 @@
EchoHttpListener(this._counter);
+ @override
Future start(HttpServer server) async {
- print("Starting isolate $_id");
+ print('Starting isolate $_id');
_subscription = server.listen((HttpRequest request) async {
await request.response.addStream(request);
- print("Request to $hashCode");
- request.response.write("#$_id\n");
+ print('Request to $hashCode');
+ request.response.write('#$_id\n');
var watch = Stopwatch()..start();
while (watch.elapsed < _delay) {
await Future.delayed(const Duration(milliseconds: 100));
}
- print("Response from $_id");
+ print('Response from $_id');
await request.response.close();
_counter.send(null);
});
}
+ @override
Future stop() async {
- print("Stopping isolate $_id");
+ print('Stopping isolate $_id');
await _subscription.cancel();
_subscription = null;
}
}
-main(List<String> args) async {
- int port = 0;
+void main(List<String> args) async {
+ var port = 0;
if (args.isNotEmpty) {
port = int.parse(args[0]);
}
@@ -91,7 +93,7 @@
// Used to ensure the requested port is available or to find an available
// port if `0` is provided.
- ServerSocket socket =
+ var socket =
await ServerSocket.bind(InternetAddress.anyIPv6, port, shared: true);
port = socket.port;
@@ -100,30 +102,29 @@
isolate.close();
});
- List<Future<Object> Function()> stoppers =
- await Future.wait(isolates.map((IsolateRunner isolate) {
+ var stoppers = await Future.wait(isolates.map((IsolateRunner isolate) {
return runHttpServer(isolate, socket.port, listener);
}), cleanUp: (shutdownServer) {
shutdownServer();
});
await socket.close();
- int count = 25;
+ var count = 25;
- print("Server listening on port $port for $count requests");
- print("Test with:");
- print(" ab -l -c10 -n $count http://localhost:$port/");
+ print('Server listening on port $port for $count requests');
+ print('Test with:');
+ print(' ab -l -c10 -n $count http://localhost:$port/');
print("where 'ab' is ApacheBench from, e.g., apache2_tools.");
await for (var _ in counter) {
count--;
if (count == 0) {
- print("Shutting down");
+ print('Shutting down');
for (var stopper in stoppers) {
await stopper();
}
counter.close();
}
}
- print("Finished");
+ print('Finished');
}
diff --git a/example/runner_pool.dart b/example/runner_pool.dart
index 3439f05..a201239 100644
--- a/example/runner_pool.dart
+++ b/example/runner_pool.dart
@@ -4,26 +4,26 @@
library isolate.example.runner_pool;
-import "dart:async" show Future;
+import 'dart:async' show Future;
-import "package:isolate/load_balancer.dart";
-import "package:isolate/isolate_runner.dart";
+import 'package:isolate/load_balancer.dart';
+import 'package:isolate/isolate_runner.dart';
void main() {
- int N = 44;
+ var N = 44;
var sw = Stopwatch()..start();
// Compute fib up to 42 with 4 isolates.
parfib(N, 4).then((v1) {
var t1 = sw.elapsedMilliseconds;
sw.stop();
sw.reset();
- print("fib#4($N) = ${v1[N]}, ms: $t1");
+ print('fib#4($N) = ${v1[N]}, ms: $t1');
sw.start();
// Then compute fib up to 42 with 2 isolates.
parfib(N, 2).then((v2) {
var t2 = sw.elapsedMilliseconds;
sw.stop();
- print("fib#2($N) = ${v2[N]}, ms: $t2");
+ print('fib#2($N) = ${v2[N]}, ms: $t2');
});
});
}
@@ -35,7 +35,7 @@
var fibs = List<Future<int>>(limit + 1);
// Schedule all calls with exact load value and the heaviest task
// assigned first.
- schedule(a, b, i) {
+ void schedule(a, b, i) {
if (i < limit) {
schedule(a + b, a, i + 1);
}
diff --git a/lib/isolate.dart b/lib/isolate.dart
index eeb6e7e..268a232 100644
--- a/lib/isolate.dart
+++ b/lib/isolate.dart
@@ -5,8 +5,8 @@
/// Utilities for working with isolates and isolate communication.
library isolate;
-export "isolate_runner.dart";
-export "load_balancer.dart";
-export "ports.dart";
-export "registry.dart";
-export "runner.dart";
+export 'isolate_runner.dart';
+export 'load_balancer.dart';
+export 'ports.dart';
+export 'registry.dart';
+export 'runner.dart';
diff --git a/lib/isolate_runner.dart b/lib/isolate_runner.dart
index 1317fd4..81aa1bb 100644
--- a/lib/isolate_runner.dart
+++ b/lib/isolate_runner.dart
@@ -4,12 +4,12 @@
library isolate.isolate_runner;
-import "dart:async";
-import "dart:isolate";
+import 'dart:async';
+import 'dart:isolate';
-import "ports.dart";
-import "runner.dart";
-import "src/util.dart";
+import 'ports.dart';
+import 'runner.dart';
+import 'src/util.dart';
// Command tags. Shared between IsolateRunner and IsolateRunnerRemote.
const int _shutdown = 0;
@@ -76,6 +76,7 @@
/// Can be used to create an isolate, use [run] to start a service, and
/// then drop the connection and let the service control the isolate's
/// life cycle.
+ @override
Future<void> close() {
var channel = SingleResponseChannel();
_commandPort.send(list2(_shutdown, channel.port));
@@ -100,7 +101,7 @@
/// .timeout(new Duration(...), onTimeout: () => print("No response"));
/// ```
Future<void> kill({Duration timeout = const Duration(seconds: 1)}) {
- Future<void> onExit = singleResponseFuture(isolate.addOnExitListener);
+ var onExit = singleResponseFuture(isolate.addOnExitListener);
if (Duration.zero == timeout) {
isolate.kill(priority: Isolate.immediate);
return onExit;
@@ -150,7 +151,7 @@
/// has no further effect. Only a single call to [resume] is needed
/// to resume the isolate.
void pause([Capability resumeCapability]) {
- if (resumeCapability == null) resumeCapability = isolate.pauseCapability;
+ resumeCapability ??= isolate.pauseCapability;
isolate.pause(resumeCapability);
}
@@ -162,7 +163,7 @@
/// Even if `pause` has been called more than once with the same
/// `resumeCapability`, a single resume call with stop the pause.
void resume([Capability resumeCapability]) {
- if (resumeCapability == null) resumeCapability = isolate.pauseCapability;
+ resumeCapability ??= isolate.pauseCapability;
isolate.resume(resumeCapability);
}
@@ -186,8 +187,9 @@
/// await iso.close();
/// }
/// ```
- Future<R> run<R, P>(FutureOr<R> function(P argument), P argument,
- {Duration timeout, onTimeout()}) {
+ @override
+ Future<R> run<R, P>(FutureOr<R> Function(P argument) function, P argument,
+ {Duration timeout, Function() onTimeout}) {
return singleResultFuture<R>((SendPort port) {
_commandPort.send(list4(_run, function, argument, port));
}, timeout: timeout, onTimeout: onTimeout);
diff --git a/lib/load_balancer.dart b/lib/load_balancer.dart
index dcfa10c..30c3791 100644
--- a/lib/load_balancer.dart
+++ b/lib/load_balancer.dart
@@ -5,11 +5,11 @@
/// A load-balancing runner pool.
library isolate.load_balancer;
-import "dart:async" show Future, FutureOr;
+import 'dart:async' show Future, FutureOr;
-import "runner.dart";
-import "src/errors.dart";
-import "src/util.dart";
+import 'runner.dart';
+import 'src/errors.dart';
+import 'src/util.dart';
/// A pool of runners, ordered by load.
///
@@ -32,7 +32,7 @@
LoadBalancer._(List<_LoadBalancerEntry> entries)
: _queue = entries,
_length = entries.length {
- for (int i = 0; i < _length; i++) {
+ for (var i = 0; i < _length; i++) {
_queue[i].queueIndex = i;
}
}
@@ -47,7 +47,8 @@
/// ```dart
/// var isolatePool = LoadBalancer.create(10, IsolateRunner.spawn);
/// ```
- static Future<LoadBalancer> create(int size, Future<Runner> createRunner()) {
+ static Future<LoadBalancer> create(
+ int size, Future<Runner> Function() createRunner) {
return Future.wait(Iterable.generate(size, (_) => createRunner()),
cleanUp: (Runner runner) {
runner.close();
@@ -71,10 +72,11 @@
/// the runner running the function, which will handle a timeout
/// as normal. If the runners are running in other isolates, then
/// the [onTimeout] function must be a constant function.
- Future<R> run<R, P>(FutureOr<R> function(P argument), argument,
- {Duration timeout, FutureOr<R> onTimeout(), int load = 100}) {
- RangeError.checkNotNegative(load, "load");
- _LoadBalancerEntry entry = _first;
+ @override
+ Future<R> run<R, P>(FutureOr<R> Function(P argument) function, argument,
+ {Duration timeout, FutureOr<R> Function() onTimeout, int load = 100}) {
+ RangeError.checkNotNegative(load, 'load');
+ var entry = _first;
_increaseLoad(entry, load);
return entry.run(this, load, function, argument, timeout, onTimeout);
}
@@ -94,10 +96,10 @@
/// the runners running the function, which will handle any timeouts
/// as normal.
List<Future<R>> runMultiple<R, P>(
- int count, FutureOr<R> function(P argument), P argument,
- {Duration timeout, FutureOr<R> onTimeout(), int load = 100}) {
- RangeError.checkValueInInterval(count, 1, _length, "count");
- RangeError.checkNotNegative(load, "load");
+ int count, FutureOr<R> Function(P argument) function, P argument,
+ {Duration timeout, FutureOr<R> Function() onTimeout, int load = 100}) {
+ RangeError.checkValueInInterval(count, 1, _length, 'count');
+ RangeError.checkNotNegative(load, 'load');
if (count == 1) {
return List<Future<R>>(1)
..[0] = run(function, argument,
@@ -106,8 +108,8 @@
var result = List<Future<R>>(count);
if (count == _length) {
// No need to change the order of entries in the queue.
- for (int i = 0; i < count; i++) {
- _LoadBalancerEntry entry = _queue[i];
+ for (var i = 0; i < count; i++) {
+ var entry = _queue[i];
entry.load += load;
result[i] =
entry.run(this, load, function, argument, timeout, onTimeout);
@@ -120,11 +122,11 @@
// We can't assume that the first [count] entries in the
// heap list are the least loaded.
var entries = List<_LoadBalancerEntry>(count);
- for (int i = 0; i < count; i++) {
+ for (var i = 0; i < count; i++) {
entries[i] = _removeFirst();
}
- for (int i = 0; i < count; i++) {
- _LoadBalancerEntry entry = entries[i];
+ for (var i = 0; i < count; i++) {
+ var entry = entries[i];
entry.load += load;
_add(entry);
result[i] =
@@ -134,13 +136,14 @@
return result;
}
+ @override
Future<void> close() {
if (_stopFuture != null) return _stopFuture;
_stopFuture =
MultiError.waitUnordered(_queue.take(_length).map((e) => e.close()))
.then(ignore);
// Remove all entries.
- for (int i = 0; i < _length; i++) {
+ for (var i = 0; i < _length; i++) {
_queue[i].queueIndex = -1;
}
_queue = null;
@@ -155,8 +158,8 @@
/// parent, swap it with the parent.
void _bubbleUp(_LoadBalancerEntry element, int index) {
while (index > 0) {
- int parentIndex = (index - 1) ~/ 2;
- _LoadBalancerEntry parent = _queue[parentIndex];
+ var parentIndex = (index - 1) ~/ 2;
+ var parent = _queue[parentIndex];
if (element.compareTo(parent) > 0) break;
_queue[index] = parent;
parent.queueIndex = index;
@@ -173,12 +176,12 @@
/// swap it with the highest priority child.
void _bubbleDown(_LoadBalancerEntry element, int index) {
while (true) {
- int childIndex = index * 2 + 1; // Left child index.
+ var childIndex = index * 2 + 1; // Left child index.
if (childIndex >= _length) break;
- _LoadBalancerEntry child = _queue[childIndex];
- int rightChildIndex = childIndex + 1;
+ var child = _queue[childIndex];
+ var rightChildIndex = childIndex + 1;
if (rightChildIndex < _length) {
- _LoadBalancerEntry rightChild = _queue[rightChildIndex];
+ var rightChild = _queue[rightChildIndex];
if (rightChild.compareTo(child) < 0) {
childIndex = rightChildIndex;
child = rightChild;
@@ -198,11 +201,11 @@
/// The entry is expected to be either added back to the queue
/// immediately or have its stop method called.
void _remove(_LoadBalancerEntry entry) {
- int index = entry.queueIndex;
+ var index = entry.queueIndex;
if (index < 0) return;
entry.queueIndex = -1;
_length--;
- _LoadBalancerEntry replacement = _queue[_length];
+ var replacement = _queue[_length];
_queue[_length] = null;
if (index < _length) {
if (entry.compareTo(replacement) < 0) {
@@ -215,12 +218,12 @@
/// Adds entry to the queue.
void _add(_LoadBalancerEntry entry) {
- if (_stopFuture != null) throw StateError("LoadBalancer is stopped");
+ if (_stopFuture != null) throw StateError('LoadBalancer is stopped');
assert(entry.queueIndex < 0);
if (_queue.length == _length) {
_grow();
}
- int index = _length;
+ var index = _length;
_length = index + 1;
_bubbleUp(entry, index);
}
@@ -242,7 +245,7 @@
}
void _grow() {
- List newQueue = List(_length * 2);
+ var newQueue = List(_length * 2);
newQueue.setRange(0, _length, _queue);
_queue = newQueue;
}
@@ -253,7 +256,7 @@
}
_LoadBalancerEntry _removeFirst() {
- _LoadBalancerEntry result = _first;
+ var result = _first;
_remove(result);
return result;
}
@@ -277,10 +280,10 @@
Future<R> run<R, P>(
LoadBalancer balancer,
int load,
- FutureOr<R> function(P argument),
+ FutureOr<R> Function(P argument) function,
argument,
Duration timeout,
- FutureOr<R> onTimeout()) {
+ FutureOr<R> Function() onTimeout) {
return runner
.run<R, P>(function, argument, timeout: timeout, onTimeout: onTimeout)
.whenComplete(() {
@@ -290,5 +293,6 @@
Future close() => runner.close();
+ @override
int compareTo(_LoadBalancerEntry other) => load - other.load;
}
diff --git a/lib/ports.dart b/lib/ports.dart
index 3fcdcb3..478e984 100644
--- a/lib/ports.dart
+++ b/lib/ports.dart
@@ -19,10 +19,10 @@
/// does something with it, or puts it into a [Future] or [Completer].
library isolate.ports;
-import "dart:async";
-import "dart:isolate";
+import 'dart:async';
+import 'dart:isolate';
-import "src/util.dart";
+import 'src/util.dart';
/// Create a [SendPort] that accepts only one message.
///
@@ -46,10 +46,10 @@
/// ..first.timeout(duration, () => timeoutValue).then(callback))
/// .sendPort
/// ```
-SendPort singleCallbackPort<P>(void callback(P response),
+SendPort singleCallbackPort<P>(void Function(P response) callback,
{Duration timeout, P timeoutValue}) {
- RawReceivePort responsePort = RawReceivePort();
- Zone zone = Zone.current;
+ var responsePort = RawReceivePort();
+ var zone = Zone.current;
callback = zone.registerUnaryCallback(callback);
Timer timer;
responsePort.handler = (response) {
@@ -93,15 +93,15 @@
///
/// Returns the `SendPort` expecting the single message.
SendPort singleCompletePort<R, P>(Completer<R> completer,
- {FutureOr<R> callback(P message),
+ {FutureOr<R> Function(P message) callback,
Duration timeout,
- FutureOr<R> onTimeout()}) {
+ FutureOr<R> Function() onTimeout}) {
if (callback == null && timeout == null) {
return singleCallbackPort<Object>((response) {
_castComplete<R>(completer, response);
});
}
- RawReceivePort responsePort = RawReceivePort();
+ var responsePort = RawReceivePort();
Timer timer;
if (callback == null) {
responsePort.handler = (response) {
@@ -110,7 +110,7 @@
_castComplete<R>(completer, response);
};
} else {
- Zone zone = Zone.current;
+ var zone = Zone.current;
var action = zone.registerUnaryCallback((response) {
try {
// Also catch it if callback throws.
@@ -132,7 +132,7 @@
completer.complete(Future.sync(onTimeout));
} else {
completer
- .completeError(TimeoutException("Future not completed", timeout));
+ .completeError(TimeoutException('Future not completed', timeout));
}
});
}
@@ -159,12 +159,12 @@
/// If you want a timeout on the returned future, it's recommended to
/// use the [timeout] parameter, and not [Future.timeout] on the result.
/// The `Future` method won't be able to close the underlying [ReceivePort].
-Future<R> singleResponseFuture<R>(void action(SendPort responsePort),
+Future<R> singleResponseFuture<R>(void Function(SendPort responsePort) action,
{Duration timeout, R timeoutValue}) {
- Completer<R> completer = Completer<R>.sync();
- RawReceivePort responsePort = RawReceivePort();
+ var completer = Completer<R>.sync();
+ var responsePort = RawReceivePort();
Timer timer;
- Zone zone = Zone.current;
+ var zone = Zone.current;
responsePort.handler = (Object response) {
responsePort.close();
timer?.cancel();
@@ -200,7 +200,7 @@
future.then((value) {
resultPort.send(list1(value));
}, onError: (error, stack) {
- resultPort.send(list2("$error", "$stack"));
+ resultPort.send(list2('$error', '$stack'));
});
}
@@ -222,10 +222,10 @@
/// instead.
/// If `onTimeout` is omitted, it defaults to throwing
/// a [TimeoutException].
-Future<R> singleResultFuture<R>(void action(SendPort responsePort),
- {Duration timeout, FutureOr<R> onTimeout()}) {
+Future<R> singleResultFuture<R>(void Function(SendPort responsePort) action,
+ {Duration timeout, FutureOr<R> Function() onTimeout}) {
var completer = Completer<R>.sync();
- SendPort port = singleCompletePort<R, List<Object>>(completer,
+ var port = singleCompletePort<R, List<Object>>(completer,
callback: receiveFutureResult, timeout: timeout, onTimeout: onTimeout);
try {
action(port);
@@ -289,10 +289,10 @@
/// If `onTimeout` is not provided either,
/// the future is completed with `timeoutValue`, which defaults to `null`.
SingleResponseChannel(
- {FutureOr<R> callback(Null value),
+ {FutureOr<R> Function(Null value) callback,
Duration timeout,
bool throwOnTimeout = false,
- FutureOr<R> onTimeout(),
+ FutureOr<R> Function() onTimeout,
R timeoutValue})
: _receivePort = RawReceivePort(),
_completer = Completer<R>.sync(),
@@ -306,7 +306,7 @@
if (!_completer.isCompleted) {
if (throwOnTimeout) {
_completer.completeError(
- TimeoutException("Timeout waiting for response", timeout));
+ TimeoutException('Timeout waiting for response', timeout));
} else if (onTimeout != null) {
_completer.complete(Future.sync(onTimeout));
} else {
diff --git a/lib/registry.dart b/lib/registry.dart
index 9fbfbc2..621fb1b 100644
--- a/lib/registry.dart
+++ b/lib/registry.dart
@@ -5,13 +5,13 @@
/// An isolate-compatible object registry and lookup service.
library isolate.registry;
-import "dart:async" show Future, Completer, TimeoutException;
-import "dart:collection" show HashMap, HashSet;
-import "dart:isolate" show RawReceivePort, SendPort, Capability;
+import 'dart:async' show Future, Completer, TimeoutException;
+import 'dart:collection' show HashMap, HashSet;
+import 'dart:isolate' show RawReceivePort, SendPort, Capability;
-import "isolate_runner.dart"; // For documentation.
-import "ports.dart";
-import "src/util.dart";
+import 'isolate_runner.dart'; // For documentation.
+import 'ports.dart';
+import 'src/util.dart';
// Command tags.
const int _addValue = 0;
@@ -133,9 +133,9 @@
///
/// Throws if [element] is not an element in the registry.
int _getId(T element) {
- int id = _cache.id(element);
+ var id = _cache.id(element);
if (id == null) {
- throw StateError("Not an element: ${Error.safeToString(element)}");
+ throw StateError('Not an element: ${Error.safeToString(element)}');
}
return id;
}
@@ -154,15 +154,15 @@
/// it preserves equality when sent through a [SendPort].
/// This makes [Capability] objects a good choice for tags.
Future<Capability> add(T element, {Iterable tags}) {
- _RegistryCache cache = _cache;
+ var cache = _cache;
if (cache.contains(element)) {
return Future<Capability>.sync(() {
throw StateError(
- "Object already in registry: ${Error.safeToString(element)}");
+ 'Object already in registry: ${Error.safeToString(element)}');
});
}
var completer = Completer<Capability>();
- SendPort port = singleCompletePort(completer,
+ var port = singleCompletePort(completer,
callback: (List response) {
assert(cache.isAdding(element));
int id = response[0];
@@ -173,7 +173,7 @@
timeout: _timeout,
onTimeout: () {
cache.stopAdding(element);
- throw TimeoutException("Future not completed", _timeout);
+ throw TimeoutException('Future not completed', _timeout);
});
if (tags != null) tags = tags.toList(growable: false);
cache.setAdding(element);
@@ -190,12 +190,12 @@
/// when the object was added. If the capability is wrong, the
/// object is not removed, and this function returns false.
Future<bool> remove(T element, Capability removeCapability) {
- int id = _cache.id(element);
+ var id = _cache.id(element);
if (id == null) {
return Future<bool>.value(false);
}
var completer = Completer<bool>();
- SendPort port = singleCompletePort(completer, callback: (bool result) {
+ var port = singleCompletePort(completer, callback: (bool result) {
_cache.remove(id);
return result;
}, timeout: _timeout);
@@ -228,7 +228,7 @@
List ids = elements.map(_getId).toList(growable: false);
tags = tags.toList(growable: false);
var completer = Completer<void>();
- SendPort port = singleCompletePort(completer, timeout: _timeout);
+ var port = singleCompletePort(completer, timeout: _timeout);
_commandPort.send(list4(_removeTagsValue, ids, tags, port));
return completer.future;
}
@@ -236,7 +236,7 @@
Future<void> _addTags(List<int> ids, Iterable tags) {
tags = tags.toList(growable: false);
var completer = Completer<void>();
- SendPort port = singleCompletePort(completer, timeout: _timeout);
+ var port = singleCompletePort(completer, timeout: _timeout);
_commandPort.send(list4(_addTagsValue, ids, tags, port));
return completer.future;
}
@@ -252,16 +252,16 @@
/// Otherwise all matching elements are returned.
Future<List<T>> lookup({Iterable<Object> tags, int max}) {
if (max != null && max < 1) {
- throw RangeError.range(max, 1, null, "max");
+ throw RangeError.range(max, 1, null, 'max');
}
if (tags != null) tags = tags.toList(growable: false);
var completer = Completer<List<T>>();
- SendPort port = singleCompletePort(completer, callback: (List response) {
+ var port = singleCompletePort(completer, callback: (List response) {
// Response is even-length list of (id, element) pairs.
- _RegistryCache cache = _cache;
- int count = response.length ~/ 2;
- List<T> result = List(count);
- for (int i = 0; i < count; i++) {
+ var cache = _cache;
+ var count = response.length ~/ 2;
+ var result = List<T>(count);
+ for (var i = 0; i < count; i++) {
var id = response[i * 2] as int;
var element = response[i * 2 + 1] as T;
element = cache.register(id, element);
@@ -286,7 +286,7 @@
final Map<Object, int> object2id = HashMap.identity();
int id(Object object) {
- int result = object2id[object];
+ var result = object2id[object];
if (result == _beingAdded) return null;
return result;
}
@@ -385,12 +385,12 @@
_find(command[1] as List, command[2] as int, command[3] as SendPort);
return;
default:
- throw UnsupportedError("Unknown command: ${command[0]}");
+ throw UnsupportedError('Unknown command: ${command[0]}');
}
}
void _add(Object object, List tags, SendPort replyPort) {
- int id = ++_nextId;
+ var id = ++_nextId;
var entry = _RegistryEntry(id, object);
_entries[id] = entry;
if (tags != null) {
@@ -403,7 +403,7 @@
}
void _remove(int id, Capability removeCapability, SendPort replyPort) {
- _RegistryEntry entry = _entries[id];
+ var entry = _entries[id];
if (entry == null || entry.removeCapability != removeCapability) {
replyPort.send(false);
return;
@@ -418,8 +418,8 @@
void _addTags(List<int> ids, List tags, SendPort replyPort) {
assert(tags != null);
assert(tags.isNotEmpty);
- for (int id in ids) {
- _RegistryEntry entry = _entries[id];
+ for (var id in ids) {
+ var entry = _entries[id];
if (entry == null) continue; // Entry was removed.
entry.tags.addAll(tags);
for (var tag in tags) {
@@ -433,8 +433,8 @@
void _removeTags(List<int> ids, List tags, SendPort replyPort) {
assert(tags != null);
assert(tags.isNotEmpty);
- for (int id in ids) {
- _RegistryEntry entry = _entries[id];
+ for (var id in ids) {
+ var entry = _entries[id];
if (entry == null) continue; // Object was removed.
entry.tags.removeAll(tags);
}
@@ -447,7 +447,7 @@
}
void _getTags(int id, SendPort replyPort) {
- _RegistryEntry entry = _entries[id];
+ var entry = _entries[id];
if (entry != null) {
replyPort.send(entry.tags.toList(growable: false));
} else {
@@ -465,8 +465,8 @@
}
// Create new set, then start removing ids not also matched
// by other tags.
- Set<int> matchingIds = matchingFirstTagIds.toSet();
- for (int i = 1; i < tags.length; i++) {
+ var matchingIds = matchingFirstTagIds.toSet();
+ for (var i = 1; i < tags.length; i++) {
var tagIds = _tag2id[tags[i]];
if (tagIds == null) return const [];
matchingIds.retainAll(tagIds);
@@ -477,11 +477,11 @@
void _find(List tags, int max, SendPort replyPort) {
assert(max == null || max > 0);
- List result = [];
+ var result = [];
if (tags == null || tags.isEmpty) {
var entries = _entries.values;
if (max != null) entries = entries.take(max);
- for (_RegistryEntry entry in entries) {
+ for (var entry in entries) {
result.add(entry.id);
result.add(entry.element);
}
@@ -489,7 +489,7 @@
return;
}
var matchingIds = _findTaggedIds(tags);
- if (max == null) max = matchingIds.length; // All results.
+ max ??= matchingIds.length; // All results.
for (var id in matchingIds) {
result.add(id);
result.add(_entries[id].element);
diff --git a/lib/runner.dart b/lib/runner.dart
index e19cb03..755437d 100644
--- a/lib/runner.dart
+++ b/lib/runner.dart
@@ -6,7 +6,7 @@
/// or even isolate.
library isolate.runner;
-import "dart:async" show Future, FutureOr;
+import 'dart:async' show Future, FutureOr;
/// Calls a function with an argument.
///
@@ -35,9 +35,9 @@
/// complete with a [TimeoutException].
///
/// The default implementation runs the function in the current isolate.
- Future<R> run<R, P>(FutureOr<R> function(P argument), P argument,
- {Duration timeout, FutureOr<R> onTimeout()}) {
- Future result = Future.sync(() => function(argument));
+ Future<R> run<R, P>(FutureOr<R> Function(P argument) function, P argument,
+ {Duration timeout, FutureOr<R> Function() onTimeout}) {
+ var result = Future.sync(() => function(argument));
if (timeout != null) {
result = result.timeout(timeout, onTimeout: onTimeout);
}
diff --git a/lib/src/errors.dart b/lib/src/errors.dart
index ec938b8..38316e7 100644
--- a/lib/src/errors.dart
+++ b/lib/src/errors.dart
@@ -10,7 +10,7 @@
/// that it returns all the errors.
library isolate.errors;
-import "dart:async";
+import 'dart:async';
class MultiError extends Error {
// Limits the number of lines included from each error's error message.
@@ -41,11 +41,11 @@
/// The order of values is not preserved (if that is needed, use
/// [wait]).
static Future<List<Object>> waitUnordered<T>(Iterable<Future<T>> futures,
- {void cleanUp(T successResult)}) {
+ {void Function(T successResult) cleanUp}) {
Completer<List<Object>> completer;
- int count = 0;
- int errors = 0;
- int values = 0;
+ var count = 0;
+ var errors = 0;
+ var values = 0;
// Initialized to `new List(count)` when count is known.
// Filled up with values on the left, errors on the right.
// Order is not preserved.
@@ -72,7 +72,7 @@
};
var handleError = (e, s) {
if (errors == 0 && cleanUp != null) {
- for (int i = 0; i < values; i++) {
+ for (var i = 0; i < values; i++) {
var value = results[i];
if (value != null) Future.sync(() => cleanUp(value));
}
@@ -100,11 +100,11 @@
/// [MultiError.errors] list will have errors in the corresponding slots,
/// and `null` for non-errors.
Future<List<Object>> wait<T>(Iterable<Future<T>> futures,
- {void cleanUp(T successResult)}) {
+ {void Function(T successResult) cleanUp}) {
Completer<List<Object>> completer;
- int count = 0;
- bool hasError = false;
- int completed = 0;
+ var count = 0;
+ var hasError = false;
+ var completed = 0;
// Initialized to `new List(count)` when count is known.
// Filled with values until the first error, then cleared
// and filled with errors.
@@ -120,7 +120,7 @@
}
for (var future in futures) {
- int i = count;
+ var i = count;
count++;
future.then((v) {
if (!hasError) {
@@ -132,7 +132,7 @@
}, onError: (e, s) {
if (!hasError) {
if (cleanUp != null) {
- for (int i = 0; i < results.length; i++) {
+ for (var i = 0; i < results.length; i++) {
var result = results[i];
if (result != null) Future.sync(() => cleanUp(result));
}
@@ -150,30 +150,31 @@
return completer.future;
}
+ @override
String toString() {
- StringBuffer buffer = StringBuffer();
- buffer.write("Multiple Errors:\n");
- int linesPerError = _maxLines ~/ errors.length;
+ var buffer = StringBuffer();
+ buffer.write('Multiple Errors:\n');
+ var linesPerError = _maxLines ~/ errors.length;
if (linesPerError < _minLinesPerError) {
linesPerError = _minLinesPerError;
}
- for (int index = 0; index < errors.length; index++) {
+ for (var index = 0; index < errors.length; index++) {
var error = errors[index];
if (error == null) continue;
- String errorString = error.toString();
- int end = 0;
- for (int i = 0; i < linesPerError; i++) {
+ var errorString = error.toString();
+ var end = 0;
+ for (var i = 0; i < linesPerError; i++) {
end = errorString.indexOf('\n', end) + 1;
if (end == 0) {
end = errorString.length;
break;
}
}
- buffer.write("#$index: ");
+ buffer.write('#$index: ');
buffer.write(errorString.substring(0, end));
if (end < errorString.length) {
- buffer.write("...\n");
+ buffer.write('...\n');
}
}
return buffer.toString();
diff --git a/lib/src/raw_receive_port_multiplexer.dart b/lib/src/raw_receive_port_multiplexer.dart
index 6392424..3db8b01 100644
--- a/lib/src/raw_receive_port_multiplexer.dart
+++ b/lib/src/raw_receive_port_multiplexer.dart
@@ -23,10 +23,10 @@
/// global mutex, so it may be a bottleneck, but it's not clear how slow it is).
library isolate.raw_receive_port_multiplexer;
-import "dart:collection";
-import "dart:isolate";
+import 'dart:collection';
+import 'dart:isolate';
-import "util.dart";
+import 'util.dart';
class _MultiplexRawReceivePort implements RawReceivePort {
final RawReceivePortMultiplexer _multiplexer;
@@ -35,14 +35,17 @@
_MultiplexRawReceivePort(this._multiplexer, this._id, this._handler);
+ @override
set handler(Function handler) {
- this._handler = handler;
+ _handler = handler;
}
+ @override
void close() {
_multiplexer._closePort(_id);
}
+ @override
SendPort get sendPort => _multiplexer._createSendPort(_id);
void _invokeHandler(message) {
@@ -55,6 +58,7 @@
final int _id;
_MultiplexSendPort(this._id, this._sendPort);
+ @override
void send(message) {
_sendPort.send(list2(_id, message));
}
@@ -71,8 +75,8 @@
_port.handler = _multiplexResponse;
}
- RawReceivePort createRawReceivePort([void handler(value)]) {
- int id = _nextId++;
+ RawReceivePort createRawReceivePort([void Function(dynamic) handler]) {
+ var id = _nextId++;
var result = _MultiplexRawReceivePort(this, id, handler);
_map[id] = result;
return result;
@@ -85,7 +89,7 @@
void _multiplexResponse(list) {
int id = list[0];
var message = list[1];
- _MultiplexRawReceivePort receivePort = _map[id];
+ var receivePort = _map[id];
// If the receive port is closed, messages are dropped, just as for
// the normal ReceivePort.
if (receivePort == null) return; // Port closed.
diff --git a/test/isolaterunner_test.dart b/test/isolaterunner_test.dart
index 8917bdd..97c38d3 100644
--- a/test/isolaterunner_test.dart
+++ b/test/isolaterunner_test.dart
@@ -4,19 +4,19 @@
library isolate.test.isolaterunner_test;
-import "dart:async" show Future;
-import "dart:isolate" show Capability;
+import 'dart:async' show Future;
+import 'dart:isolate' show Capability;
-import "package:isolate/isolate_runner.dart";
-import "package:test/test.dart";
+import 'package:isolate/isolate_runner.dart';
+import 'package:test/test.dart';
const _ms = Duration(milliseconds: 1);
void main() {
- test("create-close", testCreateClose);
- test("create-run-close", testCreateRunClose);
- test("separate-isolates", testSeparateIsolates);
- group("isolate functions", testIsolateFunctions);
+ test('create-close', testCreateClose);
+ test('create-run-close', testCreateRunClose);
+ test('separate-isolates', testSeparateIsolates);
+ group('isolate functions', testIsolateFunctions);
}
Future testCreateClose() {
@@ -27,8 +27,8 @@
Future testCreateRunClose() {
return IsolateRunner.spawn().then((IsolateRunner runner) {
- return runner.run(id, "testCreateRunClose").then((v) {
- expect(v, "testCreateRunClose");
+ return runner.run(id, 'testCreateRunClose').then((v) {
+ expect(v, 'testCreateRunClose');
return runner.close().then((_) => runner.onExit);
});
});
@@ -38,7 +38,7 @@
// Check that each isolate has its own _global variable.
return Future.wait(Iterable.generate(2, (_) => IsolateRunner.spawn()))
.then((runners) {
- Future runAll(action(IsolateRunner runner, int index)) {
+ Future runAll(Function(IsolateRunner runner, int index) action) {
var indices = Iterable.generate(runners.length);
return Future.wait(indices.map((i) => action(runners[i], i)));
}
@@ -56,8 +56,8 @@
}
void testIsolateFunctions() {
- test("pause", () {
- bool mayComplete = false;
+ test('pause', () {
+ var mayComplete = false;
return IsolateRunner.spawn().then((isolate) {
isolate.pause();
Future.delayed(_ms * 500, () {
@@ -70,10 +70,10 @@
}).whenComplete(isolate.close);
});
});
- test("pause2", () {
- Capability c1 = Capability();
- Capability c2 = Capability();
- int mayCompleteCount = 2;
+ test('pause2', () {
+ var c1 = Capability();
+ var c2 = Capability();
+ var mayCompleteCount = 2;
return IsolateRunner.spawn().then((isolate) {
isolate.pause(c1);
isolate.pause(c2);
@@ -91,7 +91,7 @@
}).whenComplete(isolate.close);
});
});
- test("ping", () {
+ test('ping', () {
return IsolateRunner.spawn().then((isolate) {
return isolate.ping().then((v) {
expect(v, isTrue);
@@ -99,15 +99,15 @@
});
});
});
- test("kill", () {
+ test('kill', () {
return IsolateRunner.spawn().then((isolate) {
return isolate.kill();
});
});
}
-id(x) => x;
+dynamic id(x) => x;
var _global;
-getGlobal(_) => _global;
-setGlobal(v) => _global = v;
+dynamic getGlobal(_) => _global;
+void setGlobal(v) => _global = v;
diff --git a/test/ports_test.dart b/test/ports_test.dart
index 0baf791..bc133c4 100644
--- a/test/ports_test.dart
+++ b/test/ports_test.dart
@@ -4,61 +4,61 @@
library isolate.test.ports_test;
-import "dart:async";
-import "dart:isolate";
+import 'dart:async';
+import 'dart:isolate';
-import "package:isolate/ports.dart";
-import "package:test/test.dart";
+import 'package:isolate/ports.dart';
+import 'package:test/test.dart';
const Duration _ms = Duration(milliseconds: 1);
-main() {
- group("SingleCallbackPort", testSingleCallbackPort);
- group("SingleCompletePort", testSingleCompletePort);
- group("SingleResponseFuture", testSingleResponseFuture);
- group("SingleResponseFuture", testSingleResultFuture);
- group("SingleResponseChannel", testSingleResponseChannel);
+void main() {
+ group('SingleCallbackPort', testSingleCallbackPort);
+ group('SingleCompletePort', testSingleCompletePort);
+ group('SingleResponseFuture', testSingleResponseFuture);
+ group('SingleResponseFuture', testSingleResultFuture);
+ group('SingleResponseChannel', testSingleResponseChannel);
}
void testSingleCallbackPort() {
- test("Value", () {
- Completer completer = Completer.sync();
- SendPort p = singleCallbackPort(completer.complete);
+ test('Value', () {
+ var completer = Completer.sync();
+ var p = singleCallbackPort(completer.complete);
p.send(42);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("FirstValue", () {
- Completer completer = Completer.sync();
- SendPort p = singleCallbackPort(completer.complete);
+ test('FirstValue', () {
+ var completer = Completer.sync();
+ var p = singleCallbackPort(completer.complete);
p.send(42);
p.send(37);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("Value", () {
- Completer completer = Completer.sync();
- SendPort p = singleCallbackPort(completer.complete);
+ test('Value', () {
+ var completer = Completer.sync();
+ var p = singleCallbackPort(completer.complete);
p.send(42);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("ValueBeforeTimeout", () {
- Completer completer = Completer.sync();
- SendPort p = singleCallbackPort(completer.complete, timeout: _ms * 500);
+ test('ValueBeforeTimeout', () {
+ var completer = Completer.sync();
+ var p = singleCallbackPort(completer.complete, timeout: _ms * 500);
p.send(42);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("Timeout", () {
- Completer completer = Completer.sync();
+ test('Timeout', () {
+ var completer = Completer.sync();
singleCallbackPort(completer.complete,
timeout: _ms * 100, timeoutValue: 37);
return completer.future.then((v) {
@@ -66,9 +66,9 @@
});
});
- test("TimeoutFirst", () {
- Completer completer = Completer.sync();
- SendPort p = singleCallbackPort(completer.complete,
+ test('TimeoutFirst', () {
+ var completer = Completer.sync();
+ var p = singleCallbackPort(completer.complete,
timeout: _ms * 100, timeoutValue: 37);
Timer(_ms * 500, () => p.send(42));
return completer.future.then((v) {
@@ -78,18 +78,18 @@
}
void testSingleCompletePort() {
- test("Value", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer);
+ test('Value', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer);
p.send(42);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("ValueCallback", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, callback: (v) {
+ test('ValueCallback', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, callback: (v) {
expect(42, v);
return 87;
});
@@ -99,9 +99,9 @@
});
});
- test("ValueCallbackFuture", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, callback: (v) {
+ test('ValueCallbackFuture', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, callback: (v) {
expect(42, v);
return Future.delayed(_ms * 500, () => 88);
});
@@ -111,37 +111,37 @@
});
});
- test("ValueCallbackThrows", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, callback: (v) {
+ test('ValueCallbackThrows', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, callback: (v) {
expect(42, v);
throw 89;
});
p.send(42);
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 89);
});
});
- test("ValueCallbackThrowsFuture", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, callback: (v) {
+ test('ValueCallbackThrowsFuture', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, callback: (v) {
expect(42, v);
return Future.error(90);
});
p.send(42);
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 90);
});
});
- test("FirstValue", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer);
+ test('FirstValue', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer);
p.send(42);
p.send(37);
return completer.future.then((v) {
@@ -149,9 +149,9 @@
});
});
- test("FirstValueCallback", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, callback: (v) {
+ test('FirstValueCallback', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, callback: (v) {
expect(v, 42);
return 87;
});
@@ -162,46 +162,46 @@
});
});
- test("ValueBeforeTimeout", () {
- Completer completer = Completer.sync();
- SendPort p = singleCompletePort(completer, timeout: _ms * 500);
+ test('ValueBeforeTimeout', () {
+ var completer = Completer.sync();
+ var p = singleCompletePort(completer, timeout: _ms * 500);
p.send(42);
return completer.future.then((v) {
expect(v, 42);
});
});
- test("Timeout", () {
- Completer completer = Completer.sync();
+ test('Timeout', () {
+ var completer = Completer.sync();
singleCompletePort(completer, timeout: _ms * 100);
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
- test("TimeoutCallback", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallback', () {
+ var completer = Completer.sync();
singleCompletePort(completer, timeout: _ms * 100, onTimeout: () => 87);
return completer.future.then((v) {
expect(v, 87);
});
});
- test("TimeoutCallbackThrows", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallbackThrows', () {
+ var completer = Completer.sync();
singleCompletePort(completer,
timeout: _ms * 100, onTimeout: () => throw 91);
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 91);
});
});
- test("TimeoutCallbackFuture", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallbackFuture', () {
+ var completer = Completer.sync();
singleCompletePort(completer,
timeout: _ms * 100, onTimeout: () => Future.value(87));
return completer.future.then((v) {
@@ -209,19 +209,19 @@
});
});
- test("TimeoutCallbackThrowsFuture", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallbackThrowsFuture', () {
+ var completer = Completer.sync();
singleCompletePort(completer,
timeout: _ms * 100, onTimeout: () => Future.error(92));
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 92);
});
});
- test("TimeoutCallbackSLow", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallbackSLow', () {
+ var completer = Completer.sync();
singleCompletePort(completer,
timeout: _ms * 100,
onTimeout: () => Future.delayed(_ms * 500, () => 87));
@@ -230,21 +230,21 @@
});
});
- test("TimeoutCallbackThrowsSlow", () {
- Completer completer = Completer.sync();
+ test('TimeoutCallbackThrowsSlow', () {
+ var completer = Completer.sync();
singleCompletePort(completer,
timeout: _ms * 100,
onTimeout: () => Future.delayed(_ms * 500, () => throw 87));
return completer.future.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 87);
});
});
- test("TimeoutFirst", () {
- Completer completer = Completer.sync();
- SendPort p =
+ test('TimeoutFirst', () {
+ var completer = Completer.sync();
+ var p =
singleCompletePort(completer, timeout: _ms * 100, onTimeout: () => 37);
Timer(_ms * 500, () => p.send(42));
return completer.future.then((v) {
@@ -254,7 +254,7 @@
}
void testSingleResponseFuture() {
- test("FutureValue", () {
+ test('FutureValue', () {
return singleResponseFuture((SendPort p) {
p.send(42);
}).then((v) {
@@ -262,7 +262,7 @@
});
});
- test("FutureValueFirst", () {
+ test('FutureValueFirst', () {
return singleResponseFuture((SendPort p) {
p.send(42);
p.send(37);
@@ -271,17 +271,17 @@
});
});
- test("FutureError", () {
+ test('FutureError', () {
return singleResponseFuture((SendPort p) {
throw 93;
}).then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e, 93);
});
});
- test("FutureTimeout", () {
+ test('FutureTimeout', () {
return singleResponseFuture((SendPort p) {
// no-op.
}, timeout: _ms * 100)
@@ -290,7 +290,7 @@
});
});
- test("FutureTimeoutValue", () {
+ test('FutureTimeoutValue', () {
return singleResponseFuture((SendPort p) {
// no-op.
}, timeout: _ms * 100, timeoutValue: 42)
@@ -301,7 +301,7 @@
}
void testSingleResultFuture() {
- test("Value", () {
+ test('Value', () {
return singleResultFuture((SendPort p) {
sendFutureResult(Future.value(42), p);
}).then((v) {
@@ -309,7 +309,7 @@
});
});
- test("ValueFirst", () {
+ test('ValueFirst', () {
return singleResultFuture((SendPort p) {
sendFutureResult(Future.value(42), p);
sendFutureResult(Future.value(37), p);
@@ -318,49 +318,49 @@
});
});
- test("Error", () {
+ test('Error', () {
return singleResultFuture((SendPort p) {
sendFutureResult(Future.error(94), p);
}).then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is RemoteError, isTrue);
});
});
- test("ErrorFirst", () {
+ test('ErrorFirst', () {
return singleResultFuture((SendPort p) {
sendFutureResult(Future.error(95), p);
sendFutureResult(Future.error(96), p);
}).then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is RemoteError, isTrue);
});
});
- test("Error", () {
+ test('Error', () {
return singleResultFuture((SendPort p) {
throw 93;
}).then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is RemoteError, isTrue);
});
});
- test("Timeout", () {
+ test('Timeout', () {
return singleResultFuture((SendPort p) {
// no-op.
}, timeout: _ms * 100)
.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
- test("TimeoutValue", () {
+ test('TimeoutValue', () {
return singleResultFuture((SendPort p) {
// no-op.
}, timeout: _ms * 100, onTimeout: () => 42).then((v) {
@@ -368,7 +368,7 @@
});
});
- test("TimeoutError", () {
+ test('TimeoutError', () {
return singleResultFuture((SendPort p) {
// no-op.
}, timeout: _ms * 100, onTimeout: () => throw 97).then((v) {
@@ -380,7 +380,7 @@
}
void testSingleResponseChannel() {
- test("Value", () {
+ test('Value', () {
var channel = SingleResponseChannel();
channel.port.send(42);
return channel.result.then((v) {
@@ -388,7 +388,7 @@
});
});
- test("ValueFirst", () {
+ test('ValueFirst', () {
var channel = SingleResponseChannel();
channel.port.send(42);
channel.port.send(37);
@@ -397,7 +397,7 @@
});
});
- test("ValueCallback", () {
+ test('ValueCallback', () {
var channel = SingleResponseChannel(callback: (v) => 2 * v);
channel.port.send(42);
return channel.result.then((v) {
@@ -405,17 +405,17 @@
});
});
- test("ErrorCallback", () {
+ test('ErrorCallback', () {
var channel = SingleResponseChannel(callback: (v) => throw 42);
channel.port.send(37);
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v, 42);
});
});
- test("AsyncValueCallback", () {
+ test('AsyncValueCallback', () {
var channel = SingleResponseChannel(callback: (v) => Future.value(2 * v));
channel.port.send(42);
return channel.result.then((v) {
@@ -423,47 +423,47 @@
});
});
- test("AsyncErrorCallback", () {
+ test('AsyncErrorCallback', () {
var channel = SingleResponseChannel(callback: (v) => Future.error(42));
channel.port.send(37);
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v, 42);
});
});
- test("Timeout", () {
+ test('Timeout', () {
var channel = SingleResponseChannel(timeout: _ms * 100);
return channel.result.then((v) {
expect(v, null);
});
});
- test("TimeoutThrow", () {
+ test('TimeoutThrow', () {
var channel =
SingleResponseChannel(timeout: _ms * 100, throwOnTimeout: true);
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v is TimeoutException, isTrue);
});
});
- test("TimeoutThrowOnTimeoutAndValue", () {
+ test('TimeoutThrowOnTimeoutAndValue', () {
var channel = SingleResponseChannel(
timeout: _ms * 100,
throwOnTimeout: true,
onTimeout: () => 42,
timeoutValue: 42);
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v is TimeoutException, isTrue);
});
});
- test("TimeoutOnTimeout", () {
+ test('TimeoutOnTimeout', () {
var channel =
SingleResponseChannel(timeout: _ms * 100, onTimeout: () => 42);
return channel.result.then((v) {
@@ -471,7 +471,7 @@
});
});
- test("TimeoutOnTimeoutAndValue", () {
+ test('TimeoutOnTimeoutAndValue', () {
var channel = SingleResponseChannel(
timeout: _ms * 100, onTimeout: () => 42, timeoutValue: 37);
return channel.result.then((v) {
@@ -479,24 +479,24 @@
});
});
- test("TimeoutValue", () {
+ test('TimeoutValue', () {
var channel = SingleResponseChannel(timeout: _ms * 100, timeoutValue: 42);
return channel.result.then((v) {
expect(v, 42);
});
});
- test("TimeoutOnTimeoutError", () {
+ test('TimeoutOnTimeoutError', () {
var channel =
SingleResponseChannel(timeout: _ms * 100, onTimeout: () => throw 42);
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v, 42);
});
});
- test("TimeoutOnTimeoutAsync", () {
+ test('TimeoutOnTimeoutAsync', () {
var channel = SingleResponseChannel(
timeout: _ms * 100, onTimeout: () => Future.value(42));
return channel.result.then((v) {
@@ -504,11 +504,11 @@
});
});
- test("TimeoutOnTimeoutAsyncError", () {
+ test('TimeoutOnTimeoutAsyncError', () {
var channel = SingleResponseChannel(
timeout: _ms * 100, onTimeout: () => Future.error(42));
return channel.result.then((v) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (v, s) {
expect(v, 42);
});
diff --git a/test/registry_test.dart b/test/registry_test.dart
index 5cb5ce1..9e3cdec 100644
--- a/test/registry_test.dart
+++ b/test/registry_test.dart
@@ -4,25 +4,25 @@
library isolate.test.registry_test;
-import "dart:async";
-import "dart:isolate";
+import 'dart:async';
+import 'dart:isolate';
-import "package:isolate/isolate_runner.dart";
-import "package:isolate/registry.dart";
+import 'package:isolate/isolate_runner.dart';
+import 'package:isolate/registry.dart';
-import "package:test/test.dart";
+import 'package:test/test.dart';
const _ms = Duration(milliseconds: 1);
void main() {
- group("lookup", testLookup);
- group("AddLookup", testAddLookup);
- group("AddRemoveTags", testAddRemoveTags);
- group("Remove", testRemove);
- group("CrossIsolate", testCrossIsolate);
- group("Timeout", testTimeout);
- group("MultiRegistry", testMultiRegistry);
- group("ObjectsAndTags", testObjectsAndTags);
+ group('lookup', testLookup);
+ group('AddLookup', testAddLookup);
+ group('AddRemoveTags', testAddRemoveTags);
+ group('Remove', testRemove);
+ group('CrossIsolate', testCrossIsolate);
+ group('Timeout', testTimeout);
+ group('MultiRegistry', testMultiRegistry);
+ group('ObjectsAndTags', testObjectsAndTags);
}
abstract class Oddity {
@@ -30,14 +30,14 @@
static const int odd = 1;
}
-Future<List> waitAll(int n, Future action(int n)) {
+Future<List> waitAll(int n, Future Function(int n) action) {
return Future.wait(Iterable.generate(n, action));
}
void testLookup() {
- test("All", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('All', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
return waitAll(10, (i) {
var element = Element(i);
var tag = i.isEven ? Oddity.even : Oddity.odd;
@@ -51,9 +51,9 @@
}).whenComplete(regman.close);
});
- test("Odd", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Odd', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
return waitAll(10, (i) {
var element = Element(i);
var tag = i.isEven ? Oddity.even : Oddity.odd;
@@ -66,9 +66,9 @@
}).whenComplete(regman.close);
});
- test("Max", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Max', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
return waitAll(10, (i) {
var element = Element(i);
var tag = i.isEven ? Oddity.even : Oddity.odd;
@@ -80,14 +80,14 @@
}).whenComplete(regman.close);
});
- test("MultiTag", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('MultiTag', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
return waitAll(25, (i) {
var element = Element(i);
// Collect all numbers dividing i.
var tags = [i];
- for (int j = 2; j < 25; j++) {
+ for (var j = 2; j < 25; j++) {
if (i % j == 0) tags.add(j);
}
return registry.add(element, tags: tags);
@@ -99,14 +99,14 @@
}).whenComplete(regman.close);
});
- test("MultiTagMax", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('MultiTagMax', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
return waitAll(25, (i) {
var element = Element(i);
// Collect all numbers dividing i.
var tags = [i];
- for (int j = 2; j < 25; j++) {
+ for (var j = 2; j < 25; j++) {
if (i % j == 0) tags.add(j);
}
return registry.add(element, tags: tags);
@@ -120,9 +120,9 @@
}
void testAddLookup() {
- test("Add-lookup-identical", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-lookup-identical', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((_) {
return registry.lookup();
@@ -132,9 +132,9 @@
}).whenComplete(regman.close);
});
- test("Add-multiple-identical", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-multiple-identical', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object1 = Object();
var object2 = Object();
var object3 = Object();
@@ -149,22 +149,22 @@
}).whenComplete(regman.close);
});
- test("Add-twice", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-twice', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((_) {
return registry.add(object);
}).then((_) {
- fail("Unreachable");
+ fail('Unreachable');
}, onError: (e, s) {
expect(e, isStateError);
}).whenComplete(regman.close);
});
- test("Add-lookup-add-lookup", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-lookup-add-lookup', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
var object2 = Object();
return registry.add(object).then((_) {
@@ -187,9 +187,9 @@
}).whenComplete(regman.close);
});
- test("lookup-add-lookup", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('lookup-add-lookup', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.lookup().then((entries) {
expect(entries, isEmpty);
@@ -202,9 +202,9 @@
}).whenComplete(regman.close);
});
- test("Add-multiple-tags", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-multiple-tags', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object1 = Object();
var object2 = Object();
var object3 = Object();
@@ -233,9 +233,9 @@
}
void testRemove() {
- test("Add-remove", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-remove', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((removeCapability) {
return registry.lookup().then((entries) {
@@ -251,9 +251,9 @@
}).whenComplete(regman.close);
});
- test("Add-remove-fail", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-remove-fail', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((removeCapability) {
return registry.lookup().then((entries) {
@@ -268,82 +268,82 @@
}
void testAddRemoveTags() {
- test("Add-remove-tag", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-remove-tag', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((removeCapability) {
- return registry.lookup(tags: ["x"]);
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, isEmpty);
- return registry.addTags([object], ["x"]);
+ return registry.addTags([object], ['x']);
}).then((_) {
- return registry.lookup(tags: ["x"]);
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object));
- return registry.removeTags([object], ["x"]);
+ return registry.removeTags([object], ['x']);
}).then((_) {
- return registry.lookup(tags: ["x"]);
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, isEmpty);
}).whenComplete(regman.close);
});
- test("Tag-twice", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Tag-twice', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object = Object();
- return registry.add(object, tags: ["x"]).then((removeCapability) {
- return registry.lookup(tags: ["x"]);
+ return registry.add(object, tags: ['x']).then((removeCapability) {
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object));
// Adding the same tag twice is allowed, but does nothing.
- return registry.addTags([object], ["x"]);
+ return registry.addTags([object], ['x']);
}).then((_) {
- return registry.lookup(tags: ["x"]);
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object));
// Removing the tag once is enough to remove it.
- return registry.removeTags([object], ["x"]);
+ return registry.removeTags([object], ['x']);
}).then((_) {
- return registry.lookup(tags: ["x"]);
+ return registry.lookup(tags: ['x']);
}).then((entries) {
expect(entries, isEmpty);
}).whenComplete(regman.close);
});
- test("Add-remove-multiple", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
+ test('Add-remove-multiple', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
var object1 = Object();
var object2 = Object();
var object3 = Object();
var objects = [object1, object2, object3];
return Future.wait(objects.map(registry.add)).then((_) {
- return registry.addTags([object1, object2], ["x", "y"]);
+ return registry.addTags([object1, object2], ['x', 'y']);
}).then((_) {
- return registry.addTags([object1, object3], ["z", "w"]);
+ return registry.addTags([object1, object3], ['z', 'w']);
}).then((_) {
- return registry.lookup(tags: ["x", "z"]);
+ return registry.lookup(tags: ['x', 'z']);
}).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object1));
- return registry.removeTags([object1, object2], ["x", "z"]);
+ return registry.removeTags([object1, object2], ['x', 'z']);
}).then((_) {
- return registry.lookup(tags: ["z"]);
+ return registry.lookup(tags: ['z']);
}).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object3));
}).whenComplete(regman.close);
});
- test("Remove-wrong-object", () {
- RegistryManager regman = RegistryManager();
- Registry registry = regman.registry;
- expect(() => registry.removeTags([Object()], ["x"]), throwsStateError);
+ test('Remove-wrong-object', () {
+ var regman = RegistryManager();
+ var registry = regman.registry;
+ expect(() => registry.removeTags([Object()], ['x']), throwsStateError);
regman.close();
});
}
@@ -361,12 +361,12 @@
void testCrossIsolate() {
var object = Object();
- test("regman-other-isolate", () {
+ test('regman-other-isolate', () {
// Add, lookup and remove object in other isolate.
return IsolateRunner.spawn().then((isolate) {
isolate.run(createRegMan, 1).then((registry) {
- return registry.add(object, tags: ["a", "b"]).then((removeCapability) {
- return registry.lookup(tags: ["a"]).then((entries) {
+ return registry.add(object, tags: ['a', 'b']).then((removeCapability) {
+ return registry.lookup(tags: ['a']).then((entries) {
expect(entries, hasLength(1));
expect(entries.first, same(object));
return registry.remove(entries.first, removeCapability);
@@ -384,65 +384,65 @@
}
void testTimeout() {
- test("Timeout-add", () {
- RegistryManager regman = RegistryManager(timeout: _ms * 500);
- Registry registry = regman.registry;
+ test('Timeout-add', () {
+ var regman = RegistryManager(timeout: _ms * 500);
+ var registry = regman.registry;
regman.close();
return registry.add(Object()).then((_) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
- test("Timeout-remove", () {
- RegistryManager regman = RegistryManager(timeout: _ms * 500);
- Registry registry = regman.registry;
+ test('Timeout-remove', () {
+ var regman = RegistryManager(timeout: _ms * 500);
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((rc) {
regman.close();
return registry.remove(object, rc).then((_) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
});
- test("Timeout-addTags", () {
- RegistryManager regman = RegistryManager(timeout: _ms * 500);
- Registry registry = regman.registry;
+ test('Timeout-addTags', () {
+ var regman = RegistryManager(timeout: _ms * 500);
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((rc) {
regman.close();
- return registry.addTags([object], ["x"]).then((_) {
- fail("unreachable");
+ return registry.addTags([object], ['x']).then((_) {
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
});
- test("Timeout-removeTags", () {
- RegistryManager regman = RegistryManager(timeout: _ms * 500);
- Registry registry = regman.registry;
+ test('Timeout-removeTags', () {
+ var regman = RegistryManager(timeout: _ms * 500);
+ var registry = regman.registry;
var object = Object();
return registry.add(object).then((rc) {
regman.close();
- return registry.removeTags([object], ["x"]).then((_) {
- fail("unreachable");
+ return registry.removeTags([object], ['x']).then((_) {
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
});
});
- test("Timeout-lookup", () {
- RegistryManager regman = RegistryManager(timeout: _ms * 500);
- Registry registry = regman.registry;
+ test('Timeout-lookup', () {
+ var regman = RegistryManager(timeout: _ms * 500);
+ var registry = regman.registry;
regman.close();
registry.lookup().then((_) {
- fail("unreachable");
+ fail('unreachable');
}, onError: (e, s) {
expect(e is TimeoutException, isTrue);
});
@@ -450,13 +450,13 @@
}
void testMultiRegistry() {
- test("dual-registry", () {
- RegistryManager regman = RegistryManager();
- Registry registry1 = regman.registry;
- Registry registry2 = regman.registry;
- var l1 = ["x"];
+ test('dual-registry', () {
+ var regman = RegistryManager();
+ var registry1 = regman.registry;
+ var registry2 = regman.registry;
+ var l1 = ['x'];
var l2;
- return registry1.add(l1, tags: ["y"]).then((removeCapability) {
+ return registry1.add(l1, tags: ['y']).then((removeCapability) {
return registry2.lookup().then((entries) {
expect(entries, hasLength(1));
l2 = entries.first;
@@ -479,12 +479,12 @@
}
void testObjectsAndTags() {
- testObject(object) {
- String name = "Transfer-${object.runtimeType}";
+ void testObject(object) {
+ var name = 'Transfer-${object.runtimeType}';
test(name, () {
- RegistryManager regman = RegistryManager();
- Registry registry1 = regman.registry;
- Registry registry2 = regman.registry;
+ var regman = RegistryManager();
+ var registry1 = regman.registry;
+ var registry2 = regman.registry;
return registry1.add(object, tags: [object]).then((removeCapability) {
return registry2.lookup().then((entries) {
expect(entries, hasLength(1));
@@ -514,7 +514,7 @@
// that has an operator== that works after cloning (for use as tags).
testObject(42);
testObject(3.14);
- testObject("string");
+ testObject('string');
testObject(true);
testObject(null);
testObject(Element(42));
@@ -527,7 +527,9 @@
class Element {
final int id;
Element(this.id);
+ @override
int get hashCode => id;
+ @override
bool operator ==(Object other) => other is Element && id == other.id;
}