test_forms_tracker.js (2575B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 const { FormEngine } = ChromeUtils.importESModule( 5 "resource://services-sync/engines/forms.sys.mjs" 6 ); 7 const { Service } = ChromeUtils.importESModule( 8 "resource://services-sync/service.sys.mjs" 9 ); 10 11 add_task(async function run_test() { 12 _("Verify we've got an empty tracker to work with."); 13 let engine = new FormEngine(Service); 14 await engine.initialize(); 15 let tracker = engine._tracker; 16 17 let changes = await tracker.getChangedIDs(); 18 do_check_empty(changes); 19 Log.repository.rootLogger.addAppender(new Log.DumpAppender()); 20 21 async function addEntry(name, value) { 22 await engine._store.create({ name, value }); 23 await engine._tracker.asyncObserver.promiseObserversComplete(); 24 } 25 async function removeEntry(name, value) { 26 let guid = await engine._findDupe({ name, value }); 27 await engine._store.remove({ id: guid }); 28 await engine._tracker.asyncObserver.promiseObserversComplete(); 29 } 30 31 try { 32 _("Create an entry. Won't show because we haven't started tracking yet"); 33 await addEntry("name", "John Doe"); 34 changes = await tracker.getChangedIDs(); 35 do_check_empty(changes); 36 37 _("Tell the tracker to start tracking changes."); 38 tracker.start(); 39 await removeEntry("name", "John Doe"); 40 await addEntry("email", "john@doe.com"); 41 changes = await tracker.getChangedIDs(); 42 do_check_attribute_count(changes, 2); 43 44 _("Notifying twice won't do any harm."); 45 tracker.start(); 46 await addEntry("address", "Memory Lane"); 47 changes = await tracker.getChangedIDs(); 48 do_check_attribute_count(changes, 3); 49 50 _("Check that ignoreAll is respected"); 51 await tracker.clearChangedIDs(); 52 tracker.score = 0; 53 tracker.ignoreAll = true; 54 await addEntry("username", "johndoe123"); 55 await addEntry("favoritecolor", "green"); 56 await removeEntry("name", "John Doe"); 57 tracker.ignoreAll = false; 58 changes = await tracker.getChangedIDs(); 59 do_check_empty(changes); 60 equal(tracker.score, 0); 61 62 _("Let's stop tracking again."); 63 await tracker.clearChangedIDs(); 64 await tracker.stop(); 65 await removeEntry("address", "Memory Lane"); 66 changes = await tracker.getChangedIDs(); 67 do_check_empty(changes); 68 69 _("Notifying twice won't do any harm."); 70 await tracker.stop(); 71 await removeEntry("email", "john@doe.com"); 72 changes = await tracker.getChangedIDs(); 73 do_check_empty(changes); 74 } finally { 75 _("Clean up."); 76 await engine._store.wipe(); 77 } 78 });