1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/test_bug515401.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,141 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=515401 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 515401</title> 1.11 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.12 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.13 + <base id=basehref href="base/"> 1.14 + <base id=basehref2> 1.15 + <base id=basetarget target="def_target"> 1.16 +</head> 1.17 +<body> 1.18 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=515401">Mozilla Bug 515401</a> 1.19 +<a id=a href="dest.html">Simple link</a> 1.20 +<a id=awtarget target="a_target">Link with target</a> 1.21 + 1.22 +<p id="display"></p> 1.23 +<pre id="test"> 1.24 +<script class="testbody" type="text/javascript"> 1.25 + 1.26 +var a = $('a'); 1.27 +var awtarget = $('awtarget'); 1.28 +var head = document.documentElement.firstElementChild; 1.29 + 1.30 +// Test targets 1.31 +is(a.target, "def_target", "using default target"); 1.32 +is(awtarget.target, "a_target", "specified target"); 1.33 +$('basetarget').setAttribute("target", "new_def_target"); 1.34 +is(a.target, "new_def_target", "using new default target"); 1.35 +is(awtarget.target, "a_target", "still specified target"); 1.36 +$('basetarget').removeAttribute("target"); 1.37 +is(a.target, "", "no target"); 1.38 +is(awtarget.target, "a_target", "yet still specified target"); 1.39 +newbasetarget = document.createElement('base'); 1.40 +newbasetarget.target = "new_target_elem"; 1.41 +head.appendChild(newbasetarget); 1.42 +is(a.target, "new_target_elem", "new target element"); 1.43 +is(awtarget.target, "a_target", "yet still specified target"); 1.44 +newbasetarget.target = "new_target_elem_value"; 1.45 +is(a.target, "new_target_elem_value", "new target element attribute"); 1.46 +is(awtarget.target, "a_target", "yet still specified target"); 1.47 +newbasetarget.target = ""; 1.48 +is(a.target, "", "new target element no attribute"); 1.49 +is(awtarget.target, "a_target", "yet still specified target"); 1.50 + 1.51 + 1.52 +// link hrefs 1.53 +var basehref = $('basehref'); 1.54 +var basehref2 = $('basehref2'); 1.55 +var pre = "http://mochi.test:8888/tests/content/base/test/"; 1.56 +function verifyBase(base, test) { 1.57 + if (base == "") { 1.58 + is(document.baseURI, document.URL, "document base when " + test); 1.59 + is(a.href, pre + "dest.html", "link href when " + test); 1.60 + } 1.61 + else { 1.62 + is(document.baseURI, pre + base, "document base when " + test); 1.63 + is(a.href, pre + base + "dest.html", "link href when " + test); 1.64 + } 1.65 +} 1.66 + 1.67 + 1.68 +// In document base 1.69 +verifyBase("base/", "from markup"); 1.70 + 1.71 +// Modify existing <base> 1.72 +basehref.href = "base2/"; 1.73 +verifyBase("base2/", "modify existing"); 1.74 +is(basehref.href, pre + "base2/", "HTMLBaseElement.href resolves correctly"); 1.75 + 1.76 +// Modify existing <base> to absolute url 1.77 +basehref.href = "http://www.example.com/foo/bar.html"; 1.78 +is(document.baseURI, "http://www.example.com/foo/bar.html", "document base when setting absolute url"); 1.79 +is(a.href, "http://www.example.com/foo/dest.html", "link href when setting absolute url"); 1.80 +is(basehref.href, "http://www.example.com/foo/bar.html", 1.81 + "HTMLBaseElement.href resolves correctly when setting absolute url"); 1.82 + 1.83 +// Remove href on existing element 1.84 +basehref.removeAttribute("href"); 1.85 +verifyBase("", "remove href on existing element"); 1.86 + 1.87 +// Create href on existing element 1.88 +basehref.href = "base3/"; 1.89 +verifyBase("base3/", "create href on existing element"); 1.90 + 1.91 +// Fall back to second after remove attr 1.92 +basehref2.href = "base4/"; 1.93 +verifyBase("base3/", "add href on second base"); 1.94 +basehref.removeAttribute("href"); 1.95 +verifyBase("base4/", "fall back to second after remove attr"); 1.96 + 1.97 +// Set href on existing again 1.98 +basehref.href = "base5/"; 1.99 +verifyBase("base5/", "set href on existing again"); 1.100 + 1.101 +// Unset href on second 1.102 +basehref2.removeAttribute("href"); 1.103 +verifyBase("base5/", "unset href on second"); 1.104 + 1.105 +// Insert base with href before existing 1.106 +var basehref0 = document.createElement("base"); 1.107 +basehref0.href = "base6/"; 1.108 +verifyBase("base5/", "nothing modified"); 1.109 +head.insertBefore(basehref0, head.firstChild); 1.110 +verifyBase("base6/", "insert base with href before existing"); 1.111 + 1.112 +// Insert base as grandchild of head 1.113 +var basehref3 = document.createElement("base"); 1.114 +basehref3.href = "base7/"; 1.115 +var tmp = document.createElement("head"); 1.116 +tmp.appendChild(basehref3); 1.117 +head.insertBefore(tmp, head.firstChild); 1.118 +verifyBase("base7/", "inserted base as grandchild of head at the beginning of head"); 1.119 +is(basehref3.parentNode.parentNode, head, "base got inserted correctly"); 1.120 + 1.121 +// Remove secondary bases 1.122 +var tmp, tmp2; 1.123 +for (tmp = head.firstChild; tmp = tmp.nextSibling; tmp) { 1.124 + if (tmp.localName == "base" && tmp != basehref0) { 1.125 + tmp2 = tmp.previousSibling; 1.126 + head.removeChild(tmp); 1.127 + tmp = tmp2; 1.128 + } 1.129 + verifyBase("base7/", "remove unneeded base"); 1.130 +} 1.131 + 1.132 +// Remove head 1.133 +document.documentElement.removeChild(head); 1.134 +verifyBase("", "removed head"); 1.135 + 1.136 +// Insert base in body 1.137 +document.body.insertBefore(basehref3, document.body.firstChild); 1.138 +verifyBase("base7/", "inserted base in body"); 1.139 + 1.140 +</script> 1.141 +</pre> 1.142 +</body> 1.143 +</html> 1.144 +