// 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 addSlice(List<int> chunk, int start, int end, bool isLast)
/// Adds the next chunk to this.
/// ...
/// If isLast is true closes this.
/// ...
/// @description Checks that if isLast is true closes this.
/// ByteConversionSink
/// @author sgrekhov@unipro.ru

library addSlice_A01_t03;

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

test(ChunkedConversionSink create(ByteConversionSink outSink)) {
  bool called = false;
  
  var outSink = new ByteConversionSink.withCallback((accumulated) {
    called = true;
    Expect.listEquals([], accumulated);
  });

  ByteConversionSink inSink = create(outSink) as ByteConversionSink;
  List<int> list = [0xd0, 0xbb, 0xd0, 0xbb];//лл
  inSink.addSlice(list, 0, 0, false);
  inSink.addSlice(list, 2, 2, false);
  inSink.addSlice(list, 4, 4, true);
  Expect.isTrue(called);
}
