summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_UserInteraction.js
blob: 5fc3c5ecd12721f1501527a632ad81087e87b30b (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

const TEST_USER_INTERACTION_ID = "testing.interaction";
const TEST_VALUE_1 = "some value";
const TEST_VALUE_2 = "some other value";
const TEST_INVALID_VALUE =
  "This is a value that is far too long - it has too many characters.";
const TEST_ADDITIONAL_TEXT_1 = "some additional text";
const TEST_ADDITIONAL_TEXT_2 = "some other additional text";

function run_test() {
  let obj1 = {};
  let obj2 = {};

  Assert.ok(UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1));
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1, obj1)
  );
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1, obj2)
  );

  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));

  // Unlike TelemetryStopwatch, we can clobber UserInteractions.
  Assert.ok(UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1));
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1, obj1)
  );
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1, obj2)
  );

  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));

  // Ensure that we can finish a UserInteraction that was accidentally started
  // twice
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID, obj2));

  // Make sure we can't start or finish non-existent UserInteractions.
  Assert.ok(!UserInteraction.start("non-existent.interaction", TEST_VALUE_1));
  Assert.ok(
    !UserInteraction.start("non-existent.interaction", TEST_VALUE_1, obj1)
  );
  Assert.ok(
    !UserInteraction.start("non-existent.interaction", TEST_VALUE_1, obj2)
  );
  Assert.ok(!UserInteraction.running("non-existent.interaction"));
  Assert.ok(!UserInteraction.running("non-existent.interaction", obj1));
  Assert.ok(!UserInteraction.running("non-existent.interaction", obj2));
  Assert.ok(!UserInteraction.finish("non-existent.interaction"));
  Assert.ok(!UserInteraction.finish("non-existent.interaction", obj1));
  Assert.ok(!UserInteraction.finish("non-existent.interaction", obj2));

  // Ensure that we enforce the character limit on value strings.
  Assert.ok(
    !UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_INVALID_VALUE)
  );
  Assert.ok(
    !UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_INVALID_VALUE, obj1)
  );
  Assert.ok(
    !UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_INVALID_VALUE, obj2)
  );
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));

  // Verify that they can be used again
  Assert.ok(UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_2));
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_2, obj1)
  );
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_2, obj2)
  );
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID, obj2));

  Assert.ok(!UserInteraction.finish(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.finish(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(!UserInteraction.finish(TEST_USER_INTERACTION_ID, obj2));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));

  // Verify that they can be used again with different values.
  Assert.ok(UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1));
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_2, obj1)
  );
  Assert.ok(
    UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1, obj2)
  );
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj1));
  Assert.ok(UserInteraction.running(TEST_USER_INTERACTION_ID, obj2));
  Assert.ok(UserInteraction.finish(TEST_USER_INTERACTION_ID));
  Assert.ok(
    UserInteraction.finish(
      TEST_USER_INTERACTION_ID,
      obj1,
      TEST_ADDITIONAL_TEXT_1
    )
  );
  Assert.ok(
    UserInteraction.finish(
      TEST_USER_INTERACTION_ID,
      obj2,
      TEST_ADDITIONAL_TEXT_2
    )
  );

  // Test that they can be cancelled
  Assert.ok(UserInteraction.start(TEST_USER_INTERACTION_ID, TEST_VALUE_1));
  Assert.ok(UserInteraction.cancel(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.running(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.finish(TEST_USER_INTERACTION_ID));

  // Test that they cannot be cancelled twice
  Assert.ok(!UserInteraction.cancel(TEST_USER_INTERACTION_ID));
  Assert.ok(!UserInteraction.cancel(TEST_USER_INTERACTION_ID));
}