summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/expiration/test_pref_interval.js
blob: 5bf340e7c4ba5c658e5ef5f1ab31d5830ad38d28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
 * What this is aimed to test:
 *
 * Expiration relies on an interval, that is user-preffable setting
 * "places.history.expiration.interval_seconds".
 * On pref change it will stop current interval timer and fire a new one,
 * that will obey the new value.
 * If the pref is set to a number <= 0 we will use the default value.
 */

// Default timer value for expiration in seconds.  Must have same value as
// PREF_INTERVAL_SECONDS_NOTSET in nsPlacesExpiration.
const DEFAULT_TIMER_DELAY_SECONDS = 3 * 60;

// Sync this with the const value in the component.
const EXPIRE_AGGRESSIVITY_MULTIPLIER = 3;

var tests = [
  {
    desc: "Set interval to 1s.",
    interval: 1,
    expectedTimerDelay: 1 * EXPIRE_AGGRESSIVITY_MULTIPLIER,
  },

  {
    desc: "Set interval to a negative value.",
    interval: -1,
    expectedTimerDelay:
      DEFAULT_TIMER_DELAY_SECONDS * EXPIRE_AGGRESSIVITY_MULTIPLIER,
  },

  {
    desc: "Set interval to 0.",
    interval: 0,
    expectedTimerDelay:
      DEFAULT_TIMER_DELAY_SECONDS * EXPIRE_AGGRESSIVITY_MULTIPLIER,
  },

  {
    desc: "Set interval to a large value.",
    interval: 100,
    expectedTimerDelay: 100 * EXPIRE_AGGRESSIVITY_MULTIPLIER,
  },
];

add_task(async function test() {
  // The pref should not exist by default.
  Assert.throws(() => getInterval(), /NS_ERROR_UNEXPECTED/);

  // Force the component, so it will start observing preferences.
  force_expiration_start();

  for (let currentTest of tests) {
    currentTest = tests.shift();
    print(currentTest.desc);
    let promise = promiseTopicObserved("test-interval-changed");
    setInterval(currentTest.interval);
    let [, data] = await promise;
    Assert.equal(data, currentTest.expectedTimerDelay);
  }
  clearInterval();
});