blob: 13005b5e65a25977d8ced06ef17e7377af569e8c [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.
/** @fileoverview Suite of tests for Settings.PrefUtil. */
cr.define('settings_prefUtil', function() {
suite('PrefUtil', function() {
const global = function() {
return this;
}();
const origTraceAssertionsForTesting = global.traceAssertionsForTesting;
/**
* @param {function()} fn Function that should throw.
* @param {string} message Message to log if function does not throw.
*/
const expectThrows = function(fn, message) {
// Temporarily disable printing of stack traces on assert failures.
global.traceAssertionsForTesting = false;
try {
fn();
// Must be expect, because assert would get caught.
expectNotReached(message);
} catch (e) {
}
global.traceAssertionsForTesting = origTraceAssertionsForTesting;
};
// Tests that the given value is converted to the expected value, for a
// given prefType.
const expectStringToPrefValue = function(value, prefType, expectedValue) {
const pref = /** @type {PrefObject} */ ({type: prefType});
expectEquals(
expectedValue, Settings.PrefUtil.stringToPrefValue(value, pref));
};
test('stringToPrefValue', function testStringToPrefValue() {
expectStringToPrefValue(
'true', chrome.settingsPrivate.PrefType.BOOLEAN, true);
expectStringToPrefValue(
'false', chrome.settingsPrivate.PrefType.BOOLEAN, false);
expectStringToPrefValue('42', chrome.settingsPrivate.PrefType.NUMBER, 42);
expectStringToPrefValue(
'Foo Bar', chrome.settingsPrivate.PrefType.STRING, 'Foo Bar');
const url = 'http://example.com';
expectStringToPrefValue(url, chrome.settingsPrivate.PrefType.URL, url);
expectThrows(function() {
expectStringToPrefValue(
'[1, 2]', chrome.settingsPrivate.PrefType.LIST, '');
}, 'List prefs should not be converted.');
expectThrows(function() {
expectStringToPrefValue(
'{foo: 1}', chrome.settingsPrivate.PrefType.DICTIONARY, '');
}, 'Dictionary prefs should not be converted.');
});
// Tests that the pref value is converted to the expected string, for a
// given prefType.
const expectPrefToString = function(prefType, prefValue, expectedValue) {
const pref = /** @type {PrefObject} */ ({
type: prefType,
value: prefValue,
});
expectEquals(expectedValue, Settings.PrefUtil.prefToString(pref));
};
test('prefToString', function testPrefToString() {
expectPrefToString(
chrome.settingsPrivate.PrefType.BOOLEAN, false, 'false');
expectPrefToString(chrome.settingsPrivate.PrefType.NUMBER, 42, '42');
expectPrefToString(
chrome.settingsPrivate.PrefType.STRING, 'Foo Bar', 'Foo Bar');
const url = 'http://example.com';
expectPrefToString(chrome.settingsPrivate.PrefType.URL, url, url);
expectThrows(function() {
expectPrefToString(chrome.settingsPrivate.PrefType.LIST, [1, 2], null);
}, 'List prefs should not be handled.');
expectThrows(function() {
expectPrefToString(
chrome.settingsPrivate.PrefType.DICTIONARY, {foo: 1}, null);
}, 'Dictionary prefs should not be handled.');
});
});
});