2010-04-22 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Apr 2010 07:00:21 +0000 (07:00 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Apr 2010 07:00:21 +0000 (07:00 +0000)
        Reviewed by Adam Barth.

        Add a test for file URL canonicalization with an http base
        https://bugs.webkit.org/show_bug.cgi?id=38035

        * fast/url/file-http-base-expected.txt: Added.
        * fast/url/file-http-base.html: Added.
        * fast/url/script-tests/file-http-base.js: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@58152 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/url/file-http-base-expected.txt [new file with mode: 0644]
LayoutTests/fast/url/file-http-base.html [new file with mode: 0644]
LayoutTests/fast/url/script-tests/file-http-base.js [new file with mode: 0644]

index 089ad7a1a978cff99217362bfd25ea25da4c105a..1a47bcd5d446ec281d5db553e437e5bf45ae18a3 100644 (file)
@@ -1,3 +1,14 @@
+2010-04-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam Barth.
+
+        Add a test for file URL canonicalization with an http base
+        https://bugs.webkit.org/show_bug.cgi?id=38035
+
+        * fast/url/file-http-base-expected.txt: Added.
+        * fast/url/file-http-base.html: Added.
+        * fast/url/script-tests/file-http-base.js: Added.
+
 2010-04-22  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Dan Bernstein and Beth Dakin.
 2010-04-22  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Dan Bernstein and Beth Dakin.
diff --git a/LayoutTests/fast/url/file-http-base-expected.txt b/LayoutTests/fast/url/file-http-base-expected.txt
new file mode 100644 (file)
index 0000000..aa860a1
--- /dev/null
@@ -0,0 +1,37 @@
+Canonicalization of file URLs when the base URL is an http URL
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL canonicalize('file:c:\\foo\\bar.html') should be file:///C:/foo/bar.html. Was file://c:/foo/bar.html.
+FAIL canonicalize('  File:c|////foo\\bar.html') should be file:///C:////foo/bar.html. Was File://c|////foo/bar.html.
+FAIL canonicalize('file:') should be file:///. Was file:.
+FAIL canonicalize('file:UNChost/path') should be file://unchost/path. Was file://UNChost/path.
+FAIL canonicalize('c:\\foo\\bar') should be file:///C:/foo/bar. Was c:/foo/bar.
+FAIL canonicalize('C|/foo/bar') should be file:///C:/foo/bar. Was http://example.com/mock/C|/foo/bar.
+FAIL canonicalize('/C|\\foo\\bar') should be file:///C:/foo/bar. Was http://example.com/C|/foo/bar.
+FAIL canonicalize('//C|/foo/bar') should be file:///C:/foo/bar. Was http://C|/foo/bar.
+FAIL canonicalize('//server/file') should be file://server/file. Was http://server/file.
+FAIL canonicalize('\\\\server\\file') should be file://server/file. Was http://server/file.
+FAIL canonicalize('/\\server/file') should be file://server/file. Was http://server/file.
+FAIL canonicalize('file:c:foo/bar.html') should be file:///C:/foo/bar.html. Was file://c:foo/bar.html.
+FAIL canonicalize('file:/\\/\\C:\\\\//foo\\bar.html') should be file:///C:////foo/bar.html. Was file:////C:////foo/bar.html.
+PASS canonicalize('file:///foo/bar.txt') is 'file:///foo/bar.txt'
+FAIL canonicalize('FILE:/\\/\\7:\\\\//foo\\bar.html') should be file://7:////foo/bar.html. Was FILE:////7:////foo/bar.html.
+PASS canonicalize('file:filer/home\\me') is 'file://filer/home/me'
+FAIL canonicalize('file:///C:/foo/../../../bar.html') should be file:///C:/bar.html. Was file:///bar.html.
+FAIL canonicalize('file:///C:/asdf#\xc2') should be file:///C:/asdf#�. Was file:///C:/asdf#%C2.
+PASS canonicalize('file:///home/me') is 'file:///home/me'
+FAIL canonicalize('file:c:\\foo\\bar.html') should be file:///c:/foo/bar.html. Was file://c:/foo/bar.html.
+FAIL canonicalize('file:c|//foo\\bar.html') should be file:///c%7C//foo/bar.html. Was file://c|//foo/bar.html.
+FAIL canonicalize('//') should be file:///. Was http:/.
+FAIL canonicalize('///') should be file:///. Was http:/.
+FAIL canonicalize('///test') should be file:///test. Was http:/test.
+FAIL canonicalize('file://test') should be file://test/. Was file://test.
+FAIL canonicalize('file://localhost') should be file://localhost/. Was file:.
+FAIL canonicalize('file://localhost/') should be file://localhost/. Was file:///.
+FAIL canonicalize('file://localhost/test') should be file://localhost/test. Was file:///test.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/url/file-http-base.html b/LayoutTests/fast/url/file-http-base.html
new file mode 100644 (file)
index 0000000..8f66a96
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+<script src="resources/utilities.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/file-http-base.js"></script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/url/script-tests/file-http-base.js b/LayoutTests/fast/url/script-tests/file-http-base.js
new file mode 100644 (file)
index 0000000..ca9e734
--- /dev/null
@@ -0,0 +1,68 @@
+description("Canonicalization of file URLs when the base URL is an http URL");
+
+cases = [ 
+    // Windows-style paths
+    ["file:c:\\\\foo\\\\bar.html", "file:///C:/foo/bar.html"],
+    ["  File:c|////foo\\\\bar.html", "file:///C:////foo/bar.html"],
+    ["file:", "file:///"],
+    ["file:UNChost/path", "file://unchost/path"],
+    // CanonicalizeFileURL supports absolute Windows style paths for IE
+    // compatability. Note that the caller must decide that this is a file
+    // URL itself so it can call the file canonicalizer. This is usually
+    // done automatically as part of relative URL resolving.
+    ["c:\\\\foo\\\\bar", "file:///C:/foo/bar"],
+    ["C|/foo/bar", "file:///C:/foo/bar"],
+    ["/C|\\\\foo\\\\bar", "file:///C:/foo/bar"],
+    ["//C|/foo/bar", "file:///C:/foo/bar"],
+    ["//server/file", "file://server/file"],
+    ["\\\\\\\\server\\\\file", "file://server/file"],
+    ["/\\\\server/file", "file://server/file"],
+    // We should preserve the number of slashes after the colon for IE
+    // compatability, except when there is none, in which case we should
+    // add one.
+    ["file:c:foo/bar.html", "file:///C:/foo/bar.html"],
+    ["file:/\\\\/\\\\C:\\\\\\\\//foo\\\\bar.html", "file:///C:////foo/bar.html"],
+    // Three slashes should be non-UNC, even if there is no drive spec (IE
+    // does this, which makes the resulting request invalid).
+    ["file:///foo/bar.txt", "file:///foo/bar.txt"],
+    // TODO(brettw) we should probably fail for invalid host names, which
+    // would change the expected result on this test. We also currently allow
+    // colon even though it's probably invalid, because its currently the
+    // "natural" result of the way the canonicalizer is written. There doesn't
+    // seem to be a strong argument for why allowing it here would be bad, so
+    // we just tolerate it and the load will fail later.
+    ["FILE:/\\\\/\\\\7:\\\\\\\\//foo\\\\bar.html", "file://7:////foo/bar.html"],
+    ["file:filer/home\\\\me", "file://filer/home/me"],
+    // Make sure relative paths can't go above the "C:"
+    ["file:///C:/foo/../../../bar.html", "file:///C:/bar.html"],
+    // Busted refs shouldn't make the whole thing fail.
+    ["file:///C:/asdf#\\xc2", "file:///C:/asdf#\\xef\\xbf\\xbd"],
+
+    // Unix-style paths
+    ["file:///home/me", "file:///home/me"],
+    // Windowsy ones should get still treated as Unix-style.
+    ["file:c:\\\\foo\\\\bar.html", "file:///c:/foo/bar.html"],
+    ["file:c|//foo\\\\bar.html", "file:///c%7C//foo/bar.html"],
+    // file: tests from WebKit (LayoutTests/fast/loader/url-parse-1.html)
+    ["//", "file:///"],
+    ["///", "file:///"],
+    ["///test", "file:///test"],
+    ["file://test", "file://test/"],
+    ["file://localhost",  "file://localhost/"],
+    ["file://localhost/", "file://localhost/"],
+    ["file://localhost/test", "file://localhost/test"],
+];
+
+var originalBaseURL = canonicalize(".");
+setBaseURL("http://example.com/mock/path");
+
+for (var i = 0; i < cases.length; ++i) {
+  test_vector = cases[i][0];
+  expected_result = cases[i][1];
+  shouldBe("canonicalize('" + test_vector + "')",
+           "'" + expected_result + "'");
+}
+
+setBaseURL(originalBaseURL);
+
+var successfullyParsed = true;