test_bug515401.html (4763B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=515401 5 --> 6 <head> 7 <title>Test for Bug 515401</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 10 <base id=basehref href="base/"> 11 <base id=basehref2> 12 <base id=basetarget target="def_target"> 13 </head> 14 <body> 15 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=515401">Mozilla Bug 515401</a> 16 <a id=a href="dest.html">Simple link</a> 17 <a id=awtarget target="a_target">Link with target</a> 18 19 <p id="display"></p> 20 <pre id="test"> 21 <script class="testbody" type="text/javascript"> 22 23 var a = $('a'); 24 var awtarget = $('awtarget'); 25 var head = document.documentElement.firstElementChild; 26 27 // Test targets 28 is(a.target, "def_target", "using default target"); 29 is(awtarget.target, "a_target", "specified target"); 30 $('basetarget').setAttribute("target", "new_def_target"); 31 is(a.target, "new_def_target", "using new default target"); 32 is(awtarget.target, "a_target", "still specified target"); 33 $('basetarget').removeAttribute("target"); 34 is(a.target, "", "no target"); 35 is(awtarget.target, "a_target", "yet still specified target"); 36 newbasetarget = document.createElement('base'); 37 newbasetarget.target = "new_target_elem"; 38 head.appendChild(newbasetarget); 39 is(a.target, "new_target_elem", "new target element"); 40 is(awtarget.target, "a_target", "yet still specified target"); 41 newbasetarget.target = "new_target_elem_value"; 42 is(a.target, "new_target_elem_value", "new target element attribute"); 43 is(awtarget.target, "a_target", "yet still specified target"); 44 newbasetarget.target = ""; 45 is(a.target, "", "new target element no attribute"); 46 is(awtarget.target, "a_target", "yet still specified target"); 47 48 49 // link hrefs 50 var basehref = $('basehref'); 51 var basehref2 = $('basehref2'); 52 var pre = "http://mochi.test:8888/tests/dom/base/test/"; 53 function verifyBase(base, test) { 54 if (base == "") { 55 is(document.baseURI, document.URL, "document base when " + test); 56 is(a.href, pre + "dest.html", "link href when " + test); 57 } 58 else { 59 is(document.baseURI, pre + base, "document base when " + test); 60 is(a.href, pre + base + "dest.html", "link href when " + test); 61 } 62 } 63 64 65 // In document base 66 verifyBase("base/", "from markup"); 67 68 // Modify existing <base> 69 basehref.href = "base2/"; 70 verifyBase("base2/", "modify existing"); 71 is(basehref.href, pre + "base2/", "HTMLBaseElement.href resolves correctly"); 72 73 // Modify existing <base> to absolute url 74 basehref.href = "http://www.example.com/foo/bar.html"; 75 is(document.baseURI, "http://www.example.com/foo/bar.html", "document base when setting absolute url"); 76 is(a.href, "http://www.example.com/foo/dest.html", "link href when setting absolute url"); 77 is(basehref.href, "http://www.example.com/foo/bar.html", 78 "HTMLBaseElement.href resolves correctly when setting absolute url"); 79 80 // Remove href on existing element 81 basehref.removeAttribute("href"); 82 verifyBase("", "remove href on existing element"); 83 84 // Create href on existing element 85 basehref.href = "base3/"; 86 verifyBase("base3/", "create href on existing element"); 87 88 // Fall back to second after remove attr 89 basehref2.href = "base4/"; 90 verifyBase("base3/", "add href on second base"); 91 basehref.removeAttribute("href"); 92 verifyBase("base4/", "fall back to second after remove attr"); 93 94 // Set href on existing again 95 basehref.href = "base5/"; 96 verifyBase("base5/", "set href on existing again"); 97 98 // Unset href on second 99 basehref2.removeAttribute("href"); 100 verifyBase("base5/", "unset href on second"); 101 102 // Insert base with href before existing 103 var basehref0 = document.createElement("base"); 104 basehref0.href = "base6/"; 105 verifyBase("base5/", "nothing modified"); 106 head.insertBefore(basehref0, head.firstChild); 107 verifyBase("base6/", "insert base with href before existing"); 108 109 // Insert base as grandchild of head 110 var basehref3 = document.createElement("base"); 111 basehref3.href = "base7/"; 112 var tmp = document.createElement("head"); 113 tmp.appendChild(basehref3); 114 head.insertBefore(tmp, head.firstChild); 115 verifyBase("base7/", "inserted base as grandchild of head at the beginning of head"); 116 is(basehref3.parentNode.parentNode, head, "base got inserted correctly"); 117 118 // Remove secondary bases 119 var tmp, tmp2; 120 for (tmp = head.firstChild; (tmp = tmp.nextSibling); tmp) { 121 if (tmp.localName == "base" && tmp != basehref0) { 122 tmp2 = tmp.previousSibling; 123 head.removeChild(tmp); 124 tmp = tmp2; 125 } 126 verifyBase("base7/", "remove unneeded base"); 127 } 128 129 // Remove head 130 document.documentElement.removeChild(head); 131 verifyBase("", "removed head"); 132 133 // Insert base in body 134 document.body.insertBefore(basehref3, document.body.firstChild); 135 verifyBase("base7/", "inserted base in body"); 136 137 </script> 138 </pre> 139 </body> 140 </html>