// 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 Codec<S, R> fuse<R>(Codec<T, R> other)
 * Fuses this with other.
 *
 * When encoding, the resulting codec encodes with this before encoding with
 * other.
 *
 * When decoding, the resulting codec decodes with other before decoding with
 * this.
 *
 * In some cases one needs to use the inverted codecs to be able to fuse them
 * correctly. That is, the output type of this (T) must match the input type of
 * the second codec other.
 * @description Checks that encoding with the resulting converter is equivalent
 * to converting with this before converting with other.
 * @author sgrekhov@unipro.ru
 */
import "dart:convert";
import "../../../Utils/expect.dart";

check(Encoding? encoding, String toEncode) {
  Codec<List<int>, dynamic> inverted = (encoding as Encoding).inverted;
  Codec fused = encoding.fuse(inverted);
  Expect.equals(toEncode, fused.decode(toEncode));
  Expect.equals(toEncode, fused.encode(toEncode));
}

main() {
  check(Encoding.getByName("us-ascii"), "123abs-");
  check(Encoding.getByName("iso-8859-1"), "âã");
  check(Encoding.getByName("utf-8"), "Кириллица прекрасна");
}
