1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/feeds/test/shell.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,129 @@ 1.4 +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +// shell.js 1.10 +// This file sets up the unit test environment by building an array of files 1.11 +// to be tested. It assumes it lives in a folder adjacent to the a folder 1.12 +// called 'xml', where the testcases live. 1.13 +// 1.14 +// The directory layout looks something like this: 1.15 +// 1.16 +// tests/ *shell.js* 1.17 +// | 1.18 +// - test.js 1.19 +// | 1.20 +// - xml/ -- rss1/... 1.21 +// | 1.22 +// -- rss2/... 1.23 +// | 1.24 +// -- atom/testcase.xml 1.25 + 1.26 +function trimString(s) 1.27 +{ 1.28 + return(s.replace(/^\s+/,'').replace(/\s+$/,'')); 1.29 +} 1.30 + 1.31 +var tests = new Array(); 1.32 +const ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService); 1.33 + 1.34 +// find the directory containing our test XML 1.35 + 1.36 +if (0 < arguments.length) { 1.37 + 1.38 + // dir is specified on the command line 1.39 + 1.40 + var topDir = Components.classes["@mozilla.org/file/local;1"] 1.41 + .createInstance(Components.interfaces.nsILocalFile); 1.42 + 1.43 + topDir.initWithPath(arguments[0]); 1.44 +} 1.45 +else { 1.46 + const nsIDirectoryServiceProvider 1.47 + = Components.interfaces.nsIDirectoryServiceProvider; 1.48 + const nsIDirectoryServiceProvider_CONTRACTID 1.49 + = "@mozilla.org/file/directory_service;1"; 1.50 + 1.51 + var dirServiceProvider 1.52 + = Components.classes[nsIDirectoryServiceProvider_CONTRACTID] 1.53 + .getService(nsIDirectoryServiceProvider); 1.54 + 1.55 + var persistent = new Object(); 1.56 + 1.57 + var topDir = dirServiceProvider.getFile("CurWorkD", persistent); 1.58 +} 1.59 + 1.60 +var entries = topDir.directoryEntries; 1.61 +var xmlDir; 1.62 +while(entries.hasMoreElements()){ 1.63 + xmlDir = entries.getNext(); 1.64 + xmlDir.QueryInterface(Components.interfaces.nsILocalFile); 1.65 + if(xmlDir.leafName == "xml") 1.66 + break; 1.67 + else 1.68 + xmlDir = null; 1.69 +} 1.70 + 1.71 +// if we got our xmldir, find our testcases 1.72 +var testDir; 1.73 +if(xmlDir){ 1.74 + entries = xmlDir.directoryEntries; 1.75 + while(entries.hasMoreElements()){ 1.76 + testDir = entries.getNext(); 1.77 + testDir.QueryInterface(Components.interfaces.nsILocalFile); 1.78 + if(testDir.exists() && testDir.isDirectory()){ 1.79 + var testfiles = testDir.directoryEntries; 1.80 + while(testfiles.hasMoreElements()){ // inside an individual testdir, like "rss2" 1.81 + var test = testfiles.getNext(); 1.82 + test.QueryInterface(Components.interfaces.nsILocalFile); 1.83 + if(test.exists() && test.isFile()){ 1.84 + 1.85 + // Got a feed file, now we need to add it to our tests 1.86 + // and parse out the Description and Expect headers. 1.87 + // That lets us write one test.js file and keep the 1.88 + // tests with the XML. Convenient method learned from 1.89 + // Mark Pilgrim. 1.90 + 1.91 + var istream = Components.classes["@mozilla.org/network/file-input-stream;1"] 1.92 + .createInstance(Components.interfaces.nsIFileInputStream); 1.93 + 1.94 + try{ 1.95 + // open an input stream from file 1.96 + istream.init(test, 0x01, 0444, 0); 1.97 + istream.QueryInterface(Components.interfaces.nsILineInputStream); 1.98 + var line = {}, hasmore, testcase = {}, expectIndex, descIndex; 1.99 + 1.100 + do { 1.101 + hasmore = istream.readLine(line); 1.102 + expectIndex = line.value.indexOf('Expect:'); 1.103 + descIndex = line.value.indexOf('Description:'); 1.104 + baseIndex = line.value.indexOf('Base:'); 1.105 + if(descIndex > -1) 1.106 + testcase.desc = trimString(line.value.substring(line.value.indexOf(':')+1)); 1.107 + if(expectIndex > -1) 1.108 + testcase.expect = trimString(line.value.substring(line.value.indexOf(':')+1)); 1.109 + if(baseIndex > -1) 1.110 + testcase.base = ioService.newURI(trimString(line.value.substring(line.value.indexOf(':')+1)),null,null); 1.111 + if(testcase.expect && testcase.desc){ 1.112 + // got our fields, let's add it to our array and break 1.113 + testcase.path = xmlDir.leafName + '/' + testDir.leafName + '/' + test.leafName; 1.114 + testcase.file = test; 1.115 + tests.push(testcase); 1.116 + break; // out of do-while 1.117 + } 1.118 + 1.119 + } while(hasmore); 1.120 + 1.121 + }catch(e){ 1.122 + dump("FAILED! Error reading test case in file " + test.leafName + " " + e + "\n"); 1.123 + }finally{ 1.124 + istream.close(); 1.125 + } 1.126 + } 1.127 + } 1.128 + } 1.129 + } 1.130 +} 1.131 + 1.132 +load(topDir.path+'/test.js');