blob: d5e586573396b45b646af9d76359a75fbdaa53c6 [file] [log] [blame]
// Copyright 2015 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.
'use strict';
QUnit.module('HostOptions', {
beforeEach: function() {
sinon.stub(remoting, 'platformIsChromeOS');
},
afterEach: function() {
$testStub(remoting.platformIsChromeOS).restore();
chrome.storage.local.clear();
},
});
/**
* @param {!QUnit.Assert} assert
* @param {remoting.HostOptions} options
* @param {boolean} isChromeOS
*/
function assertDefaults(assert, options, isChromeOS) {
var pairingInfo = {clientId: '', sharedSecret: ''};
var chromeOsMap = {0x0700e4: 0x0700e7};
var nonChromeOsMap = {};
assert.equal(options.getShrinkToFit(), true);
assert.equal(options.getResizeToClient(), true);
assert.equal(options.getDesktopScale(), 1);
assert.deepEqual(options.getPairingInfo(), pairingInfo);
assert.deepEqual(options.getRemapKeys(),
isChromeOS ? chromeOsMap : nonChromeOsMap);
}
QUnit.test('Per-platform defaults are set correctly',
function(assert) {
$testStub(remoting.platformIsChromeOS).returns(false);
var options = new remoting.HostOptions('host-id');
assertDefaults(assert, options, false);
$testStub(remoting.platformIsChromeOS).returns(true);
options = new remoting.HostOptions('host-id');
assertDefaults(assert, options, true);
});
QUnit.test('Loading a non-existent host yields default values',
function(assert) {
$testStub(remoting.platformIsChromeOS).returns(true);
var options = new remoting.HostOptions('host-id');
return options.load().then(
function() {
assertDefaults(assert, options, true);
});
});
QUnit.test('Saving and loading a host preserves the saved values',
function(assert) {
var options = new remoting.HostOptions('host-id');
var optionsLoaded = new remoting.HostOptions('host-id');
options.setShrinkToFit(false);
options.setResizeToClient(false);
options.setDesktopScale(2);
options.setRemapKeys({2: 1, 1: 2});
options.setPairingInfo({
clientId: 'client-id',
sharedSecret: 'shared-secret'
});
var optionsCopy = base.deepCopy(options);
return options.save().then(function() {
return optionsLoaded.load();
}).then(function() {
assert.deepEqual(optionsCopy, base.deepCopy(optionsLoaded));
});
});
QUnit.test('Saving a host ignores unset values',
function(assert) {
var options = new remoting.HostOptions('host-id');
options.setShrinkToFit(false);
var optionsCopy = base.deepCopy(options);
var optionsEmpty = new remoting.HostOptions('host-id');
return optionsEmpty.save().then(function() {
return options.load();
}).then(function() {
assert.deepEqual(optionsCopy, base.deepCopy(options));
});
});
QUnit.test('Old-style (string-formatted) key remappings are parsed correctly',
function(assert) {
var options1 = new remoting.HostOptions('host-id');
options1.setRemapKeys({2: 1, 1: 2});
var savedHostOptions = {
'host-id': {
'remapKeys': '2>1,1>2'
}
};
var savedAllOptions = {
'remoting-host-options': JSON.stringify(savedHostOptions)
};
chrome.storage.local.set(savedAllOptions); // Mock storage is synchronous
var options2 = new remoting.HostOptions('host-id');
return options2.load().then(
function() {
assert.deepEqual(options1, options2);
});
});
QUnit.test('New options are loaded and saved without updating the code',
function(assert) {
var options = new remoting.HostOptions('host-id');
var optionsLoaded = new remoting.HostOptions('host-id');
options['undefined-option'] = 42;
return options.save().then(function() {
return optionsLoaded.load();
}).then(function() {
assert.equal(optionsLoaded['undefined-option'], 42);
});
});