// 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 bool autoCompress
/// read / write
/// Whether the HttpServer should compress the content, if possible.
///
/// The content can only be compressed when the response is using chunked
/// Transfer-Encoding and the incoming request has gzip as an accepted encoding
/// in the Accept-Encoding header.
///
/// The default value is false (compression disabled). To enable, set
/// autoCompress to true.
/// @description Checks that default value of this property is [false]
/// @author sgrekhov@unipro.ru

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

main() {
  asyncStart();
  HttpServer? server = null;
  HttpServer.bind(InternetAddress.loopbackIPv4, 0).then((HttpServer s) {
    server = s;
    Expect.isFalse(s.autoCompress);
    asyncEnd();
  }).whenComplete(() {
    server?.close();
  });
}
