// 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 add(T chunk)
/// Adds chunked data to this sink.
///
/// This method is also used when converters are used as StreamTransformers.
/// @description Checks that this method adds data to the ChunkedConversionSink.
/// Test chunk modification
/// @author sgrekhov@unipro.ru

library add_A01_t02;

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

test(ChunkedConversionSink create(ChunkedConversionSink<List<int>> outSink)) {
  bool called = false;
  Utf8Codec codec = new Utf8Codec();
  var encoded1 = codec.encode("Кириллица");
  var encoded2 = codec.encode("кириллица");
  var outSink = new ChunkedConversionSink<List<int>>.withCallback((accumulated) {
    called = true;
    Expect.listEquals([encoded1, encoded2], accumulated);
  });

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

  Expect.isFalse(called);
  inSink.add(list);
  // Lowercase the first letter (к)
  list[0] = 0xd0;
  list[1] = 0xba;
  inSink.add(list);
  Expect.isFalse(called);
  inSink.close();
  Expect.isTrue(called);
}
