mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-01-08 22:32:05 +00:00
98 lines
2.8 KiB
JavaScript
98 lines
2.8 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* test_xml.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/test_xml.js*
|
|
* |
|
|
* - head.js
|
|
* |
|
|
* - xml/ -- rss1/...
|
|
* |
|
|
* -- rss2/...
|
|
* |
|
|
* -- atom/testcase.xml
|
|
*
|
|
* To add more tests, just include the file in the xml subfolder and add its name to xpcshell.ini
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
// Listens to feeds being loaded. Runs the tests built into the feed afterwards to veryify they
|
|
// were parsed correctly.
|
|
function FeedListener(testcase) {
|
|
this.testcase = testcase;
|
|
}
|
|
|
|
FeedListener.prototype = {
|
|
handleResult: function(result) {
|
|
var feed = result.doc;
|
|
try {
|
|
do_print("Testing feed " + this.testcase.file.path);
|
|
Assert.ok(isIID(feed, Ci.nsIFeed), "Has feed interface");
|
|
|
|
if (!eval(this.testcase.expect)) {
|
|
Assert.ok(false, "expect failed for " + this.testcase.desc);
|
|
} else {
|
|
Assert.ok(true, "expect passed for " + this.testcase.desc);
|
|
}
|
|
} catch(e) {
|
|
Assert.ok(false, "expect failed for " + this.testcase.desc + " ---- " + e.message);
|
|
}
|
|
|
|
run_next_test();
|
|
}
|
|
}
|
|
|
|
function createTest(data) {
|
|
return function() {
|
|
var uri;
|
|
|
|
if (data.base == null) {
|
|
uri = NetUtil.newURI('http://example.org/' + data.path);
|
|
} else {
|
|
uri = data.base;
|
|
}
|
|
|
|
do_print("Testing " + data.file.leafName);
|
|
|
|
var parser = Cc["@mozilla.org/feed-processor;1"].createInstance(Ci.nsIFeedProcessor);
|
|
var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
|
|
stream.init(data.file, 0x01, parseInt("0444", 8), 0);
|
|
parser.listener = new FeedListener(data);
|
|
|
|
try {
|
|
parser.parseFromStream(stream, uri);
|
|
} catch(e) {
|
|
Assert.ok(false, "parse failed for " + data.file.leafName + " ---- " + e.message);
|
|
// If the parser failed, the listener won't be notified, run the next test here.
|
|
run_next_test();
|
|
} finally {
|
|
stream.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
function run_test() {
|
|
// Get the 'xml' directory in here
|
|
var topDir = Services.dirsvc.get("CurWorkD", Ci.nsIFile);
|
|
topDir.append("xml");
|
|
|
|
// Every file in the test dir contains an encapulated RSS "test". Iterate through
|
|
// them all and add them to the test runner.
|
|
iterateDir(topDir, true, file => {
|
|
var data = readTestData(file);
|
|
add_test(createTest(data));
|
|
});
|
|
|
|
// Now run!
|
|
run_next_test();
|
|
}
|