prototype/test/unit/hash.html

158 lines
5.8 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Prototype Unit test file</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="../../dist/prototype.js" type="text/javascript"></script>
<script src="../lib/unittest.js" type="text/javascript"></script>
<link rel="stylesheet" href="../test.css" type="text/css" />
<style type="text/css" media="screen">
/* <![CDATA[ */
#testcss1 { font-size:11px; color: #f00; }
#testcss2 { font-size:12px; color: #0f0; display: none; }
/* ]]> */
</style>
</head>
<body>
<h1>Prototype Unit test file</h1>
<p>
Test of the Hash.prototype extensions
</p>
<!-- Log output -->
<div id="testlog"> </div>
<!-- Tests follow -->
<script type="text/javascript" language="javascript" charset="utf-8">
// <![CDATA[
var Fixtures = {
one: { a: 'A#' },
many: {
a: 'A',
b: 'B',
c: 'C',
d: 'D#'
},
functions: {
quad: function(n) { return n*n },
plus: function(n) { return n+n }
},
multiple: { color: $w('r g b') },
multiple_nil: { color: ['r', null, 'g', undefined, 0] },
multiple_all_nil: { color: [null, undefined] },
multiple_empty: { color: [] },
multiple_special: { 'stuff[]': $w('$ a ;') },
value_undefined: { a:"b", c:undefined },
value_null: { a:"b", c:null },
value_zero: { a:"b", c:0 },
dangerous: {
_each: 'E',
map: 'M',
keys: 'K',
values: 'V',
collect: 'C',
inject: 'I'
}
};
new Test.Unit.Runner({
testConstruct: function(){ with(this) {
var h = $H(Fixtures.one);
assertNotIdentical(Fixtures.one, h);
assertIdentical(h, $H(h));
var h2 = new Hash(h);
assertNotIdentical(h, h2);
assertHashEqual(h, h2);
}},
testKeys: function(){ with(this) {
assertEnumEqual([], $H({}).keys());
assertEnumEqual(['a'], $H(Fixtures.one).keys());
assertEnumEqual($w('a b c d'), $H(Fixtures.many).keys().sort());
assertEnumEqual($w('plus quad'), $H(Fixtures.functions).keys().sort());
}},
testValues: function(){ with(this) {
assertEnumEqual([], $H({}).values());
assertEnumEqual(['A#'], $H(Fixtures.one).values());
assertEnumEqual($w('A B C D#'), $H(Fixtures.many).values().sort());
assertEnumEqual($w('function function'),
$H(Fixtures.functions).values().map(function(i){ return typeof i }));
assertEqual(9, $H(Fixtures.functions).quad(3));
assertEqual(6, $H(Fixtures.functions).plus(3));
}},
testIndex: function(){ with(this) {
assertUndefined($H().index('foo'));
assert('a', $H(Fixtures.one).index('A#'));
assert('a', $H(Fixtures.many).index('A'));
assertUndefined($H(Fixtures.many).index('Z'))
var hash = $H({a:1,b:'2',c:1});
assert(['a','c'].include(hash.index(1)));
assertUndefined(hash.index('1'));
}},
testMerge: function(){ with(this) {
assertHashEqual(Fixtures.many, $H(Fixtures.many).merge());
assertHashEqual(Fixtures.many, $H(Fixtures.many).merge({}));
assertHashEqual(Fixtures.many, $H(Fixtures.many).merge($H()));
assertHashEqual({a:'A', b:'B', c:'C', d:'D#', aaa:'AAA' }, $H(Fixtures.many).merge({aaa: 'AAA'}));
assertHashEqual({a:'A#', b:'B', c:'C', d:'D#' }, $H(Fixtures.many).merge(Fixtures.one));
}},
testRemove: function(){ with(this) {
var hash = $H(Fixtures.many);
var values = hash.remove('b', 'c');
assertHashEqual({a:'A', d:'D#'}, hash);
assertEnumEqual($w('B C'), values);
}},
testToQueryString: function(){ with(this) {
assertEqual('', $H({}).toQueryString());
assertEqual('a=A%23', $H(Fixtures.one).toQueryString());
assertEqual('a=A&b=B&c=C&d=D%23', $H(Fixtures.many).toQueryString());
assertEqual("a=b&c", $H(Fixtures.value_undefined).toQueryString());
assertEqual("a=b&c", $H("a=b&c".toQueryParams()).toQueryString());
assertEqual("a=b&c=", $H(Fixtures.value_null).toQueryString());
assertEqual("a=b&c=0", $H(Fixtures.value_zero).toQueryString());
assertEqual("color=r&color=g&color=b", $H(Fixtures.multiple).toQueryString());
assertEqual("color=r&color=&color=g&color&color=0", $H(Fixtures.multiple_nil).toQueryString());
assertEqual("color=&color", $H(Fixtures.multiple_all_nil).toQueryString());
assertEqual("", $H(Fixtures.multiple_empty).toQueryString());
assertEqual("stuff%5B%5D=%24&stuff%5B%5D=a&stuff%5B%5D=%3B", $H(Fixtures.multiple_special).toQueryString());
assertHashEqual(Fixtures.multiple_special, $H(Fixtures.multiple_special).toQueryString().toQueryParams());
var danger = $w("_each=E collect=C inject=I keys=K map=M values=V");
assertEnumEqual(danger, Hash.toQueryString(Fixtures.dangerous).split('&').sort());
assertEnumEqual(danger, $H(Fixtures.dangerous).toQueryString().split('&').sort());
}},
testInspect: function(){ with(this) {
assertEqual('#<Hash:{}>', $H({}).inspect());
assertEqual("#<Hash:{'a': 'A#'}>", $H(Fixtures.one).inspect());
assertEqual("#<Hash:{'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D#'}>", $H(Fixtures.many).inspect());
}},
testToJSON: function(){ with(this) {
assertEqual('{\"b\": [false, true], \"c\": {\"a\": \"hello!\"}}',
$H({'b': [undefined, false, true, undefined], c: {a: 'hello!'}}).toJSON());
assertEqual('E', eval('(' + $H(Fixtures.dangerous).toJSON() + ')')._each);
}}
}, 'testlog');
// ]]>
</script>
</body>
</html>