166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('base.settings'); 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('base.unittest'); 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils'); 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('base.settings', function() { 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis function assertSettingIs(expectedValue, key) { 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(expectedValue, base.Settings.get('my_key'), 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'Expected Settings.' + key + ' to be ' + expectedValue); 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Old settings versions used to stringify objects instead of putting them 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // into JSON. This test makes sure that these old settings yield the default 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // value instead of strings. 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('oldStyleSettingYieldsDefaultValue', function() { 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var storage = base.Settings.getAlternativeStorageInstance(); 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis storage.setItem(base.Settings.namespace_('key'), 'hello world'); 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('value', base.Settings.get('key', 'value')); 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setGetString', function() { 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', 'my_val'); 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('my_val', settings.get('my_key')); 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // base.Settings() is a singleton 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('my_val', base.Settings().get('my_key')); 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setGetNumber', function() { 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', 5); 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertSettingIs(5, 'my_key'); 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setGetBool', function() { 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', false); 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertSettingIs(false, 'my_key'); 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setGetObject', function() { 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', {'hello': 5}); 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertObjectEquals({'hello': 5}, settings.get('my_key')); 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setInvalidObject', function() { 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var obj = {'hello': undefined}; 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis obj.hello = obj; 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertThrows(function() { 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', obj); 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setUndefined', function() { 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertThrows(function() { 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('my_key', undefined); 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('getUnset', function() { 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // Undefined should be returned if value isn't set. 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertSettingIs(undefined, 'my_key'); 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('getDefault', function() { 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // default_val should be returned if value isn't set. 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('default_val', settings.get('my_key', 'default_val')); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('setGetPrefix', function() { 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_a', 'foo', 'my_prefix'); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('foo', settings.get('key_a', undefined, 'my_prefix')); 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('foo', settings.get('key_a', 'bar', 'my_prefix')); 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals(undefined, settings.get('key_a')); 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertEquals('bar', settings.get('key_a', 'bar')); 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('keys', function() { 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_a', 'foo'); 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_b', 'bar'); 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_c', 'baz'); 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayEquals(['key_a', 'key_b', 'key_c'], settings.keys()); 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis test('keysPrefix', function() { 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var settings = new base.Settings(); 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_a', 'foo', 'prefix1'); 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_b', 'bar', 'prefix1'); 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_c', 'baz', 'prefix1'); 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_a', 'foo', 'prefix2'); 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_b', 'bar', 'prefix2'); 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.set('key_C', 'baz', 'prefix2'); 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayEquals(['key_a', 'key_b', 'key_c'], settings.keys('prefix1')); 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayEquals(['key_C', 'key_a', 'key_b'], settings.keys('prefix2')); 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis assertArrayEquals( 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ['prefix1.key_a', 'prefix1.key_b', 'prefix1.key_c', 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 'prefix2.key_C', 'prefix2.key_a', 'prefix2.key_b'], 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis settings.keys()); 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 114