| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | |
| 3 * | |
| 4 * Redistribution and use in source and binary forms, with or without | |
| 5 * modification, are permitted provided that the following conditions | |
| 6 * are met: | |
| 7 * 1. Redistributions of source code must retain the above copyright | |
| 8 * notice, this list of conditions and the following disclaimer. | |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | |
| 10 * notice, this list of conditions and the following disclaimer in the | |
| 11 * documentation and/or other materials provided with the distribution. | |
| 12 * | |
| 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' | |
| 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | |
| 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
| 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS | |
| 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | |
| 23 * THE POSSIBILITY OF SUCH DAMAGE. | |
| 24 */ | |
| 25 | |
| 26 (function () { | |
| 27 | |
| 28 module("base"); | |
| 29 | |
| 30 test("joinPath", 1, function() { | |
| 31 var value = base.joinPath("path/to", "test.html"); | |
| 32 equals(value, "path/to/test.html"); | |
| 33 }); | |
| 34 | |
| 35 test("endsWith", 9, function() { | |
| 36 ok(base.endsWith("xyz", "")); | |
| 37 ok(base.endsWith("xyz", "z")); | |
| 38 ok(base.endsWith("xyz", "yz")); | |
| 39 ok(base.endsWith("xyz", "xyz")); | |
| 40 ok(!base.endsWith("xyz", "wxyz")); | |
| 41 ok(!base.endsWith("xyz", "gwxyz")); | |
| 42 ok(base.endsWith("", "")); | |
| 43 ok(!base.endsWith("", "z")); | |
| 44 ok(!base.endsWith("xyxy", "yx")); | |
| 45 }); | |
| 46 | |
| 47 test("trimExtension", 6, function() { | |
| 48 equals(base.trimExtension("xyz"), "xyz"); | |
| 49 equals(base.trimExtension("xy.z"), "xy"); | |
| 50 equals(base.trimExtension("x.yz"), "x"); | |
| 51 equals(base.trimExtension("x.y.z"), "x.y"); | |
| 52 equals(base.trimExtension(".xyz"), ""); | |
| 53 equals(base.trimExtension(""), ""); | |
| 54 }); | |
| 55 | |
| 56 test("joinPath with empty parent", 1, function() { | |
| 57 var value = base.joinPath("", "test.html"); | |
| 58 equals(value, "test.html"); | |
| 59 }); | |
| 60 | |
| 61 test("uniquifyArray", 5, function() { | |
| 62 deepEqual(base.uniquifyArray([]), []); | |
| 63 deepEqual(base.uniquifyArray(["a"]), ["a"]); | |
| 64 deepEqual(base.uniquifyArray(["a", "b"]), ["a", "b"]); | |
| 65 deepEqual(base.uniquifyArray(["a", "b", "b"]), ["a", "b"]); | |
| 66 deepEqual(base.uniquifyArray(["a", "b", "b", "a"]), ["a", "b"]); | |
| 67 }); | |
| 68 | |
| 69 test("filterTree", 2, function() { | |
| 70 var tree = { | |
| 71 'path': { | |
| 72 'to': { | |
| 73 'test.html': { | |
| 74 'actual': 'PASS', | |
| 75 'expected': 'FAIL' | |
| 76 } | |
| 77 }, | |
| 78 'another.html': { | |
| 79 'actual': 'TEXT', | |
| 80 'expected': 'PASS' | |
| 81 } | |
| 82 } | |
| 83 } | |
| 84 | |
| 85 function isLeaf(node) | |
| 86 { | |
| 87 return !!node.actual; | |
| 88 } | |
| 89 | |
| 90 function actualIsText(node) | |
| 91 { | |
| 92 return node.actual == 'TEXT'; | |
| 93 } | |
| 94 | |
| 95 var all = base.filterTree(tree, isLeaf, function() { return true }); | |
| 96 deepEqual(all, { | |
| 97 'path/to/test.html': { | |
| 98 'actual': 'PASS', | |
| 99 'expected': 'FAIL' | |
| 100 }, | |
| 101 'path/another.html': { | |
| 102 'actual': 'TEXT', | |
| 103 'expected': 'PASS' | |
| 104 } | |
| 105 }); | |
| 106 | |
| 107 var text = base.filterTree(tree, isLeaf, actualIsText); | |
| 108 deepEqual(text, { | |
| 109 'path/another.html': { | |
| 110 'actual': 'TEXT', | |
| 111 'expected': 'PASS' | |
| 112 } | |
| 113 }); | |
| 114 }); | |
| 115 | |
| 116 test("extends", 14, function() { | |
| 117 | |
| 118 var LikeDiv = base.extends("div", { | |
| 119 init: function() { | |
| 120 this.textContent = "awesome"; | |
| 121 }, | |
| 122 method: function(msg) { | |
| 123 return 42; | |
| 124 } | |
| 125 }); | |
| 126 | |
| 127 var LikeLikeDiv = base.extends(LikeDiv, { | |
| 128 init: function() { | |
| 129 this.className = "like"; | |
| 130 } | |
| 131 }); | |
| 132 | |
| 133 var LikeP = base.extends("p", { | |
| 134 init: function(content) { | |
| 135 this.textContent = content | |
| 136 } | |
| 137 }); | |
| 138 | |
| 139 var LikeProgress = base.extends("progress", { | |
| 140 init: function() { | |
| 141 this.max = 100; | |
| 142 this.value = 10; | |
| 143 } | |
| 144 }); | |
| 145 | |
| 146 var LikeLikeProgress = base.extends(LikeProgress, { | |
| 147 completed: function() { | |
| 148 this.value = 100; | |
| 149 } | |
| 150 }); | |
| 151 | |
| 152 document.body.appendChild(new LikeDiv()); | |
| 153 equals(document.body.lastChild.tagName, "DIV"); | |
| 154 equals(document.body.lastChild.innerHTML, "awesome"); | |
| 155 equals(document.body.lastChild.method(), 42); | |
| 156 document.body.removeChild(document.body.lastChild); | |
| 157 | |
| 158 document.body.appendChild(new LikeLikeDiv()); | |
| 159 equals(document.body.lastChild.tagName, "DIV"); | |
| 160 equals(document.body.lastChild.innerHTML, "awesome"); | |
| 161 equals(document.body.lastChild.method(), 42); | |
| 162 equals(document.body.lastChild.className, "like"); | |
| 163 document.body.removeChild(document.body.lastChild); | |
| 164 | |
| 165 document.body.appendChild(new LikeP("super")); | |
| 166 equals(document.body.lastChild.tagName, "P"); | |
| 167 equals(document.body.lastChild.innerHTML, "super"); | |
| 168 raises(function() { | |
| 169 document.body.lastChild.method(); | |
| 170 }); | |
| 171 document.body.removeChild(document.body.lastChild); | |
| 172 | |
| 173 document.body.appendChild(new LikeProgress()); | |
| 174 equals(document.body.lastChild.tagName, "PROGRESS"); | |
| 175 // Safari 5.1 lacks the <progress> element. | |
| 176 // equals(document.body.lastChild.position, 0.1); | |
| 177 equals(document.body.lastChild.innerHTML, ""); | |
| 178 raises(function() { | |
| 179 document.body.lastChild.method(); | |
| 180 }); | |
| 181 document.body.removeChild(document.body.lastChild); | |
| 182 | |
| 183 document.body.appendChild(new LikeLikeProgress()); | |
| 184 equals(document.body.lastChild.tagName, "PROGRESS"); | |
| 185 // Safari 5.1 lacks the <progress> element. | |
| 186 // equals(document.body.lastChild.position, 0.1); | |
| 187 document.body.lastChild.completed(); | |
| 188 // Safari 5.1 lacks the <progress> element. | |
| 189 // equals(document.body.lastChild.position, 1); | |
| 190 document.body.removeChild(document.body.lastChild); | |
| 191 }); | |
| 192 | |
| 193 test("parseJSONP", 6, function() { | |
| 194 deepEqual(base.parseJSONP(""), {}); | |
| 195 deepEqual(base.parseJSONP('p({"key": "value"})'), {"key": "value"}); | |
| 196 deepEqual(base.parseJSONP('ADD_RESULTS({"dummy":"data"});'), {"dummy":"data"
}); | |
| 197 deepEqual(base.parseJSONP('{"dummy":"data"}'), {"dummy":"data"}); | |
| 198 deepEqual(base.parseJSONP('ADD_RESULTS({"builder(1)":"data"});'), {"builder(
1)":"data"}); | |
| 199 deepEqual(base.parseJSONP('{"builder(1)":"data"}'), {"builder(1)":"data"}); | |
| 200 }); | |
| 201 | |
| 202 test("base.queryParam", 2, function() { | |
| 203 equal(base.queryParam({}), ''); | |
| 204 equal(base.queryParam({ | |
| 205 'foo bar': 'bar baz', | |
| 206 '1 2': '3 4', | |
| 207 }), 'foo+bar=bar+baz&1+2=3+4'); | |
| 208 }); | |
| 209 | |
| 210 })(); | |
| OLD | NEW |