summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_UserInteraction.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_UserInteraction.js')
-rw-r--r--toolkit/components/telemetry/tests/unit/test_UserInteraction.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_UserInteraction.js b/toolkit/components/telemetry/tests/unit/test_UserInteraction.js
new file mode 100644
index 0000000000..5fc3c5ecd1
--- /dev/null
+++ b/toolkit/components/telemetry/tests/unit/test_UserInteraction.js
@@ -0,0 +1,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));
+}