// Copyright (c) 2012, 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.

part "../../../sdk/lib/io/base64.dart";

void main() {
  String line;
  String expected;

  line =
      "Man is distinguished, not only by his reason, but by this singular "
      "passion from other animals, which is a lust of the mind, that by a "
      "perseverance of delight in the continued and indefatigable generation "
      "of knowledge, exceeds the short vehemence of any carnal pleasure.";
  expected =
      "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbm"
      "x5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz\r\n"
      "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlci"
      "BhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg\r\n"
      "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcm"
      "FuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu\r\n"
      "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYX"
      "Rpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n"
      "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm"
      "5hbCBwbGVhc3VyZS4=";
  Expect.equals(expected, _Base64._encode(line.charCodes));
  Expect.listEquals(line.charCodes, _Base64._decode(expected));

  line = "Simple string";
  expected = "U2ltcGxlIHN0cmluZw==";
  Expect.equals(expected, _Base64._encode(line.charCodes));
  Expect.listEquals(line.charCodes, _Base64._decode(expected));

  for (int i = 0; i < 256; i++) {
    List<int> x = [i];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 255; i++) {
    List<int> x = [i, i + 1];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 254; i++) {
    List<int> x = [i, i + 1, i + 2];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 253; i++) {
    List<int> x = [i, i + 1, i + 2, i + 3];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 252; i++) {
    List<int> x = [i, i + 1, i + 2, i + 3, i + 4];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 251; i++) {
    List<int> x = [i, i + 1, i + 2, i + 3, i + 4, i + 5];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }

  for (int i = 0; i < 250; i++) {
    List<int> x = [i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6];
    Expect.listEquals(x, _Base64._decode(_Base64._encode(x)));
  }
}
