source: Dev/trunk/src/client/dojox/atom/tests/io/module.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 19.4 KB
Line 
1dojo.provide("dojox.atom.tests.io.module");
2dojo.require("dojox.atom.io.model");
3dojo.require("dojox.atom.io.Connection");
4dojo.require("dojox.data.dom");
5dojo.require("dojo.date.stamp");
6dojo.require("dojo.date");
7
8doh.register("dojox.atom.tests.io.module", [
9        // Public utility functions
10        // dojox.atom.io.model.util.createDate
11        function checkCreateDate(t){
12                var node = document.createElement("div");
13                var knownDate = "2007-08-06T20:00:00-04:00";
14                var date = dojo.date.stamp.fromISOString(knownDate);
15
16                //Make sure this function handles creating dates right with spaces and such in the text.
17                node.innerHTML = "  " + knownDate + "  ";
18                var dateWithSpaces = dojox.atom.io.model.util.createDate(node);
19
20                var res = dojo.date.compare(dateWithSpaces, date);
21                t.t(res === 0);
22        },
23
24        // dojox.atom.io.model.util.escapeHtml
25        function checkEscapeHTML(t){
26                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>";
27                var escaped = dojox.atom.io.model.util.escapeHtml(original);
28                var expected = "&lt;html&gt;&lt;head&gt;&lt;title&gt;This is a &quot;Test Title&quot;&lt;/title&gt;&lt;/head&gt;&lt;body class=&quot;tundra&quot;&gt;Woo hoo, this is an awesome &amp; exciting test case!&lt;/body&gt;&lt;/html&gt;";
29                t.is(expected, escaped);
30        },
31       
32        // dojox.atom.io.model.util.unEscapeHtml
33        function checkUnEscapeHtml(t){
34                var original = "&lt;html&gt;&lt;head&gt;&lt;title&gt;This is a &quot;Test Title&quot;&lt;/title&gt;&lt;/head&gt;&lt;body class=&quot;tundra&quot;&gt;Woo hoo, this is an awesome &amp; exciting test case!&lt;/body&gt;&lt;/html&gt;";
35                var unescaped = dojox.atom.io.model.util.unEscapeHtml(original);
36                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>";
37                t.is(expected, unescaped);
38                t.is("&lt;", dojox.atom.io.model.util.unEscapeHtml("&amp;lt;"));
39        },
40
41        // dojox.atom.io.model.util.getNodename
42        function checkGetNodename(t){
43                var node = document.createElement("div");
44                t.is("div", dojox.atom.io.model.util.getNodename(node).toLowerCase());
45               
46                node = dojox.data.dom.createDocument("<root><first/><second/><third/></root>").firstChild;
47                t.is("root", dojox.atom.io.model.util.getNodename(node));
48                var n = node.firstChild;
49                dojo.forEach(["first", "second", "third"], function(name){
50                        t.is(name, dojox.atom.io.model.util.getNodename(n));
51                        node.removeChild(n);
52                        n = node.firstChild;
53                });
54        },
55
56        // Feed parsing, feed attributes (title, id, etc.) and functions, including all generic AtomItem methods
57        // Incidently, also tests AtomIO.getFeed success, as well as all members of the Category, Content, Link,
58        // and Person classes.
59        {
60                name: "checkFeed",
61                runTest: function(t){
62                        var d = new doh.Deferred();
63                        var atomio = new dojox.atom.io.Connection();
64                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(feed){
65                                var i;
66                                // regular callback
67                                // Feed variables
68                                t.is('Example.com', feed.title.value);
69                                feed.setTitle('Example.com Atom Feed', 'text');
70                                t.is('Example.com Atom Feed', feed.title.value);
71                                t.is('Example.com\'s Sample Feed', feed.subtitle.value);
72                                t.is('Copyright Example.com', feed.rights);
73                                t.is('http://example.com/samplefeed.xml', feed.id);
74                                t.is(dojo.date.stamp.fromISOString('2007-08-07T20:00:00-05:00'), feed.updated);
75
76                                // AtomItem methods
77                                feed.addNamespace('http://www.test.com');
78                                t.is({}, feed.name_spaces);
79                                feed.addNamespace('', 'test');
80                                t.is({}, feed.name_spaces);
81                                feed.addNamespace('http://www.test.com', 'test');
82                                t.is({'test': 'http://www.test.com'}, feed.name_spaces);
83
84                                t.is(null, feed.authors);
85                                feed.addAuthor('John');
86                                feed.addAuthor('Matt', 'matt@example.com');
87                                feed.addAuthor('Joe', 'joe@example.com', 'http://joe.example.com');
88                                t.t(dojo.isArray(feed.authors));
89                                t.t(feed.authors.length === 3);
90
91                                t.is(null, feed.contributors);
92                                feed.addContributor('Sam');
93                                feed.addContributor('Dave', 'Dave@example.com');
94                                feed.addContributor('Harry', 'harry@example.com', 'http://harry.example.com');
95                                t.t(dojo.isArray(feed.contributors));
96                                t.t(feed.contributors.length === 3);
97
98                                t.t(dojo.isArray(feed.links));
99                                t.t(feed.links.length === 2);
100                                feed.removeLink('http://example.com/', 'alternate');
101                                t.t(feed.links.length === 1);
102                                feed.addLink('http://www.example.com/', 'alternate', 'en', 'Example.com', 'text/html');
103                                t.t(feed.links.length === 2);
104                                feed.addLink('http://test.example.com/', '', 'en', 'Example.com', 'text/html');
105                                t.t(feed.links.length === 3);
106                                feed.removeBasicLinks();
107                                t.t(feed.links.length === 2);
108
109                                t.is(null, feed.categories);
110                                feed.addCategory("scheme", "term", "label");
111                                feed.addCategory("scheme", "term2", "label2");
112                                feed.addCategory("scheme2", "term", "label");
113                                t.t(dojo.isArray(feed.categories));
114                                t.t(feed.categories.length === 3);
115                                var c = feed.getCategories("scheme");
116                                t.t(c.length === 2);
117                                c = feed.getCategories("scheme2");
118                                t.t(c.length === 1);
119                                feed.removeCategories("scheme", "term2");
120                                t.t(feed.categories.length === 2);
121                                feed.removeCategories("scheme", "term");
122                                t.t(feed.categories.length === 1);
123                                feed.removeCategories("scheme2", "term");
124                                t.t(feed.categories.length === 0);
125
126                                t.is(null, feed.extensions);
127                                t.is([], feed.getExtensions());
128                                feed.addExtension('nameSpace', 'element', [], 'A Test Element', 'sns');
129                                feed.addExtension('nameSpace', 'element2', [], 'Another Test Element', 'sns');
130                                feed.addExtension('anotherNameSpace', 'element', [], 'A Test Element', 'asns');
131                                t.t(feed.extensions.length === 3);
132                                t.t(feed.getExtensions('nameSpace').length === 2);
133                                t.t(feed.getExtensions('nameSpace', 'element').length === 1);
134                                t.t(feed.getExtensions('anotherNameSpace', 'element').length === 1);
135                                t.t(feed.getExtensions('sns').length === 2);
136                                feed.removeExtensions('anotherNameSpace', 'element');
137                                feed.removeExtensions('sns', 'element2');
138                                t.t(feed.getExtensions('anotherNameSpace').length === 0);
139                                t.t(feed.getExtensions('sns').length === 1);
140
141                                // Feed methods
142                                t.t(feed.accept('title'));
143                                t.t(feed.accept('entry'));
144                                t.f(feed.accept('workspace'));
145
146                                var e = feed.getFirstEntry();
147                                t.f(e === null);
148                                t.t(e.id === 'http://example.com/samplefeed.xml/entry/1');
149                                t.t(feed.entries.length === 6);
150                                feed.removeEntry(e);
151                                t.t(feed.entries.length === 5);
152                                t.t(feed.getEntry('http://example.com/samplefeed.xml/entry/1') === null);
153                                e = feed.getFirstEntry();
154                                t.t(e.id === 'http://example.com/samplefeed.xml/entry/2');
155                                e = feed.getEntry('http://example.com/samplefeed.xml/entry/4');
156                                t.f(e === null);
157                                t.t(e.title.value === 'Test Entry #4');
158                                e = new dojox.atom.io.model.Entry();
159                                t.e(Error, feed, 'addEntry', [e]);
160                                t.t(feed.entries.length === 5);
161                                e.id = 'http://example.com/samplefeed.xml/newentry/1';
162                                feed.addEntry(e);
163                                t.t(feed.entries.length === 6);
164                                var entries = [];
165                                for(i=2; i<5; i++){
166                                        e = new dojox.atom.io.model.Entry();
167                                        e.id = 'http://example.com/samplefeed.xml/newentry/'+i;
168                                        entries.push(e);
169                                }
170                                feed.setEntries(entries);
171                                t.t(feed.entries.length === 9);
172                               
173                                e = feed.getSelfHref();
174                                t.t(e === 'http://www.example.com/samplefeed.xml');
175                                e = feed.createEntry();
176                                t.t(e.feedUrl === 'http://www.example.com/samplefeed.xml');
177                               
178
179                                for(i=2; i<7; i++){
180                                        e = feed.getEntry('http://example.com/samplefeed.xml/entry/'+i);
181                                        feed.removeEntry(e);
182                                }
183                                t.t(feed.entries.length === 4);
184
185                                //Make this test work in different timezones.
186                                var isoString = dojo.date.stamp.toISOString(dojo.date.stamp.fromISOString('2007-08-07T20:00:00-05:00'));
187                                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"
188                                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>";
189                                t.t(feed.toString() == str);
190
191                                d.callback(true);
192                        }, function(e){
193                                // error callback
194                                console.debug(e);
195                                d.errback("Feed fetching failed");
196                        });
197                        return d;
198                }
199        },
200
201        // Entry parsing, entry functions that are unique (not AtomItem)
202        // Incidently, also tests success of AtomIO.getEntry
203        {
204                name: "checkEntry",
205                runTest: function(t){
206                        var d = new doh.Deferred();
207                        var atomio = new dojox.atom.io.Connection();
208                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeedEdit.xml').toString(), function(feed){
209                                t.is('Example.com', feed.title.value);
210                                var e = feed.createEntry();
211                                var str = e.getEditHref();
212                                t.t(str === null);
213
214                                e = feed.getFirstEntry();
215                                str = e.getEditHref();
216                                t.t(str === null);
217
218                                e = feed.getEntry('http://example.com/samplefeedEdit.xml/entry/10');
219                                str = e.getEditHref();
220                                t.t(str === 'http://example.com/samplefeedEdit.xml/entry/edit/10');
221
222                                d.callback(true);
223                        }, function(){
224                                // error callback
225                                d.errback("Feed fetching failed");
226                        });
227                        return d;
228                }
229        },
230
231        // Entry parsing, entry functions that are unique (not AtomItem)
232        // Incidently, also tests success of AtomIO.getEntry
233        {
234                name: "checkXmlEntry",
235                runTest: function(t){
236                        var d = new doh.Deferred();
237                        var atomio = new dojox.atom.io.Connection();
238                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.io', 'sampleFeedXMLContent.xml'), function(feed){
239                                try{
240                                        t.is('Example.com', feed.title.value);
241                                        var e = feed.getFirstEntry();
242                                        t.t(e.title.value == "Test Entry #1");
243                                        var c = e.content.value;
244                                        c = dojo.trim(c);
245                                        t.t(c.indexOf("<rootNode ") === 0);
246                                        d.callback(true);
247                                }catch(err){
248                                        d.errback(err);
249                                }
250                        }, function(){
251                                // error callback
252                                d.errback("Feed fetching failed");
253                        });
254                        return d;
255                }
256        },
257
258        {
259                name: "checkEntry_preventCache",
260                runTest: function(t){
261                        var d = new doh.Deferred();
262                        var atomio = new dojox.atom.io.Connection(false, true);
263                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeedEdit.xml').toString(), function(feed){
264                                t.is('Example.com', feed.title.value);
265                                var e = feed.createEntry();
266                                var str = e.getEditHref();
267                                t.t(str === null);
268
269                                e = feed.getFirstEntry();
270                                str = e.getEditHref();
271                                t.t(str === null);
272
273                                e = feed.getEntry('http://example.com/samplefeedEdit.xml/entry/10');
274                                str = e.getEditHref();
275                                t.t(str === 'http://example.com/samplefeedEdit.xml/entry/edit/10');
276
277                                d.callback(true);
278                        }, function(){
279                                // error callback
280                        d.errback("Feed fetching failed");
281                        });
282                        return d;
283                }
284        },
285
286        // AtomIO tests
287        {
288                name: "checkAtomIOGetFeedFail",
289                runTest: function(t){
290                        var d = new doh.Deferred();
291                        var atomio = new dojox.atom.io.Connection();
292                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefee.xml').toString(), function(feed){
293                                d.errback("Feed fetching succeeded when it should've failed");
294                        }, function(error, args){
295                                // error callback
296                                t.t(error.name === 'Error');
297                                t.t(error.status === 404);
298                                d.callback(true);
299                        });
300                        return d;
301                }
302        },{
303                name: "checkAtomIOGetFeedSuccess",
304                runTest: function(t){
305                        var d = new doh.Deferred();
306                        var atomio = new dojox.atom.io.Connection();
307                        atomio.getFeed(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(feed){
308                                // Feed Fetching succeeded
309                                t.t(feed.title.value === 'Example.com');
310                                d.callback(true);
311                        }, function(error, args){
312                                // error callback
313                                d.errback("Feed fetching failed");
314                        });
315                        return d;
316                }
317        },{
318                name: "checkAtomIOGetEntryFail",
319                runTest: function(t){
320                        var d = new doh.Deferred();
321                        var atomio = new dojox.atom.io.Connection();
322                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.io', 'sampleEntr.xml').toString(), function(entry){
323                                d.errback("Feed fetching succeeded when it should've failed");
324                        }, function(error, args){
325                                // error callback
326                                t.t(error.name === 'Error');
327                                t.t(error.status === 404);
328                                d.callback(true);
329                        });
330                        return d;
331                }
332        },{
333                name: "checkAtomIOGetEntrySuccess",
334                runTest: function(t){
335                        var d = new doh.Deferred();
336                        var atomio = new dojox.atom.io.Connection();
337                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.io', 'sampleEntry.xml').toString(), function(entry){
338                                t.t(entry.title.value === 'Test Entry #1');
339                                t.t(entry.id === 'http://example.com/sampleEntry.xml/entry/1');
340                                d.callback(true);
341                        }, function(error, args){
342                                // error callback
343                                d.errback("Feed fetching failed");
344                        });
345                        return d;
346                }
347        },{
348                name: "checkAtomIOGetEntryFeedSuccess",
349                runTest: function(t){
350                        var d = new doh.Deferred();
351                        var atomio = new dojox.atom.io.Connection();
352                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
353                                // Using getEntry on a Feed URL yields the first Entry in the Feed.
354                                t.t(entry.title.value === 'Test Entry #1');
355                                t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
356                                d.callback(true);
357                        }, function(error, args){
358                                // error callback
359                                d.errback("Feed fetching failed");
360                        });
361                        return d;
362                }
363        },{
364                name: "checkGetService",
365                runTest: function(t){
366                        var d = new doh.Deferred();
367                        var atomio = new dojox.atom.io.Connection();
368                        atomio.getService(dojo.moduleUrl('dojox.atom.tests.io', 'service.xml').toString(), function(service, domNode){
369                                var collection = service.getCollection("http://example.com/feed");
370                                t.t(collection[0].href === 'http://example.com/feed');
371                                t.t(collection[0].title === 'Test Collection');
372                                d.callback(true);
373                        }, function(error, args){
374                                // error callback
375                                d.errback("Service fetching failed");
376                        });
377                        return d;
378                }
379        },{
380                name: "checkAtomIOUpdateEntrySuccess",
381                timeout: 5000,
382                runTest: function(t){
383                        var d = new doh.Deferred();
384                        var atomio = new dojox.atom.io.Connection();
385                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
386                                // Using getEntry on a Feed URL yields the first Entry in the Feed.
387                                t.t(entry.title.value === 'Test Entry #1');
388                                t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
389                                entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'app.php'));
390                                entry.setTitle('<h1>New Editable Title!</h1>', 'xhtml');
391                                atomio.updateEntry(entry, function(e, dom, args){
392                                        t.t(e.title.value === '<h1>New Editable Title!</h1>');
393                                        t.t(e.id === 'http://example.com/samplefeed.xml/entry/1');
394                                        d.callback(true);
395                                }, function(error, args){
396                                        d.errback("Updating entry failed");
397                                });
398                        }, function(error, args){
399                                // error callback
400                                d.errback("Feed fetching failed");
401                        });
402                        return d;
403                }
404        },{
405                name: "checkAtomIOUpdateEntryFail",
406                timeout: 5000,
407                runTest: function(t){
408                        var d = new doh.Deferred();
409                        var atomio = new dojox.atom.io.Connection();
410                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
411                                // Using getEntry on a Feed URL yields the first Entry in the Feed.
412                                t.t(entry.title.value === 'Test Entry #1');
413                                t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
414                                entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php'));
415                                entry.setTitle('<h1>New Editable Title!</h1>', 'xhtml');
416                                atomio.updateEntry(entry, function(e, dom, args){
417                                        d.errback("Updating entry succeeded");
418                                }, function(error, args){
419                                        d.callback(true);
420                                });
421                        }, function(error, args){
422                                // error callback
423                                d.errback("Updating entry failed.");
424                        });
425                        return d;
426                }
427        },{
428                name: "checkAtomIOAddEntrySuccess",
429                timeout: 5000,
430                runTest: function(t){
431                        var d = new doh.Deferred();
432                        var entry = new dojox.atom.io.model.Entry();
433                        entry.setTitle('Test Editable Entry #1', 'text');
434                        entry.addAuthor('Test Person', 'test@example.com');
435                        entry.content = new dojox.atom.io.model.Content('content', 'This is the content of my test new entry!', null, 'text');
436                        var atomio = new dojox.atom.io.Connection();
437                        atomio.addEntry(entry, dojo.moduleUrl('dojox.atom.tests.io', 'app.php').toString(), function(entry, url){
438                                t.t(entry.title.value === 'Test Editable Entry #1');
439                                t.t(url === 'http://example.com/samplefeed.xml/entry/10');
440                                d.callback(true);
441                        }, function(error, args){
442                                // error callback
443                                d.errback("Adding entry failed.");
444                        });
445                        return d;
446                }
447        },{
448                name: "checkAtomIOAddEntryFail",
449                timeout: 5000,
450                runTest: function(t){
451                        var d = new doh.Deferred();
452                        var entry = new dojox.atom.io.model.Entry();
453                        // Missing title, author
454                        entry.content = new dojox.atom.io.model.Content('content', 'This is the content of my test new entry!', null, 'text');
455                        var atomio = new dojox.atom.io.Connection();
456                        atomio.addEntry(entry, dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php').toString(), function(entry, url){
457                                // error callback
458                                d.errback("Adding entry succeeded when it shouldn't!");
459                        }, function(error, args){
460                                d.callback(true);
461                        });
462                        return d;
463                }
464        },{
465                name: "checkAtomIODeleteEntrySuccess",
466                timeout: 5000,
467                runTest: function(t){
468                        var d = new doh.Deferred();
469                        var atomio = new dojox.atom.io.Connection();
470                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
471                                // Using getEntry on a Feed URL yields the first Entry in the Feed.
472                                t.t(entry.title.value === 'Test Entry #1');
473                                t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
474                                entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'app.php'));
475                                atomio.deleteEntry(entry, function(result){
476                                        if (result) {
477                                                d.callback(true);
478                                        }else{
479                                                d.errback("Deleting entry failed");
480                                        }
481                                }, function(error, args){
482                                        d.errback("Deleting entry failed");
483                                });
484                        }, function(error, args){
485                                // error callback
486                                d.errback("Retreiving the entry failed.");
487                        });
488                        return d;
489                }
490        },{
491                name: "checkAtomIODeleteEntryFail",
492                timeout: 5000,
493                runTest: function(t){
494                        var d = new doh.Deferred();
495                        var atomio = new dojox.atom.io.Connection();
496                        atomio.getEntry(dojo.moduleUrl('dojox.atom.tests.widget', 'samplefeed.xml').toString(), function(entry){
497                                // Using getEntry on a Feed URL yields the first Entry in the Feed.
498                                t.t(entry.title.value === 'Test Entry #1');
499                                t.t(entry.id === 'http://example.com/samplefeed.xml/entry/1');
500                                entry.setEditHref(dojo.moduleUrl('dojox.atom.tests.io', 'appFail.php'));
501                                atomio.deleteEntry(entry, function(result){
502                                        if (result) {
503                                                d.errback("Deleting entry succeeded but it shouldn't have");
504                                        }else{
505                                                d.errback("The callback was called but it shouldn't have");
506                                        }
507                                }, function(error, args){
508                                                d.callback(true);
509                                });
510                        }, function(error, args){
511                                // error callback
512                                d.errback("Retreiving the entry failed.");
513                        });
514                        return d;
515                }
516        }
517]);
Note: See TracBrowser for help on using the repository browser.