// Copyright (c) 2018, 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 IOSink(StreamConsumer<List<int>> target,
///   { Encoding encoding: utf8 })
/// Create an [IOSink] that outputs to a target [StreamConsumer] of bytes.
/// @description Checks that new [IOSink] object with correct encoding is created
/// @author iarkh@unipro.ru


import "../../../Utils/expect.dart";
import "dart:async";
import "dart:io";
import "dart:convert";

main() {
  IOSink sink = new IOSink(new StreamController(), encoding: utf8);
  Expect.equals(utf8, sink.encoding);
  sink.close();

  sink = new IOSink(new StreamController(), encoding: ascii);
  Expect.equals(ascii, sink.encoding);
  sink.close();

  sink = new IOSink(new StreamController(), encoding: latin1);
  Expect.equals(latin1, sink.encoding);
  sink.close();

  sink = new IOSink(new StreamController(), encoding: systemEncoding);
  Expect.equals(systemEncoding, sink.encoding);
  sink.close();
}
