summaryrefslogtreecommitdiffstats
path: root/xpcom/tests/unit/test_bug374754.js
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/tests/unit/test_bug374754.js')
-rw-r--r--xpcom/tests/unit/test_bug374754.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/xpcom/tests/unit/test_bug374754.js b/xpcom/tests/unit/test_bug374754.js
new file mode 100644
index 0000000000..0d20d90b2c
--- /dev/null
+++ b/xpcom/tests/unit/test_bug374754.js
@@ -0,0 +1,65 @@
+var addedTopic = "xpcom-category-entry-added";
+var removedTopic = "xpcom-category-entry-removed";
+var testCategory = "bug-test-category";
+var testEntry = "@mozilla.org/bug-test-entry;1";
+
+var testValue = "check validity";
+var result = "";
+var expected = "add remove add remove ";
+var timer;
+
+var observer = {
+ QueryInterface: ChromeUtils.generateQI(["nsIObserver"]),
+
+ observe(subject, topic, data) {
+ if (topic == "timer-callback") {
+ Assert.equal(result, expected);
+
+ Services.obs.removeObserver(this, addedTopic);
+ Services.obs.removeObserver(this, removedTopic);
+
+ do_test_finished();
+
+ timer = null;
+ }
+
+ if (
+ subject.QueryInterface(Ci.nsISupportsCString).data != testEntry ||
+ data != testCategory
+ ) {
+ return;
+ }
+
+ if (topic == addedTopic) {
+ result += "add ";
+ } else if (topic == removedTopic) {
+ result += "remove ";
+ }
+ },
+};
+
+function run_test() {
+ do_test_pending();
+
+ Services.obs.addObserver(observer, addedTopic);
+ Services.obs.addObserver(observer, removedTopic);
+
+ Services.catMan.addCategoryEntry(
+ testCategory,
+ testEntry,
+ testValue,
+ false,
+ true
+ );
+ Services.catMan.addCategoryEntry(
+ testCategory,
+ testEntry,
+ testValue,
+ false,
+ true
+ );
+ Services.catMan.deleteCategoryEntry(testCategory, testEntry, false);
+
+ timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ timer.init(observer, 0, timer.TYPE_ONE_SHOT);
+}