| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| (Empty) | |
| 1 "use strict"; | |
| 2 | |
| 3 { | |
| 4 const {IndexedDBBackup} = require("../../lib/indexedDBBackup"); | |
| 5 const info = require("info"); | |
| 6 const {Filter} = require("../../adblockpluscore/lib/filterClasses"); | |
| 7 const {Subscription, SpecialSubscription} = | |
| 8 require("../../adblockpluscore/lib/subscriptionClasses"); | |
| 9 | |
| 10 let writeTime = 0; | |
| 11 let writeInterval = 100; | |
| 12 | |
| 13 let testEdge = info.platform == "edgehtml" ? QUnit.test : QUnit.skip; | |
| 14 | |
| 15 QUnit.module("Microsoft Edge indexedDB backup", { | |
| 16 afterEach() | |
| 17 { | |
| 18 IndexedDBBackup.init(); | |
| 19 } | |
| 20 }); | |
| 21 | |
| 22 testEdge("Data serialization", () => | |
| 23 { | |
| 24 let subscription = Subscription.fromObject({ | |
| 25 title: "test", | |
| 26 url: "test.com", | |
| 27 homepage: "example.com", | |
| 28 disabled: false, | |
| 29 lastSuccess: 8, | |
| 30 lastDownload: 12, | |
| 31 lastCheck: 16, | |
| 32 softExpiration: 18, | |
| 33 expires: 20, | |
| 34 downloadStatus: "done", | |
| 35 errors: 3, | |
| 36 version: 24, | |
| 37 downloadCount: 1, | |
| 38 requiredVersion: "0.6" | |
| 39 }); | |
| 40 let filter = Filter.fromText("example.com"); | |
| 41 let specialSubscription = SpecialSubscription.createForFilter(filter); | |
| 42 | |
| 43 let expectedFormat = [ | |
| 44 "", | |
| 45 "[Subscription]", | |
| 46 `homepage=${subscription.homepage}`, | |
| 47 `title=${subscription.title}`, | |
| 48 `url=${subscription.url}`, | |
| 49 `disabled=${subscription.disabled}`, | |
| 50 "", | |
| 51 "[Subscription]", | |
| 52 `url=${specialSubscription.url}`, | |
| 53 "defaults=blocking", | |
| 54 "", | |
| 55 "[Subscription filters]", | |
| 56 "example.com" | |
| 57 ]; | |
| 58 let actualFormat = IndexedDBBackup.serialize([ | |
| 59 subscription, | |
| 60 specialSubscription | |
| 61 ]); | |
| 62 deepEqual(actualFormat, expectedFormat, "formates the data correctly"); | |
|
Sebastian Noack
2018/08/21 20:26:25
Maybe we should test the serialization as part of
geo
2018/08/31 15:49:25
Done.
| |
| 63 }); | |
| 64 | |
| 65 testEdge("Write time smaller than backup interval", assert => | |
| 66 { | |
| 67 writeTime = 10; | |
| 68 testSaveSteps(assert); | |
| 69 }); | |
| 70 | |
| 71 testEdge("Write time greater than backup interval", assert => | |
| 72 { | |
| 73 writeTime = 150; | |
| 74 testSaveSteps(assert); | |
| 75 }); | |
| 76 | |
| 77 function testSaveSteps(assert) | |
| 78 { | |
| 79 let start = performance.now(); | |
| 80 let saveTimes = []; | |
| 81 let steps = [ | |
| 82 { | |
| 83 done: assert.async(), | |
| 84 check() | |
| 85 { | |
| 86 ok(start - saveTimes[0].start < writeInterval, | |
| 87 "first change is proccessed imediatelly"); | |
| 88 } | |
| 89 }, | |
| 90 { | |
| 91 done: assert.async(), | |
| 92 check() | |
| 93 { | |
| 94 ok(saveTimes[1].start - saveTimes[0].end >= writeInterval, | |
| 95 "next change is after the time limit"); | |
| 96 } | |
| 97 } | |
| 98 ]; | |
| 99 let mockSave = () => | |
| 100 { | |
| 101 saveTimes.push({start: performance.now()}); | |
| 102 return new Promise(resolve => | |
| 103 { | |
| 104 setTimeout(() => | |
| 105 { | |
| 106 saveTimes[saveTimes.length - 1].end = performance.now(); | |
| 107 let step = steps.shift(); | |
| 108 step.check(); | |
| 109 step.done(); | |
| 110 resolve(); | |
| 111 }, writeTime); | |
| 112 }); | |
| 113 }; | |
| 114 | |
| 115 IndexedDBBackup.init(writeInterval, mockSave); | |
| 116 IndexedDBBackup.scheduleBackup(); | |
| 117 setTimeout(IndexedDBBackup.scheduleBackup, writeTime / 2); | |
| 118 setTimeout(IndexedDBBackup.scheduleBackup, writeInterval); | |
| 119 } | |
| 120 } | |
| OLD | NEW |