| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| var error; |
| |
| function testStartStopNotifications() { |
| if (error !== undefined) { |
| chrome.test.sendMessage('fail'); |
| chrome.test.fail(error); |
| } |
| chrome.test.assertEq(1, Object.keys(changedChrcs).length); |
| chrome.test.assertEq(charId0, changedChrcs[charId0].instanceId); |
| chrome.test.succeed(); |
| } |
| |
| var errorAlreadyNotifying = 'Already notifying'; |
| var errorNotFound = 'Instance not found'; |
| var errorNotNotifying = 'Not notifying'; |
| var errorOperationFailed = 'Operation failed'; |
| var errorPermissionDenied = 'Permission denied'; |
| |
| var charId0 = 'char_id0'; |
| var charId1 = 'char_id1'; |
| var charId2 = 'char_id2'; |
| |
| var changedChrcs = {}; |
| var ble = chrome.bluetoothLowEnergy; |
| var start = ble.startCharacteristicNotifications; |
| var stop = ble.stopCharacteristicNotifications; |
| |
| |
| function earlyError(message) { |
| error = message; |
| chrome.test.runTests([testStartStopNotifications]); |
| } |
| |
| function expectError(expectedMessage) { |
| if (!chrome.runtime.lastError) { |
| earlyError('Expected error: ' + expectedMessage); |
| } else if (chrome.runtime.lastError.message != expectedMessage) { |
| earlyError('Expected error: ' + expectedMessage + ', got error: ' + |
| expectedMessage); |
| } |
| return error !== undefined; |
| } |
| |
| function expectSuccess() { |
| if (chrome.runtime.lastError) { |
| earlyError('Unexpected error: ' + chrome.runtime.lastError.message); |
| } |
| return error !== undefined; |
| } |
| |
| ble.onCharacteristicValueChanged.addListener(function (chrc) { |
| changedChrcs[chrc.instanceId] = chrc; |
| }); |
| |
| start('foo', function () { |
| if (expectError(errorNotFound)) |
| return; |
| |
| start(charId2, function () { |
| if (expectError(errorPermissionDenied)) |
| return; |
| |
| stop(charId0, function () { |
| if (expectError(errorNotNotifying)) |
| return; |
| |
| start(charId0, function () { |
| if (expectError(errorOperationFailed)) |
| return; |
| |
| start(charId0, function () { |
| if (expectSuccess()) |
| return; |
| |
| start(charId0, function () { |
| if (expectError(errorAlreadyNotifying)) |
| return; |
| |
| start(charId1, function () { |
| if (expectSuccess()) |
| return; |
| |
| stop(charId1, function () { |
| if (expectSuccess()) |
| return; |
| |
| stop(charId1, function () { |
| if (expectError(errorNotNotifying)) |
| return; |
| |
| stop(charId2, function () { |
| if (expectError(errorNotNotifying)) |
| return; |
| |
| chrome.test.sendMessage('ready', function (message) { |
| chrome.test.runTests([testStartStopNotifications]); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |
| }); |