1430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Blockdescription("Test resolution of relative Windows-like URLs.");
2430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block
3430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Blockcases = [
4430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // Format: [baseURL, relativeURL, expectedURL],
5430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // Resolving against Windows file base URLs.
6430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "http://host/", "http://host/"],
7430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "bar", "file:///C:/bar"],
8430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "../../../bar.html", "file:///C:/bar.html"],
9430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "/../bar.html", "file:///C:/bar.html"],
10430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // But two backslashes on Windows should be UNC so should be treated
11430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // as absolute.
12430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["http://host/a", "\\\\\\\\another\\\\path", ""],
13430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // IE doesn't support drive specs starting with two slashes. It fails
14430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // immediately and doesn't even try to load. We fix it up to either
15430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // an absolute path or UNC depending on what it looks like.
16430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/something", "//c:/foo", "file:///C:/foo"],
17430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/something", "//localhost/c:/foo", "file:///C:/foo"],
18430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // Windows drive specs should be allowed and treated as absolute.
19430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "c:", ""],
20430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "c:/foo", ""],
21430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["http://host/a", "c:\\\\foo", ""],
22430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // Relative paths with drive letters should be allowed when the base is
23430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // also a file.
24430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "/z:/bar", "file:///Z:/bar"],
25430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // Treat absolute paths as being off of the drive.
26430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo", "/bar", "file:///C:/bar"],
27430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file://localhost/C:/foo", "/bar", "file://localhost/C:/bar"],
28430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/foo/com/", "/bar", "file:///C:/bar"],
29430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // On Windows, two slashes without a drive letter when the base is a file
30430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  // means that the path is UNC.
31430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/something", "//somehost/path", "file://somehost/path"],
32430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  ["file:///C:/something", "/\\\\//somehost/path", "file://somehost/path"],
33430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block];
34430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block
35430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Blockvar originalBaseURL = canonicalize(".");
36430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block
37430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Blockfor (var i = 0; i < cases.length; ++i) {
38430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  baseURL = cases[i][0];
39430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  relativeURL = cases[i][1];
40430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  expectedURL = cases[i][2];
41430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  setBaseURL(baseURL);
42430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block  shouldBe("canonicalize('" + relativeURL + "')",
43430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block           "'" + expectedURL + "'");
44430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block}
45430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block
46430b6b672341c7e8b5e4cfafaaae20315e68701bSteve BlocksetBaseURL(originalBaseURL);
47430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Block
48430b6b672341c7e8b5e4cfafaaae20315e68701bSteve Blockvar successfullyParsed = true;
49