|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://services-sync/engines.js"); |
|
5 Cu.import("resource://services-sync/service.js"); |
|
6 |
|
7 function run_test() { |
|
8 run_next_test(); |
|
9 } |
|
10 |
|
11 function PetrolEngine() {} |
|
12 PetrolEngine.prototype.name = "petrol"; |
|
13 |
|
14 function DieselEngine() {} |
|
15 DieselEngine.prototype.name = "diesel"; |
|
16 |
|
17 function DummyEngine() {} |
|
18 DummyEngine.prototype.name = "dummy"; |
|
19 |
|
20 function ActualEngine() {} |
|
21 ActualEngine.prototype = {__proto__: Engine.prototype, |
|
22 name: 'actual'}; |
|
23 |
|
24 add_test(function test_basics() { |
|
25 _("We start out with a clean slate"); |
|
26 |
|
27 let manager = new EngineManager(Service); |
|
28 |
|
29 let engines = manager.getAll(); |
|
30 do_check_eq(engines.length, 0); |
|
31 do_check_eq(manager.get('dummy'), undefined); |
|
32 |
|
33 _("Register an engine"); |
|
34 manager.register(DummyEngine); |
|
35 let dummy = manager.get('dummy'); |
|
36 do_check_true(dummy instanceof DummyEngine); |
|
37 |
|
38 engines = manager.getAll(); |
|
39 do_check_eq(engines.length, 1); |
|
40 do_check_eq(engines[0], dummy); |
|
41 |
|
42 _("Register an already registered engine is ignored"); |
|
43 manager.register(DummyEngine); |
|
44 do_check_eq(manager.get('dummy'), dummy); |
|
45 |
|
46 _("Register multiple engines in one go"); |
|
47 manager.register([PetrolEngine, DieselEngine]); |
|
48 let petrol = manager.get('petrol'); |
|
49 let diesel = manager.get('diesel'); |
|
50 do_check_true(petrol instanceof PetrolEngine); |
|
51 do_check_true(diesel instanceof DieselEngine); |
|
52 |
|
53 engines = manager.getAll(); |
|
54 do_check_eq(engines.length, 3); |
|
55 do_check_neq(engines.indexOf(petrol), -1); |
|
56 do_check_neq(engines.indexOf(diesel), -1); |
|
57 |
|
58 _("Retrieve multiple engines in one go"); |
|
59 engines = manager.get(["dummy", "diesel"]); |
|
60 do_check_eq(engines.length, 2); |
|
61 do_check_neq(engines.indexOf(dummy), -1); |
|
62 do_check_neq(engines.indexOf(diesel), -1); |
|
63 |
|
64 _("getEnabled() only returns enabled engines"); |
|
65 engines = manager.getEnabled(); |
|
66 do_check_eq(engines.length, 0); |
|
67 |
|
68 petrol.enabled = true; |
|
69 engines = manager.getEnabled(); |
|
70 do_check_eq(engines.length, 1); |
|
71 do_check_eq(engines[0], petrol); |
|
72 |
|
73 dummy.enabled = true; |
|
74 diesel.enabled = true; |
|
75 engines = manager.getEnabled(); |
|
76 do_check_eq(engines.length, 3); |
|
77 |
|
78 _("Unregister an engine by name"); |
|
79 manager.unregister('dummy'); |
|
80 do_check_eq(manager.get('dummy'), undefined); |
|
81 engines = manager.getAll(); |
|
82 do_check_eq(engines.length, 2); |
|
83 do_check_eq(engines.indexOf(dummy), -1); |
|
84 |
|
85 _("Unregister an engine by value"); |
|
86 // manager.unregister() checks for instanceof Engine, so let's make one: |
|
87 manager.register(ActualEngine); |
|
88 let actual = manager.get('actual'); |
|
89 do_check_true(actual instanceof ActualEngine); |
|
90 do_check_true(actual instanceof Engine); |
|
91 |
|
92 manager.unregister(actual); |
|
93 do_check_eq(manager.get('actual'), undefined); |
|
94 |
|
95 run_next_test(); |
|
96 }); |
|
97 |