// Copyright (c) 2016, 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.

/// @assertion streamConsumer abstract interface for a "sink" accepting multiple
/// entire streams.
///
/// @description Checks that all members of StreamComsumer are implemented.
/// @note Tests run by ../StreamSink/StreamSink_inherited_tests.lib.dart
/// @author ngl@unipro.ru

library all_tests_streamconsumer;
import "dart:async";

import "StreamConsumer_A01_t01.test.dart" as StreamConsumer_A01_t01;
import "hashCode_A01_t01.test.dart" as hashCode_A01_t01;
import "runtimeType_A01_t01.test.dart" as runtimeType_A01_t01;
import "equality_operator_A01_t01.test.dart" as equality_operator_A01_t01;
import "addStream_A01_t01.test.dart" as addStream_A01_t01;
import "addStream_A02_t01.test.dart" as addStream_A02_t01;
import "close_A01_t01.test.dart" as close_A01_t01;
import "noSuchMethodError_A01_t01.test.dart" as noSuchMethodError_A01_t01;
import "toString_A01_t01.test.dart" as toString_A01_t01;

test(StreamConsumer create()) {
  StreamConsumer_A01_t01.test(create);
  hashCode_A01_t01.test(create);
  runtimeType_A01_t01.test(create);
  equality_operator_A01_t01.test(create);
  addStream_A01_t01.test(create);
  addStream_A02_t01.test(create);
  close_A01_t01.test(create);
  noSuchMethodError_A01_t01.test(create);
  toString_A01_t01.test(create);
}
