mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-16 12:30:13 +01:00
142 lines
5.6 KiB
JavaScript
142 lines
5.6 KiB
JavaScript
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||
|
* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* License.
|
||
|
*
|
||
|
* The Original Code is Feed Parser Unit Tests.
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is Robert Sayre.
|
||
|
*
|
||
|
* Portions created by the Initial Developer are Copyright (C) 2005
|
||
|
* the Initial Developer. All Rights Reserved.
|
||
|
*
|
||
|
* Contributor(s):
|
||
|
*
|
||
|
* Alternatively, the contents of this file may be used under the terms of
|
||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||
|
* of those above. If you wish to allow use of your version of this file only
|
||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||
|
* use your version of this file under the terms of the MPL, indicate your
|
||
|
* decision by deleting the provisions above and replace them with the notice
|
||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||
|
* the provisions above, a recipient may use your version of this file under
|
||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK *****/
|
||
|
|
||
|
// shell.js
|
||
|
// This file sets up the unit test environment by building an array of files
|
||
|
// to be tested. It assumes it lives in a folder adjacent to the a folder
|
||
|
// called 'xml', where the testcases live.
|
||
|
//
|
||
|
// The directory layout looks something like this:
|
||
|
//
|
||
|
// tests/ *shell.js*
|
||
|
// |
|
||
|
// - test.js
|
||
|
// |
|
||
|
// - xml/ -- rss1/...
|
||
|
// |
|
||
|
// -- rss2/...
|
||
|
// |
|
||
|
// -- atom/testcase.xml
|
||
|
|
||
|
function trimString(s)
|
||
|
{
|
||
|
return(s.replace(/^\s+/,'').replace(/\s+$/,''));
|
||
|
}
|
||
|
|
||
|
var tests = new Array();
|
||
|
const nsIDirectoryServiceProvider = Components.interfaces.nsIDirectoryServiceProvider;
|
||
|
const nsIDirectoryServiceProvider_CONTRACTID = "@mozilla.org/file/directory_service;1";
|
||
|
const ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
|
||
|
|
||
|
// find the current directory containing our test XML
|
||
|
var dirServiceProvider = Components.classes[nsIDirectoryServiceProvider_CONTRACTID].getService(nsIDirectoryServiceProvider);
|
||
|
var persistent = new Object();
|
||
|
var topDir = dirServiceProvider.getFile("CurWorkD", persistent);
|
||
|
var entries = topDir.directoryEntries;
|
||
|
var xmlDir;
|
||
|
while(entries.hasMoreElements()){
|
||
|
xmlDir = entries.getNext();
|
||
|
xmlDir.QueryInterface(Components.interfaces.nsILocalFile);
|
||
|
if(xmlDir.leafName == "xml")
|
||
|
break;
|
||
|
else
|
||
|
xmlDir = null;
|
||
|
}
|
||
|
|
||
|
// if we got our xmldir, find our testcases
|
||
|
var testDir;
|
||
|
if(xmlDir){
|
||
|
entries = xmlDir.directoryEntries;
|
||
|
while(entries.hasMoreElements()){
|
||
|
testDir = entries.getNext();
|
||
|
testDir.QueryInterface(Components.interfaces.nsILocalFile);
|
||
|
if(testDir.exists() && testDir.isDirectory()){
|
||
|
var testfiles = testDir.directoryEntries;
|
||
|
while(testfiles.hasMoreElements()){ // inside an individual testdir, like "rss2"
|
||
|
var test = testfiles.getNext();
|
||
|
test.QueryInterface(Components.interfaces.nsILocalFile);
|
||
|
if(test.exists() && test.isFile()){
|
||
|
|
||
|
// Got a feed file, now we need to add it to our tests
|
||
|
// and parse out the Description and Expect headers.
|
||
|
// That lets us write one test.js file and keep the
|
||
|
// tests with the XML. Convenient method learned from
|
||
|
// Mark Pilgrim.
|
||
|
|
||
|
var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
|
||
|
.createInstance(Components.interfaces.nsIFileInputStream);
|
||
|
|
||
|
try{
|
||
|
// open an input stream from file
|
||
|
istream.init(test, 0x01, 0444, 0);
|
||
|
istream.QueryInterface(Components.interfaces.nsILineInputStream);
|
||
|
var line = {}, hasmore, testcase = {}, expectIndex, descIndex;
|
||
|
|
||
|
do {
|
||
|
hasmore = istream.readLine(line);
|
||
|
expectIndex = line.value.indexOf('Expect:');
|
||
|
descIndex = line.value.indexOf('Description:');
|
||
|
baseIndex = line.value.indexOf('Base:');
|
||
|
if(descIndex > -1)
|
||
|
testcase.desc = trimString(line.value.substring(line.value.indexOf(':')+1));
|
||
|
if(expectIndex > -1)
|
||
|
testcase.expect = trimString(line.value.substring(line.value.indexOf(':')+1));
|
||
|
if(baseIndex > -1)
|
||
|
testcase.base = ioService.newURI(trimString(line.value.substring(line.value.indexOf(':')+1)),null,null);
|
||
|
if(testcase.expect && testcase.desc){
|
||
|
// got our fields, let's add it to our array and break
|
||
|
testcase.path = xmlDir.leafName + '/' + testDir.leafName + '/' + test.leafName;
|
||
|
testcase.file = test;
|
||
|
tests.push(testcase);
|
||
|
break; // out of do-while
|
||
|
}
|
||
|
|
||
|
} while(hasmore);
|
||
|
|
||
|
}catch(e){
|
||
|
dump("FAILED! Error reading test case in file " + test.leafName + " " + e + "\n");
|
||
|
}finally{
|
||
|
istream.close();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
load('test.js');
|