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