/*
* yocto-reader - A light-weight RSS reader aggregator prototype, version 0.2
* (http://yocto-reader.flouzo.net/)
*
* Copyright (C) 2007 Loic Dachary (loic@dachary.org)
* Copyright (C) 2007 Chandan Kudige (chandan@nospam.kudige.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
var initCallbackPassed = false;
function testAPIInit() {
FR_init(function(){initCallbackPassed = true;});
assertEquals("0.0.0", true, initCallbackPassed);
}
function testAPISubscription() {
FR_init();
var i,j,k;
var allfeeds = FR_allFeeds();
var savedAllfeeds = $.clone(allfeeds);
var count = allfeeds.length;
var existingFeed1 = allfeeds[0]; // first feed
var existingFeed2 = allfeeds[count/2]; // middle feed
var existingFeed3 = allfeeds[count-1]; // last feed
// Test to make sure isFeedSubscribed works
assert("0.0.1", !FR_isFeedSubscribed(TEST_FEED1));
// Test adding existing feed, with corner cases
FR_addFeed(existingFeed1);
assert("0.0.2", FR_allFeeds() == allfeeds);
FR_addFeed(existingFeed2);
assert("0.1", FR_allFeeds() == allfeeds);
FR_addFeed(existingFeed3);
assert("0.2", FR_allFeeds() == allfeeds);
// Test adding a new feed
FR_addFeed(TEST_FEED1);
assertEquals("0.3", FR_allFeeds().length, count+1);
assert("0.4", FR_isFeedSubscribed(TEST_FEED1));
for (i=0; i= 0);
assert("1.0.1", $.indexOf(all,'language') >= 0);
assert("1.0.2", $.indexOf(all,'comedy') >= 0);
assert("1.0.3", $.indexOf(all,'technology') >= 0);
assert("1.0.4", $.indexOf(all,'slashdot') < 0);
assertEquals("1.1.0", TEST_FOLDER3, FR_folderForFeed(TEST_FEED3)[0]);
assertEquals("1.1.1", TEST_FOLDER4, FR_folderForFeed(TEST_FEED4)[0]);
// Put new feeds in folders
FR_addFeed(TEST_FEED1);
FR_addFeed(TEST_FEED2);
assert("1.2.0", FR_folderForFeed(TEST_FEED1) == null);
assert("1.2.1", FR_folderForFeed(TEST_FEED2) == null);
FR_moveToFolder(TEST_FEED1, TEST_FOLDER1);
assertEquals("1.3.1", TEST_FOLDER1, FR_folderForFeed(TEST_FEED1)[0]);
FR_moveToFolder(TEST_FEED2, TEST_FOLDER2);
assertEquals("1.3.2", TEST_FOLDER2, FR_folderForFeed(TEST_FEED2)[0]);
all = FR_allFolders();
assert("1.4.0", $.indexOf(all,'news') >= 0);
assert("1.4.1", $.indexOf(all,'language') >= 0);
assert("1.4.2", $.indexOf(all,'comedy') >= 0);
assert("1.4.3", $.indexOf(all,'technology') >= 0);
assert("1.4.4", $.indexOf(all,TEST_FOLDER2) >= 0);
assert("1.4.5", $.indexOf(all,TEST_FOLDER1) >= 0);
FR_removeFromFolder(TEST_FEED2, TEST_FOLDER1);
assertEquals("1.5", TEST_FOLDER2, FR_folderForFeed(TEST_FEED2)[0]);
FR_removeFromFolder(TEST_FEED2, TEST_FOLDER2);
assertEquals("1.6", undefined, FR_folderForFeed(TEST_FEED2));
FR_moveToFolder(TEST_FEED2, TEST_FOLDER1);
var feeds = FR_feedsInFolder(TEST_FOLDER1);
assertEquals("1.7", 2, feeds.length);
assert("1.8", $.indexOf(feeds,TEST_FEED1) >= 0);
assert("1.9", $.indexOf(feeds,TEST_FEED2) >= 0);
// Test copying feeds to multiple folders
feeds = FR_feedsInFolder(TEST_FOLDER2);
assert("1.10", $.indexOf(feeds, TEST_FEED1) < 0);
FR_copyToFolder(TEST_FEED1, TEST_FOLDER2);
var folders = FR_folderForFeed(TEST_FEED1);
assertEquals("1.10.0", 2, folders.length);
assert("1.10.1", $.indexOf(folders, TEST_FOLDER1)>= 0);
assert("1.10.2", $.indexOf(folders, TEST_FOLDER2)>= 0);
feeds = FR_feedsInFolder(TEST_FOLDER2);
assert("1.10.3", $.indexOf(feeds, TEST_FEED1) >= 0);
FR_removeFromFolder(TEST_FEED1, TEST_FOLDER1);
var folders = FR_folderForFeed(TEST_FEED1);
assertEquals("1.11.0", 1, folders.length);
assert("1.11.1", $.indexOf(folders, TEST_FOLDER1) < 0);
assert("1.11.2", $.indexOf(folders, TEST_FOLDER2)>= 0);
FR_removeFeed(TEST_FEED1);
var folders = FR_folderForFeed(TEST_FEED1);
assertEquals("1.11.13", undefined, folders);
FR_copyToFolder(TEST_FOLDER1, TEST_FEED2);
assertEquals("1.11.14", TEST_FOLDER1, FR_folderForFeed(TEST_FEED2)[0]);
}
function testAPITags() {
FR_init();
var all = FR_allTags();
// change these cases if default database is changed
// Test tags of existing feeds
assert("2.0.0", $.indexOf(all,'tag1') >= 0);
assert("2.0.1", $.indexOf(all,'tag2') >= 0);
assert("2.0.2", $.indexOf(all,'tag3') >= 0);
assert("2.0.3", $.indexOf(all,'tag4') >= 0);
assert("2.0.4", $.indexOf(all,'tag5') >= 0);
assert("2.0.5", $.indexOf(all,'tag6') < 0);
// Multiple tags for same item
var item3tags = FR_tagsForItem('item3');
assertEquals("2.1.0", 3, item3tags.length);
assert("2.1.1", $.indexOf(FR_tagsForItem('item3'),'tag1') >= 0);
assert("2.1.2", $.indexOf(FR_tagsForItem('item3'),'tag3') >= 0);
assert("2.1.4", $.indexOf(FR_tagsForItem('item3'),'tag5') >= 0);
// negative case
assert("2.1.3", $.indexOf(FR_tagsForItem('item3'),'tag4') < 0);
assertEquals("2.1.4", FR_tagsForItem('item4').length, 1);
assert("2.1.5", $.indexOf(FR_tagsForItem('item4'),'tag2') >= 0);
assert("2.1.6", $.indexOf(FR_tagsForItem('item4'),'tag1') < 0);
// Tag new items
assert("2.2.0", !FR_tagsForItem('newitem1').length);
assert("2.2.1", !FR_tagsForItem('newitem2').length);
FR_tagItem('newitem1', TEST_TAG1);
assertEquals("2.3.1", FR_tagsForItem('newitem1')[0], TEST_TAG1);
FR_tagItem('newitem2', TEST_TAG2);
assertEquals("2.3.2", FR_tagsForItem('newitem2')[0], TEST_TAG2);
all = FR_allTags();
// Ensure changes are reflected in the API
assert("2.4.0", $.indexOf(all,'tag1') >= 0);
assert("2.4.1", $.indexOf(all,'tag2') >= 0);
assert("2.4.2", $.indexOf(all,'tag3') >= 0);
// Check tag that doesnt belong to an item
assert("2.4.3", $.indexOf(all,'tag6') < 0);
assert("2.4.4", $.indexOf(all,TEST_TAG2) >= 0);
assert("2.4.5", $.indexOf(all,TEST_TAG1) >= 0);
// Untag items
FR_untagItem('newitem2', TEST_TAG1);
assertEquals("2.5", FR_tagsForItem('newitem2')[0], TEST_TAG2);
FR_untagItem('newitem2', TEST_TAG2);
assert("2.6", !FR_tagsForItem('newitem2').length);
// Same tag for multiple items
FR_tagItem('newitem2', TEST_TAG1);
var feeds = FR_taggedItems(TEST_TAG1);
// Tag times
var ts = FR_taggedTime('newitem2', TEST_TAG1);
assert("2.6.1", ts > 0);
assertEquals("2.7", feeds.length, 2);
assert("2.8", $.indexOf(feeds,'newitem1') >= 0);
assert("2.9", $.indexOf(feeds,'newitem2') >= 0);
assert("2.9", $.indexOf(feeds,'newitem3') < 0);
FR_untagAllForItem('newitem2');
assertEquals("2.10", 0, FR_tagsForItem('newitem2').length);
}
function testAPIBrands() {
FR_init();
var brands = FR_allBrands();
assertEquals("3.0.0", brands.length, 2);
assertEquals("3.0.1", brands[0].brand, 'starred');
assertEquals("3.0.2", brands[1].brand, 'shared');
// Multiple brands for same item
assertEquals("3.1.0", true, FR_isItemBranded('item3', 'starred'));
assertEquals("3.1.1", true, FR_isItemBranded('item3', 'read'));
// negative case
assertEquals("3.1.2", false, FR_isItemBranded('item3', 'shared'));
// Multiple items for same brand
assertEquals("3.1.3", true, FR_isItemBranded('item3', 'starred'));
assertEquals("3.1.4", true, FR_isItemBranded('item1', 'starred'));
// negative case
assertEquals("3.1.5", false, FR_isItemBranded('item2', 'starred'));
// List of branded items
var items = FR_brandedItems('read');
assertEquals("3.1.6", 2, items.length);
assert("3.1.7", $.indexOf(items,'item3') >= 0);
assert("3.1.8", $.indexOf(items,'item5') >= 0);
// negative case
assert("3.1.9", $.indexOf(items,'item4') < 0);
// Brand new items
assertEquals("3.2.0", false, FR_isItemBranded('newitem1', 'shared'));
assertEquals("3.2.1", false, FR_isItemBranded('newitem2', 'shared'));
FR_brandItem('newitem1', 'shared');
assertEquals("3.3.1", true, FR_isItemBranded('newitem1', 'shared'));
FR_brandItem('newitem2', 'shared');
assertEquals("3.3.2", true, FR_isItemBranded('newitem2', 'shared'));
// Branding time
var ts = FR_brandedTime('newitem2', 'shared');
assert("3.3.3", ts>0);
// Unbrand items
FR_unbrandItem('newitem2', 'starred');
assertEquals("3.4.1", true, FR_isItemBranded('newitem2', 'shared'));
FR_unbrandItem('newitem2', 'shared');
assertEquals("3.4.2", false, FR_isItemBranded('newitem2', 'shared'));
}
function testAPIStarred() {
FR_init();
var starred = FR_getStarredItems();
assertEquals("4.0.0", 2, starred.length);
assert("4.0.1", $.indexOf(starred,'item3') >= 0);
assert("4.0.2", $.indexOf(starred,'item1') >= 0);
// negative case
assert("4.0.3", $.indexOf(starred,'item2') < 0);
// Test default values
assertEquals("4.1.0", true, FR_isStarred('item3'));
assertEquals("4.1.1", true, FR_isStarred('item1'));
// negative case
assertEquals("4.1.2", false, FR_isStarred('item2'));
// Star new items
assertEquals("4.2.0", false, FR_isStarred('newitem1'));
assertEquals("4.2.1", false, FR_isStarred('newitem2'));
FR_starItem('newitem1');
assertEquals("4.3.1", true, FR_isStarred('newitem1'));
FR_starItem('newitem2');
assertEquals("4.3.2", true, FR_isStarred('newitem2'));
// Starred time
var ts = FR_starredTime('newitem2');
assert("4.3.3", ts>0);
// Unstar items
FR_unshareItem('newitem2');
assertEquals("4.4.1", true, FR_isStarred('newitem2'));
FR_unstarItem('newitem2');
assertEquals("4.4.2", false, FR_isStarred('newitem2'));
}
function testAPIShared() {
FR_init();
var shared = FR_getSharedItems();
assertEquals("5.0.0", 2, shared.length);
assert("5.0.1", $.indexOf(shared,'item4') >= 0);
assert("5.0.2", $.indexOf(shared,'item5') >= 0);
// negative case
assert("5.0.3", $.indexOf(shared,'item1') < 0);
// Test default values
assertEquals("5.1.0", true, FR_isShared('item4'));
assertEquals("5.1.1", true, FR_isShared('item5'));
// negative case
assertEquals("5.1.2", false, FR_isShared('item2'));
// Star new items
assertEquals("5.2.0", false, FR_isShared('newitem1'));
assertEquals("5.2.1", false, FR_isShared('newitem2'));
FR_shareItem('newitem1');
assertEquals("5.3.1", true, FR_isShared('newitem1'));
FR_shareItem('newitem2');
assertEquals("5.3.2", true, FR_isShared('newitem2'));
// Shared time
var ts = FR_sharedTime('newitem2');
assert("5.3.3", ts>0);
// Unstar items
FR_unstarItem('newitem2');
assertEquals("5.4.1", true, FR_isShared('newitem2'));
FR_unshareItem('newitem2');
assertEquals("5.4.2", false, FR_isShared('newitem2'));
}
function testAPIRead() {
FR_init();
var read = FR_getReadItems();
assertEquals("6.0.0", 2, read.length);
assert("6.0.1", $.indexOf(read,'item3') >= 0);
assert("6.0.2", $.indexOf(read,'item5') >= 0);
// negative case
assert("6.0.3", $.indexOf(read,'item1') < 0);
// Test default values
assertEquals("6.1.0", true, FR_isItemRead('item3'));
assertEquals("6.1.1", true, FR_isItemRead('item5'));
// negative case
assertEquals("6.1.2", false, FR_isItemRead('item2'));
// Set new items as read
assertEquals("6.2.0", false, FR_isItemRead('newitem1'));
assertEquals("6.2.1", false, FR_isItemRead('newitem2'));
FR_setItemRead('newitem1');
assertEquals("6.3.1", true, FR_isItemRead('newitem1'));
FR_setItemRead('newitem2');
assertEquals("6.3.2", true, FR_isItemRead('newitem2'));
// Read time
var ts = FR_itemReadTime('newitem2');
assert("6.3.3", ts>0);
// Unset read
FR_unshareItem('newitem2');
assertEquals("6.4.1", true, FR_isItemRead('newitem2'));
FR_setItemUnread('newitem2');
assertEquals("6.4.2", false, FR_isItemRead('newitem2'));
}
function testAPIFeedInfo() {
FR_init();
var feedinfo = FR_feedInfo(TEST_FEED3);
assertEquals("7.0", TEST_TITLE3, feedinfo.title);
assertEquals("7.1", TEST_FEED3, feedinfo.feed);
FR_cacheFeed("testfeed1", 'testtitle1');
var info = FR_feedInfo('testfeed1');
assertEquals("7.2", 'testfeed1', info.feed);
assertEquals("7.2", 'testtitle1', info.title);
// Now for the stats
var stats = FR_getStats();
assertEquals("7.3", FRV_sampleTrends, stats);
}
function testAPIProperties() {
FR_init();
// Non existant property
assertEquals("9.0", null, FR_getProperty('prop1'));
// Set a property
FR_setProperty('prop1', 'value1');
// Verify the property
assertEquals("9.1", 'value1', FR_getProperty('prop1'));
// modify a property
FR_setProperty('prop1', 'value2');
// Verify the property
assertEquals("9.2", 'value2', FR_getProperty('prop1'));
}
function testAPILogin() {
FR_init();
var info = FR_loginInfo();
assertEquals("10.0", 'dummy@gmail.com', info.id);
assertEquals("10.1", '0', info.lastlogin);
assertEquals("10.2", 'Big Dummy', info.name);
var shareurl = FR_getShareURL();
assert("10.3", shareurl != null);
}
function testAPIMisc() {
var tip1 = FR_getTips();
var tip2 = FR_getTips(2);
}
$.merge(testlist, [
'testAPIInit',
'testAPISubscription',
'testAPIFolders',
'testAPITags',
'testAPIBrands',
'testAPIStarred',
'testAPIShared',
'testAPIRead',
'testAPIFeedInfo',
'testAPIProperties',
'testAPILogin',
'testAPIMisc'
]);