// 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 CompressionOptions.compressionDefault = const CompressionOptions()
 * Default WebSocket Compression options. Compression will be enabled with the
 * following options: clientNoContextTakeover: false, serverNoContextTakeover:
 * false, clientMaxWindowBits: null (default maximal window size of 15 bits),
 * serverMaxWindowBits: null (default maximal window size of 15 bits)
 * @description Checks that this constant returns CompressionOptions with the
 * default values
 * @issue 29436
 * @author sgrekhov@unipro.ru
 */
import "dart:io";
import "../../../Utils/expect.dart";

main() {
  Expect.isNotNull(CompressionOptions.compressionDefault);

  Expect.isFalse(CompressionOptions.compressionDefault.clientNoContextTakeover);
  Expect.isFalse(CompressionOptions.compressionDefault.serverNoContextTakeover);
  Expect.isNull(CompressionOptions.compressionDefault.clientMaxWindowBits);
  Expect.isNull(CompressionOptions.compressionDefault.serverMaxWindowBits);
}
