dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
518 lines (486 loc) • 19.9 kB
JavaScript
dojo.provide("dojox.atom.tests.io.module");
dojo.require("dojox.atom.io.model");
dojo.require("dojox.atom.io.Connection");
dojo.require("dojox.data.dom");
dojo.require("dojo.date.stamp");
dojo.require("dojo.date");
doh.register("dojox.atom.tests.io.module", [
// Public utility functions
// dojox.atom.io.model.util.createDate
function checkCreateDate(t){
var node = document.createElement("div");
var knownDate = "2007-08-06T20:00:00-04:00";
var date = dojo.date.stamp.fromISOString(knownDate);
//Make sure this function handles creating dates right with spaces and such in the text.
node.innerHTML = " " + knownDate + " ";
var dateWithSpaces = dojox.atom.io.model.util.createDate(node);
var res = dojo.date.compare(dateWithSpaces, date);
t.t(res === 0);
},
// dojox.atom.io.model.util.escapeHtml
function checkEscapeHTML(t){
var original = "<html><head><title>This is a \"Test Title\"</title></head><body class=\"tundra\">Woo hoo, this is an awesome & exciting test case!</body></html>";
var escaped = dojox.atom.io.model.util.escapeHtml(original);
var expected = "<html><head><title>This is a "Test Title"</title></head><body class="tundra">Woo hoo, this is an awesome & exciting test case!</body></html>";
t.is(expected, escaped);
},
// dojox.atom.io.model.util.unEscapeHtml
function checkUnEscapeHtml(t){
var original = "<html><head><title>This is a "Test Title"</title></head><body class="tundra">Woo hoo, this is an awesome & exciting test case!</body></html>";
var unescaped = dojox.atom.io.model.util.unEscapeHtml(original);
var expected = "<html><head><title>This is a \"Test Title\"</title></head><body class=\"tundra\">Woo hoo, this is an awesome & exciting test case!</body></html>";
t.is(expected, unescaped);
t.is("<", dojox.atom.io.model.util.unEscapeHtml("&lt;"));
},
// dojox.atom.io.model.util.getNodename
function checkGetNodename(t){
var node = document.createElement("div");
t.is("div", dojox.atom.io.model.util.getNodename(node).toLowerCase());
node = dojox.data.dom.createDocument("<root><first/><second/><third/></root>").firstChild;
t.is("root", dojox.atom.io.model.util.getNodename(node));
var n = node.firstChild;
dojo.forEach(["first", "second", "third"], function(name){
t.is(name, dojox.atom.io.model.util.getNodename(n));
node.removeChild(n);
n = node.firstChild;
});
},
// Feed parsing, feed attributes (title, id, etc.) and functions, including all generic AtomItem methods
// Incidently, also tests AtomIO.getFeed success, as well as all members of the Category, Content, Link,
// and Person classes.
{
name: "checkFeed",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(feed){
var i;
// regular callback
// Feed variables
t.is('Example.com', feed.title.value);
feed.setTitle('Example.com Atom Feed', 'text');
t.is('Example.com Atom Feed', feed.title.value);
t.is('Example.com\'s Sample Feed', feed.subtitle.value);
t.is('Copyright Example.com', feed.rights);
t.is('http://example.com/samplefeed.xml', feed.id);
t.is(dojo.date.stamp.fromISOString('2007-08-07T20:00:00-05:00'), feed.updated);
// AtomItem methods
feed.addNamespace('http://www.test.com');
t.is({}, feed.name_spaces);
feed.addNamespace('', 'test');
t.is({}, feed.name_spaces);
feed.addNamespace('http://www.test.com', 'test');
t.is({'test': 'http://www.test.com'}, feed.name_spaces);
t.is(null, feed.authors);
feed.addAuthor('John');
feed.addAuthor('Matt', 'matt@example.com');
feed.addAuthor('Joe', 'joe@example.com', 'http://joe.example.com');
t.t(dojo.isArray(feed.authors));
t.t(feed.authors.length === 3);
t.is(null, feed.contributors);
feed.addContributor('Sam');
feed.addContributor('Dave', 'Dave@example.com');
feed.addContributor('Harry', 'harry@example.com', 'http://harry.example.com');
t.t(dojo.isArray(feed.contributors));
t.t(feed.contributors.length === 3);
t.t(dojo.isArray(feed.links));
t.t(feed.links.length === 2);
feed.removeLink('http://example.com/', 'alternate');
t.t(feed.links.length === 1);
feed.addLink('http://www.example.com/', 'alternate', 'en', 'Example.com', 'text/html');
t.t(feed.links.length === 2);
feed.addLink('http://test.example.com/', '', 'en', 'Example.com', 'text/html');
t.t(feed.links.length === 3);
feed.removeBasicLinks();
t.t(feed.links.length === 2);
t.is(null, feed.categories);
feed.addCategory("scheme", "term", "label");
feed.addCategory("scheme", "term2", "label2");
feed.addCategory("scheme2", "term", "label");
t.t(dojo.isArray(feed.categories));
t.t(feed.categories.length === 3);
var c = feed.getCategories("scheme");
t.t(c.length === 2);
c = feed.getCategories("scheme2");
t.t(c.length === 1);
feed.removeCategories("scheme", "term2");
t.t(feed.categories.length === 2);
feed.removeCategories("scheme", "term");
t.t(feed.categories.length === 1);
feed.removeCategories("scheme2", "term");
t.t(feed.categories.length === 0);
t.is(null, feed.extensions);
t.is([], feed.getExtensions());
feed.addExtension('nameSpace', 'element', [], 'A Test Element', 'sns');
feed.addExtension('nameSpace', 'element2', [], 'Another Test Element', 'sns');
feed.addExtension('anotherNameSpace', 'element', [], 'A Test Element', 'asns');
t.t(feed.extensions.length === 3);
t.t(feed.getExtensions('nameSpace').length === 2);
t.t(feed.getExtensions('nameSpace', 'element').length === 1);
t.t(feed.getExtensions('anotherNameSpace', 'element').length === 1);
t.t(feed.getExtensions('sns').length === 2);
feed.removeExtensions('anotherNameSpace', 'element');
feed.removeExtensions('sns', 'element2');
t.t(feed.getExtensions('anotherNameSpace').length === 0);
t.t(feed.getExtensions('sns').length === 1);
// Feed methods
t.t(feed.accept('title'));
t.t(feed.accept('entry'));
t.f(feed.accept('workspace'));
var e = feed.getFirstEntry();
t.f(e === null);
t.t(e.id === 'http://example.com/samplefeed.xml/entry/1');
t.t(feed.entries.length === 6);
feed.removeEntry(e);
t.t(feed.entries.length === 5);
t.t(feed.getEntry('http://example.com/samplefeed.xml/entry/1') === null);
e = feed.getFirstEntry();
t.t(e.id === 'http://example.com/samplefeed.xml/entry/2');
e = feed.getEntry('http://example.com/samplefeed.xml/entry/4');
t.f(e === null);
t.t(e.title.value === 'Test Entry #4');
e = new dojox.atom.io.model.Entry();
t.e(Error, feed, 'addEntry', [e]);
t.t(feed.entries.length === 5);
e.id = 'http://example.com/samplefeed.xml/newentry/1';
feed.addEntry(e);
t.t(feed.entries.length === 6);
var entries = [];
for(i=2; i<5; i++){
e = new dojox.atom.io.model.Entry();
e.id = 'http://example.com/samplefeed.xml/newentry/'+i;
entries.push(e);
}
feed.setEntries(entries);
t.t(feed.entries.length === 9);
e = feed.getSelfHref();
t.t(e === 'http://www.example.com/samplefeed.xml');
e = feed.createEntry();
t.t(e.feedUrl === 'http://www.example.com/samplefeed.xml');
for(i=2; i<7; i++){
e = feed.getEntry('http://example.com/samplefeed.xml/entry/'+i);
feed.removeEntry(e);
}
t.t(feed.entries.length === 4);
//Make this test work in different timezones.
var isoString = dojo.date.stamp.toISOString(dojo.date.stamp.fromISOString('2007-08-07T20:00:00-05:00'));
var str = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<feed xmlns=\"http://www.w3.org/2005/Atom\" xmlns:test=\"http://www.test.com\">\n<id>http://example.com/samplefeed.xml</id>\n<title type=\"text\" >Example.com Atom Feed</title>\n<rights>Copyright Example.com</rights>\n"
str +="<updated>" + isoString + "</updated>\n<subtitle type=\"text\" >Example.com's Sample Feed</subtitle>\n<author>\n\t<name>John</name>\n</author>\n<author>\n\t<name>Matt</name>\n\t<email>matt@example.com</email>\n</author>\n<author>\n\t<name>Joe</name>\n\t<email>joe@example.com</email>\n\t<uri>http://joe.example.com</uri>\n</author>\n<contributor>\n\t<name>Sam</name>\n</contributor>\n<contributor>\n\t<name>Dave</name>\n\t<email>Dave@example.com</email>\n</contributor>\n<contributor>\n\t<name>Harry</name>\n\t<email>harry@example.com</email>\n\t<uri>http://harry.example.com</uri>\n</contributor>\n<sns:element xmlns='nameSpace'>A Test Element</sns:element>\n<entry>\n<id>http://example.com/samplefeed.xml/newentry/1</id>\n</entry>\n<entry>\n<id>http://example.com/samplefeed.xml/newentry/2</id>\n</entry>\n<entry>\n<id>http://example.com/samplefeed.xml/newentry/3</id>\n</entry>\n<entry>\n<id>http://example.com/samplefeed.xml/newentry/4</id>\n</entry>\n</feed>";
t.t(feed.toString() == str);
d.callback(true);
}, function(e){
// error callback
console.debug(e);
d.errback("Feed fetching failed");
});
return d;
}
},
// Entry parsing, entry functions that are unique (not AtomItem)
// Incidently, also tests success of AtomIO.getEntry
{
name: "checkEntry",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeedEdit.xml').toString(), function(feed){
t.is('Example.com', feed.title.value);
var e = feed.createEntry();
var str = e.getEditHref();
t.t(str === null);
e = feed.getFirstEntry();
str = e.getEditHref();
t.t(str === null);
e = feed.getEntry('http://example.com/samplefeedEdit.xml/entry/10');
str = e.getEditHref();
t.t(str === 'http://example.com/samplefeedEdit.xml/entry/edit/10');
d.callback(true);
}, function(){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},
// Entry parsing, entry functions that are unique (not AtomItem)
// Incidently, also tests success of AtomIO.getEntry
{
name: "checkXmlEntry",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.io', 'sampleFeedXMLContent.xml'), function(feed){
try{
t.is('Example.com', feed.title.value);
var e = feed.getFirstEntry();
t.t(e.title.value == "Test Entry #1");
var c = e.content.value;
c = dojo.trim(c);
t.t(c.indexOf("<rootNode ") === 0);
d.callback(true);
}catch(err){
d.errback(err);
}
}, function(){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},
{
name: "checkEntry_preventCache",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection(false, true);
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeedEdit.xml').toString(), function(feed){
t.is('Example.com', feed.title.value);
var e = feed.createEntry();
var str = e.getEditHref();
t.t(str === null);
e = feed.getFirstEntry();
str = e.getEditHref();
t.t(str === null);
e = feed.getEntry('http://example.com/samplefeedEdit.xml/entry/10');
str = e.getEditHref();
t.t(str === 'http://example.com/samplefeedEdit.xml/entry/edit/10');
d.callback(true);
}, function(){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},
// AtomIO tests
{
name: "checkAtomIOGetFeedFail",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefee.xml').toString(), function(feed){
d.errback("Feed fetching succeeded when it should've failed");
}, function(error, args){
// error callback
t.t(error.name === 'Error');
t.t(error.status === 404);
d.callback(true);
});
return d;
}
},{
name: "checkAtomIOGetFeedSuccess",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(feed){
// Feed Fetching succeeded
t.t(feed.title.value === 'Example.com');
d.callback(true);
}, function(error, args){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},{
name: "checkAtomIOGetEntryFail",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.io', 'sampleEntr.xml').toString(), function(entry){
d.errback("Feed fetching succeeded when it should've failed");
}, function(error, args){
// error callback
t.t(error.name === 'Error');
t.t(error.status === 404);
d.callback(true);
});
return d;
}
},{
name: "checkAtomIOGetEntrySuccess",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.io', 'sampleEntry.xml').toString(), function(entry){
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/sampleEntry.xml/entry/1');
d.callback(true);
}, function(error, args){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},{
name: "checkAtomIOGetEntryFeedSuccess",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
// Using getEntry on a Feed URL yields the first Entry in the Feed.
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
d.callback(true);
}, function(error, args){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},{
name: "checkGetService",
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getService(dojo.moduleUrl('dojox.atom.tests.io', 'service.xml').toString(), function(service, domNode){
var collection = service.getCollection("http://example.com/feed");
t.t(collection[0].href === 'http://example.com/feed');
t.t(collection[0].title === 'Test Collection');
d.callback(true);
}, function(error, args){
// error callback
d.errback("Service fetching failed");
});
return d;
}
},{
name: "checkAtomIOUpdateEntrySuccess",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
// Using getEntry on a Feed URL yields the first Entry in the Feed.
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'app.php'));
entry.setTitle('<h1>New Editable Title!</h1>', 'xhtml');
atomio.updateEntry(entry, function(e, dom, args){
t.t(e.title.value === '<h1>New Editable Title!</h1>');
t.t(e.id === 'http://example.com/samplefeed.xml/entry/1');
d.callback(true);
}, function(error, args){
d.errback("Updating entry failed");
});
}, function(error, args){
// error callback
d.errback("Feed fetching failed");
});
return d;
}
},{
name: "checkAtomIOUpdateEntryFail",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
// Using getEntry on a Feed URL yields the first Entry in the Feed.
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php'));
entry.setTitle('<h1>New Editable Title!</h1>', 'xhtml');
atomio.updateEntry(entry, function(e, dom, args){
d.errback("Updating entry succeeded");
}, function(error, args){
d.callback(true);
});
}, function(error, args){
// error callback
d.errback("Updating entry failed.");
});
return d;
}
},{
name: "checkAtomIOAddEntrySuccess",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var entry = new dojox.atom.io.model.Entry();
entry.setTitle('Test Editable Entry #1', 'text');
entry.addAuthor('Test Person', 'test@example.com');
entry.content = new dojox.atom.io.model.Content('content', 'This is the content of my test new entry!', null, 'text');
var atomio = new dojox.atom.io.Connection();
atomio.addEntry(entry, dojo.moduleUrl('dojox.atom.tests.io', 'app.php').toString(), function(entry, url){
t.t(entry.title.value === 'Test Editable Entry #1');
t.t(url === 'http://example.com/samplefeed.xml/entry/10');
d.callback(true);
}, function(error, args){
// error callback
d.errback("Adding entry failed.");
});
return d;
}
},{
name: "checkAtomIOAddEntryFail",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var entry = new dojox.atom.io.model.Entry();
// Missing title, author
entry.content = new dojox.atom.io.model.Content('content', 'This is the content of my test new entry!', null, 'text');
var atomio = new dojox.atom.io.Connection();
atomio.addEntry(entry, dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php').toString(), function(entry, url){
// error callback
d.errback("Adding entry succeeded when it shouldn't!");
}, function(error, args){
d.callback(true);
});
return d;
}
},{
name: "checkAtomIODeleteEntrySuccess",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
// Using getEntry on a Feed URL yields the first Entry in the Feed.
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'app.php'));
atomio.deleteEntry(entry, function(result){
if (result) {
d.callback(true);
}else{
d.errback("Deleting entry failed");
}
}, function(error, args){
d.errback("Deleting entry failed");
});
}, function(error, args){
// error callback
d.errback("Retrieving the entry failed.");
});
return d;
}
},{
name: "checkAtomIODeleteEntryFail",
timeout: 5000,
runTest: function(t){
var d = new doh.Deferred();
var atomio = new dojox.atom.io.Connection();
atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
// Using getEntry on a Feed URL yields the first Entry in the Feed.
t.t(entry.title.value === 'Test Entry #1');
t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php'));
atomio.deleteEntry(entry, function(result){
if (result) {
d.errback("Deleting entry succeeded but it shouldn't have");
}else{
d.errback("The callback was called but it shouldn't have");
}
}, function(error, args){
d.callback(true);
});
}, function(error, args){
// error callback
d.errback("Retrieving the entry failed.");
});
return d;
}
}
]);