michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://services-sync/engines.js"); michael@0: Cu.import("resource://services-sync/service.js"); michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: function PetrolEngine() {} michael@0: PetrolEngine.prototype.name = "petrol"; michael@0: michael@0: function DieselEngine() {} michael@0: DieselEngine.prototype.name = "diesel"; michael@0: michael@0: function DummyEngine() {} michael@0: DummyEngine.prototype.name = "dummy"; michael@0: michael@0: function ActualEngine() {} michael@0: ActualEngine.prototype = {__proto__: Engine.prototype, michael@0: name: 'actual'}; michael@0: michael@0: add_test(function test_basics() { michael@0: _("We start out with a clean slate"); michael@0: michael@0: let manager = new EngineManager(Service); michael@0: michael@0: let engines = manager.getAll(); michael@0: do_check_eq(engines.length, 0); michael@0: do_check_eq(manager.get('dummy'), undefined); michael@0: michael@0: _("Register an engine"); michael@0: manager.register(DummyEngine); michael@0: let dummy = manager.get('dummy'); michael@0: do_check_true(dummy instanceof DummyEngine); michael@0: michael@0: engines = manager.getAll(); michael@0: do_check_eq(engines.length, 1); michael@0: do_check_eq(engines[0], dummy); michael@0: michael@0: _("Register an already registered engine is ignored"); michael@0: manager.register(DummyEngine); michael@0: do_check_eq(manager.get('dummy'), dummy); michael@0: michael@0: _("Register multiple engines in one go"); michael@0: manager.register([PetrolEngine, DieselEngine]); michael@0: let petrol = manager.get('petrol'); michael@0: let diesel = manager.get('diesel'); michael@0: do_check_true(petrol instanceof PetrolEngine); michael@0: do_check_true(diesel instanceof DieselEngine); michael@0: michael@0: engines = manager.getAll(); michael@0: do_check_eq(engines.length, 3); michael@0: do_check_neq(engines.indexOf(petrol), -1); michael@0: do_check_neq(engines.indexOf(diesel), -1); michael@0: michael@0: _("Retrieve multiple engines in one go"); michael@0: engines = manager.get(["dummy", "diesel"]); michael@0: do_check_eq(engines.length, 2); michael@0: do_check_neq(engines.indexOf(dummy), -1); michael@0: do_check_neq(engines.indexOf(diesel), -1); michael@0: michael@0: _("getEnabled() only returns enabled engines"); michael@0: engines = manager.getEnabled(); michael@0: do_check_eq(engines.length, 0); michael@0: michael@0: petrol.enabled = true; michael@0: engines = manager.getEnabled(); michael@0: do_check_eq(engines.length, 1); michael@0: do_check_eq(engines[0], petrol); michael@0: michael@0: dummy.enabled = true; michael@0: diesel.enabled = true; michael@0: engines = manager.getEnabled(); michael@0: do_check_eq(engines.length, 3); michael@0: michael@0: _("Unregister an engine by name"); michael@0: manager.unregister('dummy'); michael@0: do_check_eq(manager.get('dummy'), undefined); michael@0: engines = manager.getAll(); michael@0: do_check_eq(engines.length, 2); michael@0: do_check_eq(engines.indexOf(dummy), -1); michael@0: michael@0: _("Unregister an engine by value"); michael@0: // manager.unregister() checks for instanceof Engine, so let's make one: michael@0: manager.register(ActualEngine); michael@0: let actual = manager.get('actual'); michael@0: do_check_true(actual instanceof ActualEngine); michael@0: do_check_true(actual instanceof Engine); michael@0: michael@0: manager.unregister(actual); michael@0: do_check_eq(manager.get('actual'), undefined); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: