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

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";

void testZLibInflate_regress10026() {
  test(data, expect) {
    asyncStart();
    var controller = new StreamController(sync: true);
    controller.stream
        .transform(ZLIB.decoder)
        .transform(utf8.decoder)
        .fold(new StringBuffer(), (buffer, s) {
      buffer.write(s);
      return buffer;
    }).then((out) {
      Expect.equals(out.toString(), expect);
      asyncEnd();
    });
    controller.add(data);
    controller.close();
  }

  // Generated by using 'gzip -c | od -v -tu1 -An -w12' and adding commas.
  test([
    31,
    139,
    8,
    8,
    238,
    42,
    167,
    81,
    0,
    3,
    116,
    101,
    120,
    116,
    46,
    116,
    120,
    116,
    0,
    125,
    84,
    79,
    175,
    147,
    64,
    16,
    63,
    183,
    159,
    98,
    196,
    139,
    38,
    165,
    244,
    249,
    212,
    52,
    20,
    136,
    70,
    77,
    188,
    168,
    7,
    189,
    120,
    156,
    178,
    67,
    153,
    20,
    118,
    113,
    119,
    161,
    109,
    140,
    223,
    221,
    97,
    105,
    251,
    170,
    47,
    154,
    54,
    41,
    51,
    195,
    254,
    254,
    49,
    52,
    123,
    162,
    76,
    233,
    79,
    29,
    65,
    237,
    219,
    166,
    152,
    103,
    151,
    31,
    66,
    85,
    204,
    103,
    153,
    103,
    223,
    80,
    241,
    225,
    136,
    109,
    215,
    16,
    188,
    55,
    45,
    178,
    206,
    146,
    169,
    59,
    151,
    121,
    75,
    30,
    161,
    172,
    209,
    58,
    242,
    121,
    212,
    251,
    42,
    94,
    71,
    144,
    20,
    151,
    73,
    237,
    125,
    23,
    211,
    143,
    158,
    135,
    60,
    122,
    103,
    180,
    39,
    237,
    227,
    145,
    45,
    130,
    114,
    170,
    242,
    200,
    211,
    209,
    39,
    35,
    235,
    230,
    138,
    243,
    8,
    70,
    99,
    75,
    121,
    52,
    48,
    29,
    58,
    99,
    253,
    205,
    225,
    3,
    43,
    95,
    231,
    138,
    6,
    46,
    41,
    14,
    197,
    2,
    88,
    179,
    103,
    108,
    98,
    87,
    98,
    67,
    249,
    221,
    25,
    199,
    249,
    147,
    24,
    24,
    185,
    207,
    148,
    165,
    115,
    145,
    12,
    182,
    70,
    157,
    224,
    231,
    124,
    54,
    219,
    98,
    185,
    223,
    89,
    211,
    107,
    21,
    151,
    166,
    49,
    54,
    133,
    167,
    213,
    74,
    62,
    47,
    54,
    50,
    108,
    209,
    238,
    88,
    167,
    176,
    26,
    139,
    14,
    149,
    98,
    189,
    59,
    87,
    149,
    104,
    137,
    43,
    108,
    185,
    57,
    165,
    16,
    125,
    233,
    72,
    195,
    87,
    212,
    46,
    90,
    64,
    244,
    145,
    154,
    129,
    60,
    151,
    8,
    159,
    169,
    39,
    233,
    92,
    27,
    11,
    120,
    107,
    69,
    227,
    2,
    156,
    220,
    26,
    59,
    178,
    92,
    109,
    36,
    206,
    95,
    243,
    153,
    226,
    33,
    200,
    9,
    102,
    82,
    120,
    189,
    90,
    117,
    199,
    91,
    5,
    175,
    168,
    5,
    236,
    189,
    249,
    67,
    200,
    61,
    181,
    155,
    127,
    88,
    168,
    170,
    48,
    49,
    86,
    145,
    141,
    45,
    42,
    238,
    93,
    10,
    119,
    225,
    126,
    97,
    195,
    180,
    97,
    189,
    95,
    0,
    166,
    3,
    59,
    246,
    164,
    2,
    247,
    229,
    240,
    253,
    250,
    229,
    122,
    29,
    206,
    143,
    137,
    197,
    138,
    74,
    99,
    209,
    179,
    17,
    25,
    218,
    104,
    154,
    32,
    222,
    180,
    164,
    24,
    225,
    89,
    139,
    199,
    248,
    86,
    244,
    243,
    41,
    213,
    75,
    188,
    255,
    17,
    39,
    32,
    87,
    219,
    23,
    223,
    23,
    139,
    15,
    201,
    63,
    180,
    254,
    50,
    19,
    158,
    194,
    67,
    22,
    147,
    183,
    17,
    84,
    190,
    89,
    18,
    158,
    187,
    44,
    116,
    50,
    109,
    244,
    60,
    27,
    21,
    73,
    45,
    132,
    227,
    90,
    212,
    119,
    143,
    150,
    91,
    90,
    50,
    232,
    138,
    111,
    53,
    59,
    80,
    161,
    9,
    114,
    69,
    206,
    227,
    182,
    97,
    87,
    75,
    72,
    222,
    192,
    150,
    160,
    119,
    114,
    89,
    25,
    11,
    220,
    52,
    189,
    243,
    99,
    52,
    3,
    1,
    77,
    112,
    78,
    246,
    80,
    78,
    151,
    125,
    43,
    139,
    234,
    150,
    240,
    221,
    244,
    82,
    74,
    110,
    30,
    52,
    5,
    136,
    16,
    180,
    88,
    97,
    141,
    158,
    64,
    96,
    208,
    237,
    3,
    92,
    71,
    182,
    101,
    231,
    36,
    231,
    145,
    72,
    88,
    192,
    223,
    74,
    209,
    87,
    10,
    121,
    110,
    90,
    1,
    251,
    81,
    222,
    8,
    140,
    3,
    114,
    35,
    34,
    105,
    132,
    17,
    120,
    75,
    59,
    158,
    116,
    25,
    189,
    204,
    146,
    110,
    242,
    149,
    201,
    107,
    105,
    169,
    202,
    163,
    241,
    229,
    76,
    147,
    228,
    112,
    56,
    44,
    25,
    53,
    46,
    141,
    221,
    37,
    19,
    137,
    75,
    92,
    71,
    165,
    44,
    104,
    84,
    124,
    50,
    150,
    132,
    83,
    0,
    219,
    9,
    103,
    41,
    72,
    88,
    4,
    180,
    44,
    9,
    41,
    102,
    201,
    57,
    211,
    100,
    250,
    243,
    248,
    13,
    215,
    32,
    235,
    247,
    84,
    4,
    0,
    0
  ], '''
<!doctype html>
<html>
<head>
	<title>Example Domain</title>

	<meta charset="utf-8" />
	<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
	<style type="text/css">
	body {
		background-color: #f0f0f2;
		margin: 0;
		padding: 0;
		font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

	}
	div {
		width: 600px;
		margin: 5em auto;
		padding: 3em;
		background-color: #fff;
		border-radius: 1em;
	}
	a:link, a:visited {
		color: #38488f;
		text-decoration: none;
	}
	@media (max-width: 600px) {
		body {
			background-color: #fff;
		}
		div {
			width: auto;
			margin: 0 auto;
			border-radius: 0;
			padding: 1em;
		}
	}
	</style>
</head>

<body>
<div>
	<h1>Example Domain</h1>
	<p>This domain is established to be used for illustrative examples in documents. You do not need to
		coordinate or ask for permission to use this domain in examples, and it is not available for
		registration.</p>
	<p><a href="http://www.iana.org/domains/special">More information...</a></p>
</div>
</body>
</html>
''');
}

void main() {
  testZLibInflate_regress10026();
}
