// Run by: cd objdir; make -C netwerk/test/ xpcshell-tests // or: cd objdir; make SOLO_FILE="test_URIs2.js" -C netwerk/test/ check-one
// This is a clone of test_URIs.js, with a different set of test data in gTests. // The original test data in test_URIs.js was split between test_URIs and test_URIs2.js // because test_URIs.js was running for too long on slow platforms, causing // intermittent timeouts.
// Checks that the URIs satisfy equals(), in both possible orderings. // Also checks URI.equalsExceptRef(), because equal URIs should also be equal // when we ignore the ref. // // The third argument is optional. If the client passes a third argument // (e.g. todo_check_true), we'll use that in lieu of ok. function do_check_uri_eq(aURI1, aURI2, aCheckTrueFunc = ok) {
do_info("(uri equals check: '" + aURI1.spec + "' == '" + aURI2.spec + "')");
aCheckTrueFunc(aURI1.equals(aURI2));
do_info("(uri equals check: '" + aURI2.spec + "' == '" + aURI1.spec + "')");
aCheckTrueFunc(aURI2.equals(aURI1));
// (Only take the extra step of testing 'equalsExceptRef' when we expect the // URIs to really be equal. In 'todo' cases, the URIs may or may not be // equal when refs are ignored - there's no way of knowing in general.) if (aCheckTrueFunc == ok) {
do_check_uri_eqExceptRef(aURI1, aURI2, aCheckTrueFunc);
}
}
// Checks that the URIs satisfy equalsExceptRef(), in both possible orderings. // // The third argument is optional. If the client passes a third argument // (e.g. todo_check_true), we'll use that in lieu of ok. function do_check_uri_eqExceptRef(aURI1, aURI2, aCheckTrueFunc = ok) {
do_info( "(uri equalsExceptRef check: '" + aURI1.spec + "' == '" + aURI2.spec + "')"
);
aCheckTrueFunc(aURI1.equalsExceptRef(aURI2));
do_info( "(uri equalsExceptRef check: '" + aURI2.spec + "' == '" + aURI1.spec + "')"
);
aCheckTrueFunc(aURI2.equalsExceptRef(aURI1));
}
// Checks that the given property on aURI matches the corresponding property // in the test bundle (or matches some function of that corresponding property, // if aTestFunctor is passed in). function do_check_property(aTest, aURI, aPropertyName, aTestFunctor) { if (aTest[aPropertyName]) { var expectedVal = aTestFunctor
? aTestFunctor(aTest[aPropertyName])
: aTest[aPropertyName];
do_info( "testing that " +
aTest.spec + " throws or returns false " + "from equals(null)"
); // XXXdholbert At some point it'd probably be worth making this behavior // (throwing vs. returning false) consistent across URI implementations. var threw = false; var isEqualToNull; try {
isEqualToNull = URI.equals(null);
} catch (e) {
threw = true;
} Assert.ok(threw || !isEqualToNull);
// Check the various components
do_check_property(aTest, URI, "scheme");
do_check_property(aTest, URI, "prePath");
do_check_property(aTest, URI, "pathQueryRef");
do_check_property(aTest, URI, "query");
do_check_property(aTest, URI, "ref");
do_check_property(aTest, URI, "port");
do_check_property(aTest, URI, "username");
do_check_property(aTest, URI, "password");
do_check_property(aTest, URI, "host");
do_check_property(aTest, URI, "specIgnoringRef"); if ("hasRef" in aTest) {
do_info("testing hasref: " + aTest.hasRef + " vs " + URI.hasRef); Assert.equal(aTest.hasRef, URI.hasRef);
} if ("hasQuery" in aTest) {
do_info("testing hasQuery: " + aTest.hasQuery + " vs " + URI.hasQuery); Assert.equal(aTest.hasQuery, URI.hasQuery);
}
}
// Test that a given URI parses correctly when we add a given ref to the end function do_test_uri_with_hash_suffix(aTest, aSuffix) {
do_info("making sure caller is using suffix that starts with '#'"); Assert.equal(aSuffix[0], "#");
var origURI = NetUtil.newURI(aTest.spec); var testURI;
do_info( "testing " +
aTest.spec + " is equalExceptRef to self with '" +
aSuffix + "' appended"
);
do_check_uri_eqExceptRef(origURI, testURI);
Assert.equal(testURI.hasRef, true);
if (!origURI.ref) { // These tests fail if origURI has a ref
do_info( "testing cloneIgnoringRef on " +
testURI.spec + " is equal to no-ref version but not equal to ref version"
); var cloneNoRef = testURI.mutate().setRef("").finalize();
do_check_uri_eq(cloneNoRef, origURI); Assert.ok(!cloneNoRef.equals(testURI));
}
do_check_property(aTest, testURI, "scheme");
do_check_property(aTest, testURI, "prePath"); if (!origURI.ref) { // These don't work if it's a ref already because '+' doesn't give the right result
do_check_property(aTest, testURI, "pathQueryRef", function (aStr) { return aStr + aSuffix;
});
do_check_property(aTest, testURI, "ref", function () { return aSuffix.substr(1);
});
}
}
// Tests various ways of setting & clearing a ref on a URI. function do_test_mutate_ref(aTest, aSuffix) {
do_info("making sure caller is using suffix that starts with '#'"); Assert.equal(aSuffix[0], "#");
var refURIWithSuffix = NetUtil.newURI(aTest.spec + aSuffix); var refURIWithoutSuffix = NetUtil.newURI(aTest.spec);
var testURI = NetUtil.newURI(aTest.spec);
// First: Try setting .ref to our suffix
do_info( "testing that setting .ref on " +
aTest.spec + " to '" +
aSuffix + "' does what we expect"
);
testURI = testURI.mutate().setRef(aSuffix).finalize();
do_check_uri_eq(testURI, refURIWithSuffix);
do_check_uri_eqExceptRef(testURI, refURIWithoutSuffix);
// Now try setting .ref but leave off the initial hash (expect same result) var suffixLackingHash = aSuffix.substr(1); if (suffixLackingHash) { // (skip this our suffix was *just* a #)
do_info( "testing that setting .ref on " +
aTest.spec + " to '" +
suffixLackingHash + "' does what we expect"
);
testURI = testURI.mutate().setRef(suffixLackingHash).finalize();
do_check_uri_eq(testURI, refURIWithSuffix);
do_check_uri_eqExceptRef(testURI, refURIWithoutSuffix);
}
// Now, clear .ref (should get us back the original spec)
do_info( "testing that clearing .ref on " + testURI.spec + " does what we expect"
);
testURI = testURI.mutate().setRef("").finalize();
do_check_uri_eq(testURI, refURIWithoutSuffix);
do_check_uri_eqExceptRef(testURI, refURIWithSuffix);
if (!aTest.relativeURI) { // TODO: These tests don't work as-is for relative URIs.
// Now try setting .spec directly (including suffix) and then clearing .ref var specWithSuffix = aTest.spec + aSuffix;
do_info( "testing that setting spec to " +
specWithSuffix + " and then clearing ref does what we expect"
);
testURI = testURI.mutate().setSpec(specWithSuffix).setRef("").finalize();
do_check_uri_eq(testURI, refURIWithoutSuffix);
do_check_uri_eqExceptRef(testURI, refURIWithSuffix);
// XXX nsIJARURI throws an exception in SetPath(), so skip it for next part. if (!(testURI instanceof Ci.nsIJARURI)) { // Now try setting .pathQueryRef directly (including suffix) and then clearing .ref // (same as above, but with now with .pathQueryRef instead of .spec)
testURI = NetUtil.newURI(aTest.spec);
var pathWithSuffix = aTest.pathQueryRef + aSuffix;
do_info( "testing that setting path to " +
pathWithSuffix + " and then clearing ref does what we expect"
);
testURI = testURI
.mutate()
.setPathQueryRef(pathWithSuffix)
.setRef("")
.finalize();
do_check_uri_eq(testURI, refURIWithoutSuffix);
do_check_uri_eqExceptRef(testURI, refURIWithSuffix);
// Also: make sure that clearing .pathQueryRef also clears .ref
testURI = testURI.mutate().setPathQueryRef(pathWithSuffix).finalize();
do_info( "testing that clearing path from " +
pathWithSuffix + " also clears .ref"
);
testURI = testURI.mutate().setPathQueryRef("").finalize(); Assert.equal(testURI.ref, "");
}
}
}
// TEST MAIN FUNCTION // ------------------ function run_test() { // UTF-8 check - From bug 622981 // ASCII
let base = Services.io.newURI("http://example.org/xenia?");
let resolved = Services.io.newURI("?x", null, base);
let expected = Services.io.newURI("http://example.org/xenia?x");
do_info( "Bug 662981: ACSII - comparing " + resolved.spec + " and " + expected.spec
); Assert.ok(resolved.equals(expected));
// UTF-8 character "è" // Bug 622981 was triggered by an empty query string
base = Services.io.newURI("http://example.org/xènia?");
resolved = Services.io.newURI("?x", null, base);
expected = Services.io.newURI("http://example.org/xènia?x");
do_info( "Bug 662981: UTF8 - comparing " + resolved.spec + " and " + expected.spec
); Assert.ok(resolved.equals(expected));
gTests.forEach(function (aTest) { // Check basic URI functionality
do_test_uri_basic(aTest);
if (!aTest.fail) { // Try adding various #-prefixed strings to the ends of the URIs
gHashSuffixes.forEach(function (aSuffix) {
do_test_uri_with_hash_suffix(aTest, aSuffix); if (!aTest.immutable) {
do_test_mutate_ref(aTest, aSuffix);
}
});
// For URIs that we couldn't mutate above due to them being immutable: // Now we check that they're actually immutable. if (aTest.immutable) { Assert.ok(aTest.immutable);
}
}
});
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.