diff --git a/tests/tests.js b/tests/tests.js index 7fffc41a..15dc7b1e 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -37,21 +37,45 @@ define(function (require) { equal(titleList.length, 4, "4 titles found, as requested"); var indexAbraham=-1; for (var i=0; i-1,"Title 'Abraham' found"); - var firstTitleName = titleList[0].name; - var secondTitleName = titleList[1].name; - // TODO : fix the algorithm, so that these tests can work - //equal(firstTitleName,"Abbasid_Caliphate","First article name is 'Abbasid_Caliphate'"); - //equal(secondTitleName,"Abortion","Second article name is 'Abortion'"); + var firstTitleName = "not found"; + var secondTitleName = "not found"; + if (titleList.length>=1 && titleList[0]) { + firstTitleName = titleList[0].name; + } + if (titleList.length>=2 && titleList[1]) { + secondTitleName = titleList[1].name; + } + equal(firstTitleName,"Abbasid_Caliphate","First article name is 'Abbasid_Caliphate'"); + equal(secondTitleName,"Abortion","Second article name is 'Abortion'"); start(); }; localArchive.getTitlesStartingAtOffset(0, 4, callbackFunction); }); + asyncTest("check findTitlesWithPrefix Am", function() { + var callbackFunction = function(titleList) { + ok(titleList && titleList.length>0,"At least one title is found"); + var firstTitleName = "not found"; + var secondTitleName = "not found"; + if (titleList.length>=1 && titleList[0]) { + firstTitleName = titleList[0].name; + } + if (titleList.length>=2 && titleList[1]) { + secondTitleName = titleList[1].name; + } + equal(firstTitleName,"Amazon_River","First article name is 'Amazon_River'"); + equal(secondTitleName,"American_Civil_War","Second article name is 'American_Civil_War'"); + equal(titleList.length,4,"4 titles should be found"); + start(); + }; + localArchive.findTitlesWithPrefix("Am", callbackFunction); + }); + //TODO check findTitlesWithPrefix // Create a title instance for the Article 'Abraham' diff --git a/www/js/lib/evopedia.js b/www/js/lib/evopedia.js index 4b9fa561..17f5058a 100644 --- a/www/js/lib/evopedia.js +++ b/www/js/lib/evopedia.js @@ -129,15 +129,13 @@ define(function(require) { } } if (newLineIndex == startIndex) { - // Enf of file reached + // End of file reached hi = mid; } else { - var normalizedTitle = remove_diacritics.normalizeString(utf8ByteArrayToString(byteArray,startIndex,newLineIndex)); - //alert("normalizedTitle = " + normalizedTitle + "lo = "+lo+" hi="+hi); - //alert("normalizedPrefix = " + normalizedPrefix); - if (normalizedTitle.localeCompare(normalizedPrefix) < 0) { - lo = mid; + var normalizedTitle = remove_diacritics.normalizeString(utf8ByteArrayToString(byteArray,startIndex,newLineIndex)).toLowerCase(); + if (normalizedTitle < normalizedPrefix) { + lo = mid + newLineIndex -1; } else { hi = mid; @@ -151,7 +149,7 @@ define(function(require) { else { if (lo > 0) { // Let lo point to the start of an entry - lo++; + lo++;lo++; } // We found the closest title at index lo callbackFunction(lo); @@ -184,13 +182,9 @@ define(function(require) { reader.onload = function(e) { var binaryTitleFile = e.target.result; var byteArray = new Uint8Array(binaryTitleFile); - // Look for the index of the next NewLine - var newLineIndex=0; - while (newLineIndex=0) { - titleList[titleNumber] = title; - } + titleList[titleNumber] = title; titleNumber++; i=newLineIndex+1; } @@ -237,7 +225,7 @@ define(function(require) { alert('Title file read cancelled'); }; var currentLocalArchiveInstance = this; - var normalizedTitleName = remove_diacritics.normalizeString(titleName); + var normalizedTitleName = remove_diacritics.normalizeString(titleName).toLowerCase(); this.recursivePrefixSearch(reader, normalizedTitleName, 0, titleFileSize, function(titleOffset) { currentLocalArchiveInstance.getTitleAtOffset(titleOffset, callbackFunction); }); @@ -268,8 +256,11 @@ define(function(require) { alert('Title file read cancelled'); }; var currentLocalArchiveInstance = this; - var normalizedPrefix = remove_diacritics.normalizeString(prefix).replace(" ","_"); + var normalizedPrefix = remove_diacritics.normalizeString(prefix).replace(" ","_").toLowerCase(); this.recursivePrefixSearch(reader, normalizedPrefix, 0, titleFileSize, function(titleOffset) { + // TODO Skip the titles that do not start with the prefix + // TODO use a normalizer to compare the strings + //if (title && title.getReadableName().toLowerCase().indexOf(prefix.toLowerCase())==0) { currentLocalArchiveInstance.getTitlesStartingAtOffset(titleOffset, 50, callbackFunction); }); };