1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7base.require('base.settings');
8base.require('base.unittest');
9base.require('tracing.test_utils');
10
11base.unittest.testSuite('base.settings', function() {
12  function assertSettingIs(expectedValue, key) {
13    assertEquals(expectedValue, base.Settings.get('my_key'),
14                 'Expected Settings.' + key + ' to be ' + expectedValue);
15  }
16
17  // Old settings versions used to stringify objects instead of putting them
18  // into JSON. This test makes sure that these old settings yield the default
19  // value instead of strings.
20  test('oldStyleSettingYieldsDefaultValue', function() {
21    var storage = base.Settings.getAlternativeStorageInstance();
22    storage.setItem(base.Settings.namespace_('key'), 'hello world');
23
24    assertEquals('value', base.Settings.get('key', 'value'));
25  });
26
27  test('setGetString', function() {
28    var settings = new base.Settings();
29    settings.set('my_key', 'my_val');
30    assertEquals('my_val', settings.get('my_key'));
31    // base.Settings() is a singleton
32    assertEquals('my_val', base.Settings().get('my_key'));
33  });
34
35  test('setGetNumber', function() {
36    var settings = new base.Settings();
37    settings.set('my_key', 5);
38    assertSettingIs(5, 'my_key');
39  });
40
41  test('setGetBool', function() {
42    var settings = new base.Settings();
43    settings.set('my_key', false);
44    assertSettingIs(false, 'my_key');
45  });
46
47  test('setGetObject', function() {
48    var settings = new base.Settings();
49    settings.set('my_key', {'hello': 5});
50    assertObjectEquals({'hello': 5}, settings.get('my_key'));
51  });
52
53  test('setInvalidObject', function() {
54    var settings = new base.Settings();
55    var obj = {'hello': undefined};
56    obj.hello = obj;
57    assertThrows(function() {
58      settings.set('my_key', obj);
59    });
60  });
61
62  test('setUndefined', function() {
63    var settings = new base.Settings();
64    assertThrows(function() {
65      settings.set('my_key', undefined);
66    });
67  });
68
69  test('getUnset', function() {
70    var settings = new base.Settings();
71    // Undefined should be returned if value isn't set.
72    assertSettingIs(undefined, 'my_key');
73  });
74
75  test('getDefault', function() {
76    var settings = new base.Settings();
77    // default_val should be returned if value isn't set.
78    assertEquals('default_val', settings.get('my_key', 'default_val'));
79  });
80
81  test('setGetPrefix', function() {
82    var settings = new base.Settings();
83    settings.set('key_a', 'foo', 'my_prefix');
84    assertEquals('foo', settings.get('key_a', undefined, 'my_prefix'));
85    assertEquals('foo', settings.get('key_a', 'bar', 'my_prefix'));
86    assertEquals(undefined, settings.get('key_a'));
87    assertEquals('bar', settings.get('key_a', 'bar'));
88  });
89
90  test('keys', function() {
91    var settings = new base.Settings();
92    settings.set('key_a', 'foo');
93    settings.set('key_b', 'bar');
94    settings.set('key_c', 'baz');
95    assertArrayEquals(['key_a', 'key_b', 'key_c'], settings.keys());
96  });
97
98  test('keysPrefix', function() {
99    var settings = new base.Settings();
100    settings.set('key_a', 'foo', 'prefix1');
101    settings.set('key_b', 'bar', 'prefix1');
102    settings.set('key_c', 'baz', 'prefix1');
103    settings.set('key_a', 'foo', 'prefix2');
104    settings.set('key_b', 'bar', 'prefix2');
105    settings.set('key_C', 'baz', 'prefix2');
106    assertArrayEquals(['key_a', 'key_b', 'key_c'], settings.keys('prefix1'));
107    assertArrayEquals(['key_C', 'key_a', 'key_b'], settings.keys('prefix2'));
108    assertArrayEquals(
109        ['prefix1.key_a', 'prefix1.key_b', 'prefix1.key_c',
110         'prefix2.key_C', 'prefix2.key_a', 'prefix2.key_b'],
111        settings.keys());
112  });
113});
114