anchor.diff:  
       process = await project.start(args);
   
  -    final Stream<String> inStream =
  -        process!.stdout.transform<String>(utf8.decoder);
  -
       // Send an LSP init.
       final String message = jsonEncode({
         'jsonrpc': '2.0',
  
positive.code:     process!.stdin.write('\r\n');
      process!.stdin.write(message);
  
      List<String> responses = await inStream.take(2).toList();
      expect(responses, hasLength(2));
  
      expect(responses[0], startsWith('Content-Length: '));
  
      final json = jsonDecode(responses[1]);
      expect(json['id'], 1);
      expect(json['result'], isNotNull);
      final result = json['result'];
  
negative.code:     process = null;
    });
  }
  
  /// Reads the first LSP message from [stream].
  Future<String> _readLspMessage(Stream<List<int>> stream) {
    // Headers are complete if there are 2x '\r\n\'. The '\r' is part of the LSP
    // spec for headers and included on all platforms, not just Windows.
    const lspHeaderBodySeperator = '\r\n\r\n';
    final contentLengthRegExp = RegExp(r'Content-Length: (\d+)\r\n');
  
    final completer = Completer<String>();
    final buffer = StringBuffer();
    late final StreamSubscription<String> inSubscription;
    inSubscription = stream.transform<String>(utf8.decoder).listen(
      (data) {
        // Collect the output into the buffer.
        buffer.write(data);
  
        // Check whether the buffer has a complete message.
        final bufferString = buffer.toString();
  
        // To know if we have a complete message, we need to check we have the
        // headers, extract the content-length, then check we have that many
        // bytes in the body.
        if (bufferString.contains(lspHeaderBodySeperator)) {
          final parts = bufferString.split(lspHeaderBodySeperator);
          final headers = parts[0];
          final body = parts[1];
          final length =
              int.parse(contentLengthRegExp.firstMatch(headers)!.group(1)!);
          // Check if we're already had the full payload.
          if (body.length >= length) {
            completer.complete(body.substring(0, length));
            inSubscription.cancel();
          }
        }
      },
    );
  
    return completer.future;
  }
  