can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
317 lines (310 loc) • 6.31 kB
JavaScript
define(["doh/main", "../hash", "../topic"], function(doh, hash, topic){
// utilities for the tests:
function setHash(h){
h = h || "";
location.replace('#'+h);
}
function getHash(){
var h = location.href, i = h.indexOf("#");
return (i >= 0) ? h.substring(i + 1) : "";
}
doh.register("tests.hash", [
// hash as an empty string.
{
name: "Getting an empty hash",
setUp: function(){
setHash();
},
runTest: function(t){
t.is('', hash());
}
},
{
name: "Setting an empty hash",
setUp: function(){
hash('');
},
runTest: function(t){
t.is('', getHash());
}
},
// hash as "test"
{
name: "Getting the hash of 'test'",
setUp: function(){
setHash('test');
},
runTest: function(t){
t.is('test', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to 'test'",
setUp: function(){
hash('test');
},
runTest: function(t){
t.is('test', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with spaces
{
name: "Getting the hash of 'test%20with%20spaces'",
setUp: function(){
setHash('test%20with%20spaces');
},
runTest: function(t){
t.is('test%20with%20spaces', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash of 'test%20with%20spaces'",
setUp: function(){
setHash('test%20with%20spaces');
},
runTest: function(t){
t.is('test%20with%20spaces', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with encoded hash
{
name: "Getting the hash of 'test%23with%23encoded%23hashes'",
setUp: function(){
setHash('test%23with%23encoded%23hashes');
},
runTest: function(t){
t.is('test%23with%23encoded%23hashes', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash of 'test%23with%23encoded%23hashes'",
setUp: function(){
setHash('test%23with%23encoded%23hashes');
},
runTest: function(t){
t.is('test%23with%23encoded%23hashes', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with plus character: test+with+pluses
{
name: "Getting the hash of 'test+with+pluses'",
setUp: function(){
setHash('test+with+pluses');
},
runTest: function(t){
t.is('test+with+pluses', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to 'test+with+pluses'",
setUp: function(){
hash('test+with+pluses');
},
runTest: function(t){
t.is('test+with+pluses', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with leading space
{
name: "Getting the hash of '%20leadingSpace'",
setUp: function(){
setHash('%20leadingSpace');
},
runTest: function(t){
t.is('%20leadingSpace', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to '%20leadingSpace'",
setUp: function(){
hash('%20leadingSpace');
},
runTest: function(t){
t.is('%20leadingSpace', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with trailing space:
{
name: "Getting the hash of 'trailingSpace%20'",
setUp: function(){
setHash('trailingSpace%20');
},
runTest: function(t){
t.is('trailingSpace%20', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to 'trailingSpace%20'",
setUp: function(){
hash('trailingSpace%20');
},
runTest: function(t){
t.is('trailingSpace%20', getHash());
},
tearDown: function(){
setHash();
}
},
// hash with underscores.
{
name: "Getting the hash of 'under_score'",
setUp: function(){
setHash('under_score');
},
runTest: function(t){
t.is('under_score', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to 'under_score'",
setUp: function(){
hash('under_score');
},
runTest: function(t){
t.is('under_score', getHash());
},
tearDown: function(){
setHash();
}
},
{
name: "Getting the hash of 'extra&instring'",
setUp: function(){
setHash("extra&instring");
},
runTest: function(t){
t.is("extra&instring", hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to 'extra&instring'",
setUp: function(){
hash('extra&instring');
},
runTest: function(t){
t.is('extra&instring', getHash());
},
tearDown: function(){
setHash();
}
},
{
name: "Getting the hash of 'extra?instring'",
setUp: function(){
setHash('extra?instring');
},
runTest: function(t){
t.is('extra?instring', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash of 'extra?instring'",
setUp: function(){
hash('extra?instring');
},
runTest: function(t){
t.is('extra?instring', getHash());
},
tearDown: function(){
setHash();
}
},
{
name: "Getting the hash resembling a query parameter ('?testa=3&testb=test')",
setUp: function(){
setHash('?testa=3&testb=test');
},
runTest: function(t){
t.is('?testa=3&testb=test', hash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash resembling a query parameter ('?testa=3&testb=test')",
setUp: function(){
hash('?testa=3&testb=test');
},
runTest: function(t){
t.is('?testa=3&testb=test', getHash());
},
tearDown: function(){
setHash();
}
},
{
name: "Setting the hash to '#leadingHash' should result in the hash being 'leadingHash'",
setUp: function(){
hash('#leadingHash');
},
runTest: function(t){
t.is('leadingHash', getHash());
},
tearDown: function(){
setHash();
}
},
{
_s: null, // used for the subscriber.
name: "Hash change publishes to '/dojo/hashchange'",
setUp: function(t){
setHash();
},
runTest: function(t){
var d = new doh.Deferred();
this._s = topic.subscribe('/dojo/hashchange', d.getTestCallback(function(value){
doh.assertEqual('test', value);
}));
hash('test');
return d;
},
tearDown: function(){
this._s.remove();
setHash();
}
}
]);
});