const Cc = Components.classes;
const Ci = Components.interfaces;

let ioService = Cc["@mozilla.org/network/io-service;1"]
                .getService(Ci.nsIIOService);
let resProt = ioService.getProtocolHandler("resource")
              .QueryInterface(Ci.nsIResProtocolHandler);

function run_test() {
    // Define a resource:// alias that points to another resource:// URI.
    let greModulesURI = ioService.newURI("resource://gre/modules/", null, null);
    resProt.setSubstitution("my-gre-modules", greModulesURI);

    // When we ask for the alias, we should not get the resource://
    // URI that we registered it for but the original file URI.
    let greFileSpec = ioService.newURI("modules/", null,
                                       resProt.getSubstitution("gre")).spec;
    let aliasURI = resProt.getSubstitution("my-gre-modules");
    do_check_eq(aliasURI.spec, greFileSpec);

    // Resolving URIs using the original resource path and the alias
    // should yield the same result.
    let greNetUtilURI = ioService.newURI("resource://gre/modules/NetUtil.jsm",
                                         null, null);
    let myNetUtilURI = ioService.newURI("resource://my-gre-modules/NetUtil.jsm",
                                        null, null);
    do_check_eq(resProt.resolveURI(greNetUtilURI),
                resProt.resolveURI(myNetUtilURI));
}
