// 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.

// @dart = 2.9

/// @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);
}
