/* 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/. */

function run_test() {
    let ssvc = Components.classes["@mozilla.org/calendar/startup-service;1"]
                         .getService(Components.interfaces.nsIObserver);

    let first = {
        startup: function(aListener) {
            second.canStart = true;
            aListener.onResult(null, Cr.NS_OK);
        },
        shutdown: function(aListener) {
            ok(this.canStop);
            aListener.onResult(null, Cr.NS_OK);
        }
    };

    let second = {
        startup: function(aListener) {
            ok(this.canStart);
            aListener.onResult(null, Cr.NS_OK);
        },
        shutdown: function(aListener) {
            first.canStop = true;
            aListener.onResult(null, Cr.NS_OK);
        }
    };

    // Change the startup order so we can test our services
    let oldStartupOrder = ssvc.wrappedJSObject.getStartupOrder;
    ssvc.wrappedJSObject.getStartupOrder = function() {
        let origOrder = oldStartupOrder.call(this);

        let notify = origOrder[origOrder.length - 1];
        return [first, second, notify];
    };

    // Pretend a startup run
    ssvc.observe(null, "profile-after-change", null);
    ok(second.canStart);

    // Pretend a stop run
    ssvc.observe(null, "profile-before-change", null);
    ok(first.canStop);
}
