// 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 Cookie(String name, String value)
/// Creates a new cookie setting the name and value.
/// By default the value of httpOnly will be set to true.
/// @description Checks that it is runtime error if cookie value is invalid (see
/// https://tools.ietf.org/html/rfc6265)
/// @issue 29463
/// @author sgrekhov@unipro.ru

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

const invalidCharacters = [0x20, 0x22, 0x2C, 0x3B, 0x5C, 0x7F];

main() {
  Expect.throws(() {new Cookie("cname", '"');});
  Expect.throws(() {new Cookie("cname", 'v"v');});
  Expect.throws(() {new Cookie("cname", '"v');});
  Expect.throws(() {new Cookie("cname", 'v"');});
  Expect.throws(() {new Cookie("cname", 's"s');});
  for (int charCode in invalidCharacters) {
    String v = new String.fromCharCode(charCode);
    Expect.throws(() {new Cookie("cname", v);}, null,
        "Exception expected for character $v ($charCode)");
  }
}
