1c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block/* 2c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockCopyright (c) 2001-2005 World Wide Web Consortium, 3c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block(Massachusetts Institute of Technology, European Research Consortium 4c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfor Informatics and Mathematics, Keio University). All 5c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockRights Reserved. This work is distributed under the W3C(r) Software License [1] in the 6c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockhope that it will be useful, but WITHOUT ANY WARRANTY; without even 7c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockthe implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 8c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 9c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 10c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block*/ 11c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 12c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertSize(descr, expected, actual) { 13c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualSize; 14c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertNotNull(descr, actual); 15c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualSize = actual.length; 16c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected, actualSize); 17c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 18c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 19c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertEqualsAutoCase(context, descr, expected, actual) { 20c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (builder.contentType == "text/html") { 21c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(context == "attribute") { 22c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.toLowerCase(), actual.toLowerCase()); 23c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 24c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.toUpperCase(), actual); 25c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 26c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 27c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected, actual); 28c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 29c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 30c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 31c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 32c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertEqualsCollectionAutoCase(context, descr, expected, actual) { 33c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 34c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if they aren't the same size, they aren't equal 35c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.length, actual.length); 36c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 37c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 38c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if there length is the same, then every entry in the expected list 39c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // must appear once and only once in the actual list 40c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var expectedLen = expected.length; 41c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var expectedValue; 42c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualLen = actual.length; 43c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var i; 44c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var j; 45c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var matches; 46c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(i = 0; i < expectedLen; i++) { 47c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches = 0; 48c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block expectedValue = expected[i]; 49c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(j = 0; j < actualLen; j++) { 50c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (builder.contentType == "text/html") { 51c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (context == "attribute") { 52c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (expectedValue.toLowerCase() == actual[j].toLowerCase()) { 53c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches++; 54c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 55c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 56c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (expectedValue.toUpperCase() == actual[j]) { 57c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches++; 58c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 59c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 60c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 61c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(expectedValue == actual[j]) { 62c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches++; 63c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 64c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 65c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 66c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(matches == 0) { 67c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assert(descr + ": No match found for " + expectedValue,false); 68c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 69c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(matches > 1) { 70c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assert(descr + ": Multiple matches found for " + expectedValue, false); 71c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 72c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 73c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 74c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 75c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertEqualsCollection(descr, expected, actual) { 76c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 77c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if they aren't the same size, they aren't equal 78c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.length, actual.length); 79c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 80c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if there length is the same, then every entry in the expected list 81c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // must appear once and only once in the actual list 82c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var expectedLen = expected.length; 83c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var expectedValue; 84c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualLen = actual.length; 85c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var i; 86c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var j; 87c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var matches; 88c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(i = 0; i < expectedLen; i++) { 89c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches = 0; 90c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block expectedValue = expected[i]; 91c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(j = 0; j < actualLen; j++) { 92c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(expectedValue == actual[j]) { 93c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block matches++; 94c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 95c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 96c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(matches == 0) { 97c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assert(descr + ": No match found for " + expectedValue,false); 98c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 99c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(matches > 1) { 100c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assert(descr + ": Multiple matches found for " + expectedValue, false); 101c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 102c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 103c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 104c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 105c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 106c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertEqualsListAutoCase(context, descr, expected, actual) { 107c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var minLength = expected.length; 108c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual.length < minLength) { 109c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block minLength = actual.length; 110c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 111c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 112c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(var i = 0; i < minLength; i++) { 113c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEqualsAutoCase(context, descr, expected[i], actual[i]); 114c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 115c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 116c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if they aren't the same size, they aren't equal 117c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.length, actual.length); 118c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 119c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 120c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 121c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertEqualsList(descr, expected, actual) { 122c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var minLength = expected.length; 123c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual.length < minLength) { 124c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block minLength = actual.length; 125c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 126c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 127c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(var i = 0; i < minLength; i++) { 128c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(expected[i] != actual[i]) { 129c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected[i], actual[i]); 130c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 131c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 132c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 133c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if they aren't the same size, they aren't equal 134c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.length, actual.length); 135c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 136c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 137c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertInstanceOf(descr, type, obj) { 138c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(type == "Attr") { 139c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr,2,obj.nodeType); 140c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var specd = obj.specified; 141c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 142c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 143c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 144c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertSame(descr, expected, actual) { 145c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(expected != actual) { 146c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.nodeType, actual.nodeType); 147c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(descr, expected.nodeValue, actual.nodeValue); 148c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 149c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 150c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 151c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block function assertURIEquals(assertID, scheme, path, host, file, name, query, fragment, isAbsolute, actual) { 152c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 153c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // URI must be non-null 154c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertNotNull(assertID, actual); 155c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 156c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var uri = actual; 157c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 158c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var lastPound = actual.lastIndexOf("#"); 159c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualFragment = ""; 160c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(lastPound != -1) { 161c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 162c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // substring before pound 163c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 164c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block uri = actual.substring(0,lastPound); 165c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualFragment = actual.substring(lastPound+1); 166c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 167c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(fragment != null) assertEquals(assertID,fragment, actualFragment); 168c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 169c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var lastQuestion = uri.lastIndexOf("?"); 170c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualQuery = ""; 171c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(lastQuestion != -1) { 172c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 173c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // substring before pound 174c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 175c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block uri = actual.substring(0,lastQuestion); 176c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualQuery = actual.substring(lastQuestion+1); 177c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 178c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(query != null) assertEquals(assertID, query, actualQuery); 179c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 180c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var firstColon = uri.indexOf(":"); 181c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var firstSlash = uri.indexOf("/"); 182c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualPath = uri; 183c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualScheme = ""; 184c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(firstColon != -1 && firstColon < firstSlash) { 185c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualScheme = uri.substring(0,firstColon); 186c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualPath = uri.substring(firstColon + 1); 187c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 188c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 189c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(scheme != null) { 190c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, scheme, actualScheme); 191c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 192c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 193c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(path != null) { 194c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, path, actualPath); 195c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 196c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 197c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(host != null) { 198c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualHost = ""; 199c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(actualPath.substring(0,2) == "//") { 200c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var termSlash = actualPath.substring(2).indexOf("/") + 2; 201c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualHost = actualPath.substring(0,termSlash); 202c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 203c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, host, actualHost); 204c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 205c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 206c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(file != null || name != null) { 207c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualFile = actualPath; 208c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var finalSlash = actualPath.lastIndexOf("/"); 209c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(finalSlash != -1) { 210c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualFile = actualPath.substring(finalSlash+1); 211c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 212c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (file != null) { 213c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, file, actualFile); 214c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 215c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (name != null) { 216c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var actualName = actualFile; 217c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var finalDot = actualFile.lastIndexOf("."); 218c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (finalDot != -1) { 219c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block actualName = actualName.substring(0, finalDot); 220c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 221c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, name, actualName); 222c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 223c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 224c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 225c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if(isAbsolute != null) { 226c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(assertID, isAbsolute, actualPath.substring(0,1) == "/"); 227c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 228c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 229c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 230c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 231c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// size() used by assertSize element 232c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction size(collection) 233c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block{ 234c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return collection.length; 235c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 236c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 237c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction same(expected, actual) 238c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block{ 239c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return expected === actual; 240c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 241c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 242c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction equalsAutoCase(context, expected, actual) { 243c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (builder.contentType == "text/html") { 244c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (context == "attribute") { 245c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return expected.toLowerCase() == actual; 246c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 247c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return expected.toUpperCase() == actual; 248c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 249c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return expected == actual; 250c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 251c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 252c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction toLowerArray(src) { 253c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var newArray = new Array(); 254c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var i; 255c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for (i = 0; i < src.length; i++) { 256c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block newArray[i] = src[i].toLowerCase(); 257c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 258c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return newArray; 259c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 260c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 261c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction createTempURI(scheme) { 262c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (scheme == "http") { 263c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return "http://localhost:8080/webdav/tmp" + Math.floor(Math.random() * 100000) + ".xml"; 264c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 265c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return "file:///tmp/domts" + Math.floor(Math.random() * 100000) + ".xml"; 266c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 267c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 268c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 269c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 270c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction EventMonitor() { 271c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.atEvents = new Array(); 272c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.bubbledEvents = new Array(); 273c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.capturedEvents = new Array(); 274c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.allEvents = new Array(); 275c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 276c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 277c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockEventMonitor.prototype.handleEvent = function(evt) { 278c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block switch(evt.eventPhase) { 279c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 1: 280c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block monitor.capturedEvents[monitor.capturedEvents.length] = evt; 281c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 282c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 283c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 2: 284c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block monitor.atEvents[monitor.atEvents.length] = evt; 285c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 286c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 287c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 3: 288c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block monitor.bubbledEvents[monitor.bubbledEvents.length] = evt; 289c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 290c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 291c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block monitor.allEvents[monitor.allEvents.length] = evt; 292c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 293c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 294c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction DOMErrorImpl(err) { 295c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.severity = err.severity; 296c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.message = err.message; 297c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.type = err.type; 298c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.relatedException = err.relatedException; 299c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.relatedData = err.relatedData; 300c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.location = err.location; 301c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 302c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 303c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 304c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 305c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction DOMErrorMonitor() { 306c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.allErrors = new Array(); 307c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 308c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 309c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockDOMErrorMonitor.prototype.handleError = function(err) { 310c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block errorMonitor.allErrors[errorMonitor.allErrors.length] = new DOMErrorImpl(err); 311c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 312c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 313c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockDOMErrorMonitor.prototype.assertLowerSeverity = function(id, severity) { 314c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var i; 315c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for (i = 0; i < this.allErrors.length; i++) { 316c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (this.allErrors[i].severity >= severity) { 317c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block assertEquals(id, severity - 1, this.allErrors[i].severity); 318c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 319c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 320c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 321c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 322c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction UserDataNotification(operation, key, data, src, dst) { 323c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.operation = operation; 324c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.key = key; 325c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.data = data; 326c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.src = src; 327c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.dst = dst; 328c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 329c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 330c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction UserDataMonitor() { 331c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.allNotifications = new Array(); 332c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 333c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 334c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockUserDataMonitor.prototype.handle = function(operation, key, data, src, dst) { 335c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block userDataMonitor.allNotifications[userDataMonitor.allNotifications.length] = 336c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block new UserDataNotification(operation, key, data, src, dst); 337c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 338c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 339c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 340c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 341c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction HTMLBuilder() { 342c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.contentType = "application/xhtml+xml"; 343c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.supportedContentTypes = [ "application/xhtml+xml" ]; 344c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 345c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.supportsAsyncChange = false; 346c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.async = false; 347c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.fixedAttributeNames = [ 348c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block "validating", "expandEntityReferences", "coalescing", 349c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block "signed", "hasNullString", "ignoringElementContentWhitespace", "namespaceAware", "ignoringComments", "schemaValidating"]; 350c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 351c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.fixedAttributeValues = [false, true, false, true, true , false, true, false, false ]; 352c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.configurableAttributeNames = [ ]; 353c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.configurableAttributeValues = [ ]; 354c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.initializationError = null; 355c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.initializationFatalError = null; 356c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.skipIncompatibleTests = true; 357c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.documentURLs = new Array(); 358c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.documentVarnames = new Array(); 359c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 360c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 361c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.hasFeature = function(feature, version) { 362c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return document.implementation.hasFeature(feature, version); 363c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 364c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 365c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.getImplementation = function() { 366c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return document.implementation; 367c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 368c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 369c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.preload = function(frame, varname, url) { 370c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var i; 371c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.documentVarnames[this.documentVarnames.length] = varname; 372c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.documentURLs[this.documentURLs.length] = url; 373c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (this.documentURLs.length > 1) { 374c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 375c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // if all the urls are not the same 376c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 377c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for (i = 1; i < this.documentURLs.length; i++) { 378c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (this.documentURLs[i] != this.documentURLs[0]) { 379c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "Tests with multiple loads of different documents are not currently supported"; 380c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 381c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 382c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 383c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return 1; 384c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 385c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 386c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.cloneNode = function(srcNode, doc) { 387c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var clone = null; 388c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block switch(srcNode.nodeType) { 389c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 390c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // element 391c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 1: 392c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createElementNS(srcNode.namespaceURI, srcNode.nodeName); 393c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var attrs = srcNode.attributes; 394c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(var i = 0; i < attrs.length; i++) { 395c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var srcAttr = attrs.item(i); 396c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.setAttributeNS(srcAttr.namespaceURI, srcAttr.nodeName, srcAttr.nodeValue); 397c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 398c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var srcChild = srcNode.firstChild; 399c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block while(srcChild != null) { 400c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var cloneChild = this.cloneNode(srcChild, doc); 401c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (cloneChild != null) { 402c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.appendChild(cloneChild); 403c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 404c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcChild = srcChild.nextSibling; 405c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 406c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 407c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 408c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 3: 409c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createTextNode(srcNode.nodeValue); 410c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 411c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 412c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 4: 413c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createCDATASection(srcNode.nodeValue); 414c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 415c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 416c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 5: 417c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createEntityReference(srcNode.nodeName); 418c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 419c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 420c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 7: 421c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createProcessingInstruction(srcNode.target, srcNode.data); 422c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 423c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 424c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case 8: 425c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = doc.createComment(srcNode.nodeValue); 426c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block break; 427c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 428c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return clone; 429c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 430c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 431c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 432c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 433c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.load = function(frame, varname, url) { 434c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (this.documentVarnames[0] == varname) { 435c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return document; 436c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 437c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 438c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 439c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // not a perfect way to do this 440c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // Document.cloneNode is implementation dependent but exists in L1 441c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // and implemented in IE. The alternative brute force copy 442c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // only works in L2 or higher implementations and can't copy 443c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // entity and notation definitions, etc. 444c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var clone = null; 445c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block try { 446c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = document.cloneNode(true); 447c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } catch(ex) { 448c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 449c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (clone == null) { 450c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone = document.implementation.createDocument( 451c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block document.documentElement.namespaceURI, 452c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block document.documentElement.nodeName, 453c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block null); 454c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 455c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // Work-around since 456c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // Safari does not create document element 457c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // create document. 458c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (clone.documentElement == null) { 459c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.appendChild(clone.createElementNS( 460c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block document.documentElement.namespaceURI, 461c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block document.documentElement.nodeName)); 462c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 463c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var attrs = document.documentElement.attributes; 464c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for(var i = 0; i < attrs.length; i++) { 465c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var srcAttr = attrs.item(i); 466c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.documentElement.setAttributeNS( 467c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcAttr.namespaceURI, srcAttr.nodeName, srcAttr.nodeValue); 468c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 469c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 470c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var srcNode = document.firstChild; 471c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block while(srcNode != null && srcNode.nodeType != 1) { 472c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (srcNode.nodeType != 10) { 473c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var cloneNode = this.cloneNode(srcNode, clone); 474c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.insertBefore(cloneNode, clone.documentElement); 475c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 476c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcNode = srcNode.nextSibling; 477c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 478c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcNode = document.documentElement.nextSibling; 479c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block while(srcNode != null) { 480c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var cloneNode = this.cloneNode(srcNode, clone); 481c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.appendChild(cloneNode); 482c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcNode = srcNode.nextSibling; 483c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 484c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcNode = document.documentElement.firstChild; 485c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block while(srcNode != null) { 486c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var cloneNode = this.cloneNode(srcNode, clone); 487c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (cloneNode != null) { 488c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block clone.documentElement.appendChild(cloneNode); 489c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 490c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block srcNode = srcNode.nextSibling; 491c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 492c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 493c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return clone; 494c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 495c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 496c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.getImplementationAttribute = function(attr) { 497c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block for (var i = 0; i < this.fixedAttributeNames.length; i++) { 498c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (this.fixedAttributeNames[i] == attr) { 499c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return this.fixedAttributeValues[i]; 500c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 501c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 502c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "Unrecognized implementation attribute: " + attr; 503c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 504c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 505c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 506c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.setImplementationAttribute = function(attribute, value) { 507c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var supported = this.getImplementationAttribute(attribute); 508c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (supported != value) { 509c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block this.initializationError = "HTML loader does not support " + attribute + "=" + value; 510c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 511c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 512c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 513c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve BlockHTMLBuilder.prototype.canSetImplementationAttribute = function(attribute, value) { 514c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var supported = this.getImplementationAttribute(attribute); 515c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return (supported == value); 516c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 517c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 518c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 519c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 520c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 521c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction createConfiguredBuilder() { 522c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return new HTMLBuilder(); 523c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 524c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 525c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction catchInitializationError(buildr, ex) { 526c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block buildr.initializationError = ex; 527c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block buildr.initializationFatalError = ex; 528c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 529c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 530c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 531c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction checkFeature(feature, version) 532c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block{ 533c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (!builder.hasFeature(feature, version)) 534c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block { 535c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 536c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // don't throw exception so that users can select to ignore the precondition 537c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 538c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block builder.initializationError = "builder does not support feature " + feature + " version " + version; 539c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 540c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 541c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 542c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction setResult(resultType, message) { 543c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var testName = getTargetURI(); 544c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block document.title = testName + ":" + resultType; 545c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var xhtmlNS = "http://www.w3.org/1999/xhtml"; 546c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var newBody = document.createElementNS(xhtmlNS, "body"); 547c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var newTable = document.createElementNS(xhtmlNS, "table"); 548c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block newTable.width = "100%"; 549c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block newTable.border = "1"; 550c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block newBody.appendChild(newTable); 551c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var testRow = newTable.insertRow(-1); 552c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var testDiv1 = testRow.insertCell(-1); 553c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block testDiv1.appendChild(document.createTextNode("Test")); 554c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var testDiv2 = testRow.insertCell(-1); 555c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block testDiv2.appendChild(document.createTextNode(testName)); 556c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var statusRow = newTable.insertRow(-1); 557c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var statusDiv1 = statusRow.insertCell(-1); 558c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block statusDiv1.appendChild(document.createTextNode("Status")); 559c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var statusDiv2 = statusRow.insertCell(-1); 560c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var style = "color:green"; 561c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (resultType == null) { 562c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block statusDiv2.appendChild(document.createTextNode("Success")); 563c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 564c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block statusDiv2.appendChild(document.createTextNode(resultType)); 565c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (resultType == "skip") { 566c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block style = "color:blue"; 567c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 568c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block style = "color:red"; 569c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 570c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 571c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block newTable.setAttributeNS(null, "style", style); 572c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (message != null) { 573c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var messageRow = newTable.insertRow(-1); 574c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var messageDiv1 = messageRow.insertCell(-1); 575c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block messageDiv1.appendChild(document.createTextNode("Message")); 576c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var messageDiv2 = messageRow.insertCell(-1); 577c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block messageDiv2.appendChild(document.createTextNode((message instanceof Error) ? ("Line " + message.line + ": " + message.name) : message)); 578c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 579c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var oldBody = document.getElementsByTagName("body")[0]; 580c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block oldBody.parentNode.replaceChild(newBody, oldBody); 581c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (parent != window && typeof(parent.setResult) != 'undefined') { 582c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block parent.setResult(testName, resultType, message); 583c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 584c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 585c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 586c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction checkInitialization(buildr, testname) { 587c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return buildr.initializationError; 588c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 589c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 590c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction preload(docRef, varname, href) { 591c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return builder.preload(docRef, varname, href); 592c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 593c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 594c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 595c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction load(docRef, varname, href) { 596c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return builder.load(docRef, varname, href); 597c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 598c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 599c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 600c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction getImplementationAttribute(attr) { 601c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return builder.getImplementationAttribute(attr); 602c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 603c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 604c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 605c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction setImplementationAttribute(attribute, value) { 606c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block builder.setImplementationAttribute(attribute, value); 607c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 608c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 609c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction createXPathEvaluator(doc) { 610c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block try { 611c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return doc.getFeature("XPath", null); 612c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 613c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block catch(ex) { 614c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 615c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return doc; 616c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 617c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 618c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 619c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction getImplementation() { 620c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return builder.getImplementation(); 621c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 622c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 623c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction assertEquals(id, expected, actual) { 624c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var myActual; 625c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (expected != actual) { 626c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block myActual = actual; 627c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual == null) { 628c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block myActual = "null"; 629c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 630c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": assertEquals failed, actual " + myActual + ", expected " + expected + "."; 631c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 632c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 633c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 634c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction assertNull(id, actual) { 635c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual != null) { 636c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": assertNull failed, actual " + actual; 637c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 638c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 639c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 640c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 641c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction assertTrue(id, actual) { 642c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (!actual) { 643c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": assertTrue failed"; 644c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 645c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 646c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 647c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 648c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction assertFalse(id, actual) { 649c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual) { 650c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": assertTrue failed"; 651c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 652c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 653c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 654c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction assertNotNull(id, actual) { 655c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (actual == null) { 656c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": assertNotNull failed"; 657c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 658c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 659c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 660c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction fail(id) { 661c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block throw "failure:" + id + ": fail"; 662c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 663c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 664c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 665c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 666c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction getSuffix(contentType) { 667c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block switch(contentType) { 668c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case "text/html": 669c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return ".html"; 670c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 671c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case "text/xml": 672c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return ".xml"; 673c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 674c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case "image/svg+xml": 675c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return ".svg"; 676c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 677c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block case "text/mathml": 678c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return ".mml"; 679c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 680c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return ".xhtml"; 681c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 682c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 683c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 684c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction getResourceURI(name, scheme, contentType) { 685c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block var base = document.documentURI; 686c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (base == null) { 687c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block base = ""; 688c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 689c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block base = base.substring(0, base.lastIndexOf('/') + 1) + "files/"; 690c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 691c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block return base + name + getSuffix(contentType); 692c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 693c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 694c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 695c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 696c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockfunction startTest() { 697c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 698c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 699c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// WebKit modification: 18-August-2005 700c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 701c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// Inform the test controller that this test has a text-format result and so should 702c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// be dumped as text, and also that the dump should not occur automatically. 703c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 704c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Blockif (window.layoutTestController) { 705c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block layoutTestController.dumpAsText(); 706c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block layoutTestController.waitUntilDone(); 707c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 708c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 709c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// End WebKit modification 710c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 711c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 712c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 713c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // invoke test setup 714c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block // 715c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block setUpPage(); 716c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block try { 717c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block runTest(); 718c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (builder.initializationError == null) { 719c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block setResult(null, null); 720c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 721c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block setResult("skip", builder.initializationError); 722c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 723c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } catch(ex) { 724c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (typeof(ex.substring) != 'undefined' && ex.substring(0, 8) == "failure:") { 725c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block setResult("failure", ex.substring(8)); 726c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } else { 727c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block setResult("error", ex); 728c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 729c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 730c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 731c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 732c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// WebKit modification: 18-August-2005 733c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 734c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// Inform the test controller that this test is complete, so it's time to dump. 735c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 736c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block if (window.layoutTestController) { 737c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block layoutTestController.notifyDone(); 738c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block } 739c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 740c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// End WebKit modification 741c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block// 742c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block 743c95a81d8cfc937ef06eedc21d60cce1aa1a92463Steve Block} 744