<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="resources/utilities.js"></script>
<!-- Set the base so that the current URL does not affect the tests. -->
<base href="">
</head>
<body>

<script>
description("This ensure we do not mess up the bytes when an URL is partially parsed and is invalid.")

// Those are all invalid URLs. They should not be partially modified by the parser.
var testSet = [
    // Empty Authority for a standard hierachical URL.
    'http:///',
    'https:///',
    'ftp:///',
    'gopher:///',
    'ws:///',
    'wss:///',

    // Invalid Authority.
    'foo://tête à tête@host/',
    'foo://user:tête à tête@host/',
    '    foo://<>@host/    ',
    '    foo://user:<>@host/    ',
    'foo://user:password@[xxxxx]/tête à tête/',

    // The '?' is a path separator and make sure the hostname is not encoded in punicode. The hostname is an invalid IPV6 hostname.
    'foo://user:password@[?tête à tête/',
    'foo://user:password@[?tête à tête]/',
    'foo://user:password@host:tête à tête/',
    'foo://user:password@host:80tête à tête',
    'foo://user:password@host:tête à tête/',
    'foo://user:password@host:80tête à tête',
    // The schemes "ws:", "ftp:", "http:", "https:", "gother:" take a shortcut during parsing so we test them separately.
    'ws:/tête',
    'ftp:/tête',
    'http:/tête',
    'https:/tête',
    'gopher:/t%C3%AAte',
];

for (var i = 0; i < testSet.length; ++i) {
    src = canonicalize(testSet[i]);
    expected = testSet[i].trim();
    shouldBe('src', 'expected');
}

successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
