|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 MARIONETTE_TIMEOUT = 60000; |
|
5 MARIONETTE_HEAD_JS = 'head.js'; |
|
6 |
|
7 let number; |
|
8 let emergency; |
|
9 let outgoing; |
|
10 |
|
11 let testCase = 0; |
|
12 let expectedResults = [ |
|
13 ["112", true], |
|
14 ["911", true], |
|
15 ["0912345678", false], |
|
16 ["777", false], |
|
17 ]; |
|
18 |
|
19 function createGoldenCallListResult0(number, state) { |
|
20 // "outbound to xxxxxxxxxx : ringing" |
|
21 let padPattern = " "; |
|
22 let pad = padPattern.substring(0, padPattern.length - number.length); |
|
23 return "outbound to " + number + pad + " : " + state; |
|
24 } |
|
25 |
|
26 function dial() { |
|
27 log("Make an outgoing call."); |
|
28 |
|
29 telephony.dial(number).then(call => { |
|
30 outgoing = call; |
|
31 ok(outgoing); |
|
32 is(outgoing.number, number); |
|
33 is(outgoing.state, "dialing"); |
|
34 |
|
35 is(outgoing, telephony.active); |
|
36 is(telephony.calls.length, 1); |
|
37 is(telephony.calls[0], outgoing); |
|
38 |
|
39 outgoing.onalerting = function onalerting(event) { |
|
40 log("Received 'onalerting' call event."); |
|
41 is(outgoing, event.call); |
|
42 is(outgoing.state, "alerting"); |
|
43 is(outgoing.emergency, emergency); |
|
44 |
|
45 emulator.run("gsm list", function(result) { |
|
46 log("Call list is now: " + result); |
|
47 is(result[0], createGoldenCallListResult0(number, "ringing")); |
|
48 is(result[1], "OK"); |
|
49 answer(); |
|
50 }); |
|
51 }; |
|
52 }); |
|
53 } |
|
54 |
|
55 function answer() { |
|
56 log("Answering the call."); |
|
57 |
|
58 // We get no "connecting" event when the remote party answers the call. |
|
59 |
|
60 outgoing.onconnected = function onconnected(event) { |
|
61 log("Received 'connected' call event."); |
|
62 is(outgoing, event.call); |
|
63 is(outgoing.state, "connected"); |
|
64 is(outgoing.emergency, emergency); |
|
65 |
|
66 is(outgoing, telephony.active); |
|
67 |
|
68 emulator.run("gsm list", function(result) { |
|
69 log("Call list is now: " + result); |
|
70 is(result[0], createGoldenCallListResult0(number, "active")); |
|
71 is(result[1], "OK"); |
|
72 hangUp(); |
|
73 }); |
|
74 }; |
|
75 emulator.run("gsm accept " + number); |
|
76 } |
|
77 |
|
78 function hangUp() { |
|
79 log("Hanging up the call."); |
|
80 |
|
81 // We get no "disconnecting" event when the remote party terminates the call. |
|
82 |
|
83 outgoing.ondisconnected = function ondisconnected(event) { |
|
84 log("Received 'disconnected' call event."); |
|
85 is(outgoing, event.call); |
|
86 is(outgoing.state, "disconnected"); |
|
87 is(outgoing.emergency, emergency); |
|
88 |
|
89 is(telephony.active, null); |
|
90 is(telephony.calls.length, 0); |
|
91 |
|
92 emulator.run("gsm list", function(result) { |
|
93 log("Call list is now: " + result); |
|
94 is(result[0], "OK"); |
|
95 verifyNextEmergencyLabel(); |
|
96 }); |
|
97 }; |
|
98 emulator.run("gsm cancel " + number); |
|
99 } |
|
100 |
|
101 function cleanUp() { |
|
102 finish(); |
|
103 } |
|
104 |
|
105 function verifyNextEmergencyLabel() { |
|
106 if (testCase >= expectedResults.length) { |
|
107 cleanUp(); |
|
108 } else { |
|
109 log("Running test case: " + testCase + "/" + expectedResults.length); |
|
110 number = expectedResults[testCase][0]; |
|
111 emergency = expectedResults[testCase][1]; |
|
112 testCase++; |
|
113 |
|
114 // No more calls in the list; give time for emulator to catch up |
|
115 waitFor(dial, function() { |
|
116 return (telephony.calls.length === 0); |
|
117 }); |
|
118 } |
|
119 } |
|
120 |
|
121 startTest(function() { |
|
122 verifyNextEmergencyLabel(); |
|
123 }); |