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