// Copyright (c) 2017, 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 void close()
/// Closes the sink.
///
/// This signals the end of the chunked conversion. This method is called when
/// converters are used as StreamTransformer's.
/// @description Checks that this method closes the sink.
/// @issue 29329
/// @author sgrekhov@unipro.ru

library close_A01_t01;

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

test(ChunkedConversionSink create(ChunkedConversionSink<List<int>> outSink)) {
  bool called = false;
  Utf8Codec codec = new Utf8Codec();
  var encoded = codec.encode("Кириллица");
  Utf8Decoder decoder = new Utf8Decoder();

  var outSink = new ChunkedConversionSink<List<int>>.withCallback((accumulated) {
    called = true;
    Expect.listEquals([encoded], accumulated);
  });

  ByteConversionSink inSink = create(outSink) as ByteConversionSink;
  var list = utf8.encode("Кириллица");

  Expect.isFalse(called);
  inSink.add(list);
  Expect.isFalse(called);
  inSink.close();
  Expect.isTrue(called);

  list = utf8.encode("прекрасна");
  inSink.add(list);
  inSink.close();
}
