18e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block/* 28e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockCopyright (c) 2001-2005 World Wide Web Consortium, 38e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block(Massachusetts Institute of Technology, European Research Consortium 48e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfor Informatics and Mathematics, Keio University). All 58e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockRights Reserved. This work is distributed under the W3C(r) Software License [1] in the 68e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockhope that it will be useful, but WITHOUT ANY WARRANTY; without even 78e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockthe implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 88e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 98e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block*/ 118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertSize(descr, expected, actual) { 138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualSize; 148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertNotNull(descr, actual); 158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualSize = actual.length; 168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected, actualSize); 178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertEqualsAutoCase(context, descr, expected, actual) { 208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (builder.contentType == "text/html") { 218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(context == "attribute") { 228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.toLowerCase(), actual.toLowerCase()); 238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.toUpperCase(), actual); 258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected, actual); 288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertEqualsCollectionAutoCase(context, descr, expected, actual) { 338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if they aren't the same size, they aren't equal 358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.length, actual.length); 368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if there length is the same, then every entry in the expected list 398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // must appear once and only once in the actual list 408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var expectedLen = expected.length; 418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var expectedValue; 428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualLen = actual.length; 438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var i; 448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var j; 458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var matches; 468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(i = 0; i < expectedLen; i++) { 478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches = 0; 488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block expectedValue = expected[i]; 498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(j = 0; j < actualLen; j++) { 508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (builder.contentType == "text/html") { 518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (context == "attribute") { 528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (expectedValue.toLowerCase() == actual[j].toLowerCase()) { 538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches++; 548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (expectedValue.toUpperCase() == actual[j]) { 578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches++; 588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(expectedValue == actual[j]) { 628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches++; 638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(matches == 0) { 678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assert(descr + ": No match found for " + expectedValue,false); 688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(matches > 1) { 708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assert(descr + ": Multiple matches found for " + expectedValue, false); 718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertEqualsCollection(descr, expected, actual) { 768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if they aren't the same size, they aren't equal 788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.length, actual.length); 798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if there length is the same, then every entry in the expected list 818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // must appear once and only once in the actual list 828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var expectedLen = expected.length; 838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var expectedValue; 848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualLen = actual.length; 858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var i; 868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var j; 878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var matches; 888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(i = 0; i < expectedLen; i++) { 898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches = 0; 908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block expectedValue = expected[i]; 918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(j = 0; j < actualLen; j++) { 928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(expectedValue == actual[j]) { 938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block matches++; 948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(matches == 0) { 978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assert(descr + ": No match found for " + expectedValue,false); 988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(matches > 1) { 1008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assert(descr + ": Multiple matches found for " + expectedValue, false); 1018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertEqualsListAutoCase(context, descr, expected, actual) { 1078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var minLength = expected.length; 1088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual.length < minLength) { 1098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block minLength = actual.length; 1108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(var i = 0; i < minLength; i++) { 1138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEqualsAutoCase(context, descr, expected[i], actual[i]); 1148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if they aren't the same size, they aren't equal 1178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.length, actual.length); 1188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertEqualsList(descr, expected, actual) { 1228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var minLength = expected.length; 1238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual.length < minLength) { 1248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block minLength = actual.length; 1258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(var i = 0; i < minLength; i++) { 1288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(expected[i] != actual[i]) { 1298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected[i], actual[i]); 1308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if they aren't the same size, they aren't equal 1348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.length, actual.length); 1358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertInstanceOf(descr, type, obj) { 1388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(type == "Attr") { 1398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr,2,obj.nodeType); 1408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var specd = obj.specified; 1418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertSame(descr, expected, actual) { 1458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(expected != actual) { 1468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.nodeType, actual.nodeType); 1478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(descr, expected.nodeValue, actual.nodeValue); 1488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block function assertURIEquals(assertID, scheme, path, host, file, name, query, fragment, isAbsolute, actual) { 1528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // URI must be non-null 1548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertNotNull(assertID, actual); 1558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var uri = actual; 1578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var lastPound = actual.lastIndexOf("#"); 1598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualFragment = ""; 1608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(lastPound != -1) { 1618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // substring before pound 1638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block uri = actual.substring(0,lastPound); 1658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualFragment = actual.substring(lastPound+1); 1668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(fragment != null) assertEquals(assertID,fragment, actualFragment); 1688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var lastQuestion = uri.lastIndexOf("?"); 1708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualQuery = ""; 1718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(lastQuestion != -1) { 1728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // substring before pound 1748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 1758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block uri = actual.substring(0,lastQuestion); 1768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualQuery = actual.substring(lastQuestion+1); 1778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(query != null) assertEquals(assertID, query, actualQuery); 1798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var firstColon = uri.indexOf(":"); 1818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var firstSlash = uri.indexOf("/"); 1828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualPath = uri; 1838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualScheme = ""; 1848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(firstColon != -1 && firstColon < firstSlash) { 1858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualScheme = uri.substring(0,firstColon); 1868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualPath = uri.substring(firstColon + 1); 1878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(scheme != null) { 1908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, scheme, actualScheme); 1918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(path != null) { 1948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, path, actualPath); 1958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 1968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 1978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(host != null) { 1988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualHost = ""; 1998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(actualPath.substring(0,2) == "//") { 2008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var termSlash = actualPath.substring(2).indexOf("/") + 2; 2018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualHost = actualPath.substring(0,termSlash); 2028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, host, actualHost); 2048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(file != null || name != null) { 2078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualFile = actualPath; 2088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var finalSlash = actualPath.lastIndexOf("/"); 2098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(finalSlash != -1) { 2108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualFile = actualPath.substring(finalSlash+1); 2118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (file != null) { 2138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, file, actualFile); 2148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (name != null) { 2168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var actualName = actualFile; 2178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var finalDot = actualFile.lastIndexOf("."); 2188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (finalDot != -1) { 2198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block actualName = actualName.substring(0, finalDot); 2208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, name, actualName); 2228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if(isAbsolute != null) { 2268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(assertID, isAbsolute, actualPath.substring(0,1) == "/"); 2278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// size() used by assertSize element 2328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction size(collection) 2338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block{ 2348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return collection.length; 2358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction same(expected, actual) 2388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block{ 2398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return expected === actual; 2408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction equalsAutoCase(context, expected, actual) { 2438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (builder.contentType == "text/html") { 2448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (context == "attribute") { 2458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return expected.toLowerCase() == actual; 2468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return expected.toUpperCase() == actual; 2488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return expected == actual; 2508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction toLowerArray(src) { 2538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var newArray = new Array(); 2548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var i; 2558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for (i = 0; i < src.length; i++) { 2568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block newArray[i] = src[i].toLowerCase(); 2578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return newArray; 2598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction createTempURI(scheme) { 2628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (scheme == "http") { 2638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return "http://localhost:8080/webdav/tmp" + Math.floor(Math.random() * 100000) + ".xml"; 2648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return "file:///tmp/domts" + Math.floor(Math.random() * 100000) + ".xml"; 2668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction EventMonitor() { 2718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.atEvents = new Array(); 2728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.bubbledEvents = new Array(); 2738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.capturedEvents = new Array(); 2748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.allEvents = new Array(); 2758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockEventMonitor.prototype.handleEvent = function(evt) { 2788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block switch(evt.eventPhase) { 2798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 1: 2808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block monitor.capturedEvents[monitor.capturedEvents.length] = evt; 2818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 2828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 2: 2848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block monitor.atEvents[monitor.atEvents.length] = evt; 2858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 2868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 3: 2888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block monitor.bubbledEvents[monitor.bubbledEvents.length] = evt; 2898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 2908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 2918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block monitor.allEvents[monitor.allEvents.length] = evt; 2928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 2938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 2948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction DOMErrorImpl(err) { 2958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.severity = err.severity; 2968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.message = err.message; 2978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.type = err.type; 2988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.relatedException = err.relatedException; 2998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.relatedData = err.relatedData; 3008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.location = err.location; 3018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction DOMErrorMonitor() { 3068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.allErrors = new Array(); 3078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockDOMErrorMonitor.prototype.handleError = function(err) { 3108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block errorMonitor.allErrors[errorMonitor.allErrors.length] = new DOMErrorImpl(err); 3118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockDOMErrorMonitor.prototype.assertLowerSeverity = function(id, severity) { 3148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var i; 3158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for (i = 0; i < this.allErrors.length; i++) { 3168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (this.allErrors[i].severity >= severity) { 3178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block assertEquals(id, severity - 1, this.allErrors[i].severity); 3188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction UserDataNotification(operation, key, data, src, dst) { 3238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.operation = operation; 3248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.key = key; 3258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.data = data; 3268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.src = src; 3278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.dst = dst; 3288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction UserDataMonitor() { 3318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.allNotifications = new Array(); 3328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockUserDataMonitor.prototype.handle = function(operation, key, data, src, dst) { 3358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block userDataMonitor.allNotifications[userDataMonitor.allNotifications.length] = 3368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block new UserDataNotification(operation, key, data, src, dst); 3378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction HTMLBuilder() { 3428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.contentType = "application/xhtml+xml"; 3438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.supportedContentTypes = [ "application/xhtml+xml" ]; 3448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.supportsAsyncChange = false; 3468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.async = false; 3478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.fixedAttributeNames = [ 3488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block "validating", "expandEntityReferences", "coalescing", 3498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block "signed", "hasNullString", "ignoringElementContentWhitespace", "namespaceAware", "ignoringComments", "schemaValidating"]; 3508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.fixedAttributeValues = [false, true, false, true, true , false, true, false, false ]; 3528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.configurableAttributeNames = [ ]; 3538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.configurableAttributeValues = [ ]; 3548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.initializationError = null; 3558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.initializationFatalError = null; 3568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.skipIncompatibleTests = true; 3578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.documentURLs = new Array(); 3588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.documentVarnames = new Array(); 3598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.hasFeature = function(feature, version) { 3628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return document.implementation.hasFeature(feature, version); 3638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.getImplementation = function() { 3668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return document.implementation; 3678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.preload = function(frame, varname, url) { 3708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var i; 3718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.documentVarnames[this.documentVarnames.length] = varname; 3728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.documentURLs[this.documentURLs.length] = url; 3738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (this.documentURLs.length > 1) { 3748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 3758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // if all the urls are not the same 3768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 3778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for (i = 1; i < this.documentURLs.length; i++) { 3788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (this.documentURLs[i] != this.documentURLs[0]) { 3798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "Tests with multiple loads of different documents are not currently supported"; 3808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return 1; 3848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 3858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 3868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.cloneNode = function(srcNode, doc) { 3878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var clone = null; 3888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block switch(srcNode.nodeType) { 3898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 3908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // element 3918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 1: 3928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createElementNS(srcNode.namespaceURI, srcNode.nodeName); 3938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var attrs = srcNode.attributes; 3948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(var i = 0; i < attrs.length; i++) { 3958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var srcAttr = attrs.item(i); 3968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.setAttributeNS(srcAttr.namespaceURI, srcAttr.nodeName, srcAttr.nodeValue); 3978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 3988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var srcChild = srcNode.firstChild; 3998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block while(srcChild != null) { 4008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var cloneChild = this.cloneNode(srcChild, doc); 4018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (cloneChild != null) { 4028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.appendChild(cloneChild); 4038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcChild = srcChild.nextSibling; 4058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 3: 4098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createTextNode(srcNode.nodeValue); 4108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 4: 4138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createCDATASection(srcNode.nodeValue); 4148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 5: 4178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createEntityReference(srcNode.nodeName); 4188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 7: 4218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createProcessingInstruction(srcNode.target, srcNode.data); 4228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case 8: 4258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = doc.createComment(srcNode.nodeValue); 4268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block break; 4278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return clone; 4298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 4318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.load = function(frame, varname, url) { 4348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (this.documentVarnames[0] == varname) { 4358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return document; 4368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 4388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 4398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // not a perfect way to do this 4408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // Document.cloneNode is implementation dependent but exists in L1 4418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // and implemented in IE. The alternative brute force copy 4428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // only works in L2 or higher implementations and can't copy 4438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // entity and notation definitions, etc. 4448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var clone = null; 4458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block try { 4468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = document.cloneNode(true); 4478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } catch(ex) { 4488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (clone == null) { 4508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone = document.implementation.createDocument( 4518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block document.documentElement.namespaceURI, 4528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block document.documentElement.nodeName, 4538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block null); 4548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 4558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // Work-around since 4568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // Safari does not create document element 4578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // create document. 4588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (clone.documentElement == null) { 4598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.appendChild(clone.createElementNS( 4608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block document.documentElement.namespaceURI, 4618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block document.documentElement.nodeName)); 4628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var attrs = document.documentElement.attributes; 4648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for(var i = 0; i < attrs.length; i++) { 4658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var srcAttr = attrs.item(i); 4668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.documentElement.setAttributeNS( 4678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcAttr.namespaceURI, srcAttr.nodeName, srcAttr.nodeValue); 4688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var srcNode = document.firstChild; 4718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block while(srcNode != null && srcNode.nodeType != 1) { 4728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (srcNode.nodeType != 10) { 4738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var cloneNode = this.cloneNode(srcNode, clone); 4748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.insertBefore(cloneNode, clone.documentElement); 4758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcNode = srcNode.nextSibling; 4778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcNode = document.documentElement.nextSibling; 4798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block while(srcNode != null) { 4808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var cloneNode = this.cloneNode(srcNode, clone); 4818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.appendChild(cloneNode); 4828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcNode = srcNode.nextSibling; 4838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcNode = document.documentElement.firstChild; 4858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block while(srcNode != null) { 4868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var cloneNode = this.cloneNode(srcNode, clone); 4878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (cloneNode != null) { 4888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block clone.documentElement.appendChild(cloneNode); 4898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block srcNode = srcNode.nextSibling; 4918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 4938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return clone; 4948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 4958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 4968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.getImplementationAttribute = function(attr) { 4978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block for (var i = 0; i < this.fixedAttributeNames.length; i++) { 4988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (this.fixedAttributeNames[i] == attr) { 4998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return this.fixedAttributeValues[i]; 5008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "Unrecognized implementation attribute: " + attr; 5038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.setImplementationAttribute = function(attribute, value) { 5078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var supported = this.getImplementationAttribute(attribute); 5088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (supported != value) { 5098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block this.initializationError = "HTML loader does not support " + attribute + "=" + value; 5108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve BlockHTMLBuilder.prototype.canSetImplementationAttribute = function(attribute, value) { 5148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var supported = this.getImplementationAttribute(attribute); 5158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return (supported == value); 5168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction createConfiguredBuilder() { 5228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return new HTMLBuilder(); 5238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction catchInitializationError(buildr, ex) { 5268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block buildr.initializationError = ex; 5278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block buildr.initializationFatalError = ex; 5288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction checkFeature(feature, version) 5328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block{ 5338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (!builder.hasFeature(feature, version)) 5348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block { 5358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 5368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // don't throw exception so that users can select to ignore the precondition 5378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 5388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block builder.initializationError = "builder does not support feature " + feature + " version " + version; 5398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction setResult(resultType, message) { 5438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var testName = getTargetURI(); 5448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block document.title = testName + ":" + resultType; 5458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var xhtmlNS = "http://www.w3.org/1999/xhtml"; 5468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var newBody = document.createElementNS(xhtmlNS, "body"); 5478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var newTable = document.createElementNS(xhtmlNS, "table"); 5488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block newTable.width = "100%"; 5498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block newTable.border = "1"; 5508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block newBody.appendChild(newTable); 5518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var testRow = newTable.insertRow(-1); 5528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var testDiv1 = testRow.insertCell(-1); 5538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block testDiv1.appendChild(document.createTextNode("Test")); 5548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var testDiv2 = testRow.insertCell(-1); 5558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block testDiv2.appendChild(document.createTextNode(testName)); 5568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var statusRow = newTable.insertRow(-1); 5578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var statusDiv1 = statusRow.insertCell(-1); 5588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block statusDiv1.appendChild(document.createTextNode("Status")); 5598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var statusDiv2 = statusRow.insertCell(-1); 5608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var style = "color:green"; 5618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (resultType == null) { 5628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block statusDiv2.appendChild(document.createTextNode("Success")); 5638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 5648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block statusDiv2.appendChild(document.createTextNode(resultType)); 5658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (resultType == "skip") { 5668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block style = "color:blue"; 5678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 5688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block style = "color:red"; 5698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block newTable.setAttributeNS(null, "style", style); 5728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (message != null) { 5738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var messageRow = newTable.insertRow(-1); 5748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var messageDiv1 = messageRow.insertCell(-1); 5758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block messageDiv1.appendChild(document.createTextNode("Message")); 5768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var messageDiv2 = messageRow.insertCell(-1); 5778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block messageDiv2.appendChild(document.createTextNode(message)); 5788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var oldBody = document.getElementsByTagName("body")[0]; 5808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block oldBody.parentNode.replaceChild(newBody, oldBody); 5818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (parent != window && typeof(parent.setResult) != 'undefined') { 5828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block parent.setResult(testName, resultType, message); 5838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 5848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction checkInitialization(buildr, testname) { 5878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return buildr.initializationError; 5888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction preload(docRef, varname, href) { 5918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return builder.preload(docRef, varname, href); 5928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction load(docRef, varname, href) { 5968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return builder.load(docRef, varname, href); 5978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 5988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 5998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction getImplementationAttribute(attr) { 6018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return builder.getImplementationAttribute(attr); 6028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction setImplementationAttribute(attribute, value) { 6068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block builder.setImplementationAttribute(attribute, value); 6078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction createXPathEvaluator(doc) { 6108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block try { 6118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return doc.getFeature("XPath", null); 6128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block catch(ex) { 6148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return doc; 6168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction getImplementation() { 6208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return builder.getImplementation(); 6218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction assertEquals(id, expected, actual) { 6248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var myActual; 6258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (expected != actual) { 6268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block myActual = actual; 6278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual == null) { 6288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block myActual = "null"; 6298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": assertEquals failed, actual " + myActual + ", expected " + expected + "."; 6318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction assertNull(id, actual) { 6358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual != null) { 6368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": assertNull failed, actual " + actual; 6378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction assertTrue(id, actual) { 6428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (!actual) { 6438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": assertTrue failed"; 6448e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6458e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6468e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6478e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6488e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction assertFalse(id, actual) { 6498e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual) { 6508e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": assertTrue failed"; 6518e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6528e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6538e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6548e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction assertNotNull(id, actual) { 6558e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (actual == null) { 6568e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": assertNotNull failed"; 6578e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6588e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6598e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6608e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction fail(id) { 6618e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block throw "failure:" + id + ": fail"; 6628e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6638e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6648e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6658e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6668e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction getSuffix(contentType) { 6678e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block switch(contentType) { 6688e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case "text/html": 6698e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return ".html"; 6708e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6718e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case "text/xml": 6728e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return ".xml"; 6738e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6748e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case "image/svg+xml": 6758e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return ".svg"; 6768e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6778e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block case "text/mathml": 6788e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return ".mml"; 6798e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6808e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return ".xhtml"; 6818e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6828e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6838e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6848e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction getResourceURI(name, scheme, contentType) { 6858e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block var base = document.documentURI; 6868e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (base == null) { 6878e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block base = ""; 6888e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 6898e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block base = base.substring(0, base.lastIndexOf('/') + 1) + "files/"; 6908e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 6918e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block return base + name + getSuffix(contentType); 6928e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 6938e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6948e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6958e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6968e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockfunction startTest() { 6978e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 6988e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 6998e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// WebKit modification: 18-August-2005 7008e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7018e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// Inform the test controller that this test has a text-format result and so should 7028e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// be dumped as text, and also that the dump should not occur automatically. 7038e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7048e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Blockif (window.layoutTestController) { 7058e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block layoutTestController.dumpAsText(); 7068e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block layoutTestController.waitUntilDone(); 7078e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 7088e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7098e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// End WebKit modification 7108e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7118e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 7128e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 7138e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // invoke test setup 7148e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block // 7158e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block setUpPage(); 7168e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block try { 7178e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block runTest(); 7188e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (builder.initializationError == null) { 7198e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block setResult(null, null); 7208e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 7218e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block setResult("skip", builder.initializationError); 7228e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 7238e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } catch(ex) { 7248e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (typeof(ex.substring) != 'undefined' && ex.substring(0, 8) == "failure:") { 7258e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block setResult("failure", ex.substring(8)); 7268e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } else { 7278e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block setResult("error", ex); 7288e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 7298e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 7308e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 7318e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7328e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// WebKit modification: 18-August-2005 7338e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7348e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// Inform the test controller that this test is complete, so it's time to dump. 7358e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7368e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block if (window.layoutTestController) { 7378e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block layoutTestController.notifyDone(); 7388e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block } 7398e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7408e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// End WebKit modification 7418e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block// 7428e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block 7438e32145b4e03a65dfedc686a281d7a7f78d57a72Steve Block} 744