Index: test/subscriptionClasses.js |
=================================================================== |
--- a/test/subscriptionClasses.js |
+++ b/test/subscriptionClasses.js |
@@ -14,78 +14,69 @@ |
* You should have received a copy of the GNU General Public License |
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
*/ |
"use strict"; |
let {createSandbox} = require("./_common"); |
+let Filter = null; |
let Subscription = null; |
let SpecialSubscription = null; |
let DownloadableSubscription = null; |
let RegularSubscription = null; |
let ExternalSubscription = null; |
exports.setUp = function(callback) |
{ |
let sandboxedRequire = createSandbox(); |
+ ({Filter} = sandboxedRequire("../lib/filterClassesNew")); |
( |
{ |
- Subscription, SpecialSubscription, DownloadableSubscription, |
- RegularSubscription, ExternalSubscription |
- } = sandboxedRequire("../lib/subscriptionClasses") |
+ Subscription, SpecialSubscription, DownloadableSubscription |
+ } = sandboxedRequire("../lib/subscriptionClassesNew") |
); |
callback(); |
}; |
function compareSubscription(test, url, expected, postInit) |
{ |
expected.push("[Subscription]") |
let subscription = Subscription.fromURL(url); |
if (postInit) |
postInit(subscription) |
- let result = []; |
- subscription.serialize(result); |
+ let result = subscription.serialize().trim().split("\n"); |
test.equal(result.sort().join("\n"), expected.sort().join("\n"), url); |
- |
- let map = {__proto__: null}; |
- for (let line of result.slice(1)) |
- { |
- if (/(.*?)=(.*)/.test(line)) |
- map[RegExp.$1] = RegExp.$2; |
- } |
- let subscription2 = Subscription.fromObject(map); |
- test.equal(subscription.toString(), subscription2.toString(), url + " deserialization"); |
+ subscription.delete(); |
} |
exports.testSubscriptionClassDefinitions = function(test) |
{ |
test.equal(typeof Subscription, "function", "typeof Subscription"); |
test.equal(typeof SpecialSubscription, "function", "typeof SpecialSubscription"); |
- test.equal(typeof RegularSubscription, "function", "typeof RegularSubscription"); |
- test.equal(typeof ExternalSubscription, "function", "typeof ExternalSubscription"); |
test.equal(typeof DownloadableSubscription, "function", "typeof DownloadableSubscription"); |
test.done(); |
}; |
exports.testSubscriptionsWithState = function(test) |
{ |
compareSubscription(test, "~fl~", ["url=~fl~"]); |
compareSubscription(test, "http://test/default", ["url=http://test/default", "title=http://test/default"]); |
compareSubscription(test, "http://test/default_titled", ["url=http://test/default_titled", "title=test"], function(subscription) |
{ |
subscription.title = "test"; |
}); |
- compareSubscription(test, "http://test/non_default", ["url=http://test/non_default", "title=test", |
+ compareSubscription(test, "http://test/non_default", ["url=http://test/non_default", "title=test", "fixedTitle=true", |
"disabled=true", "lastSuccess=8", "lastDownload=12", "lastCheck=16", "softExpiration=18", "expires=20", "downloadStatus=foo", |
"errors=3", "version=24", "requiredVersion=0.6"], function(subscription) |
{ |
subscription.title = "test"; |
+ subscription.fixedTitle = true; |
subscription.disabled = true; |
subscription.lastSuccess = 8; |
subscription.lastDownload = 12; |
subscription.lastCheck = 16; |
subscription.softExpiration = 18; |
subscription.expires = 20; |
subscription.downloadStatus = "foo"; |
subscription.errors = 3; |
@@ -95,8 +86,77 @@ exports.testSubscriptionsWithState = fun |
compareSubscription(test, "~wl~", ["url=~wl~", "disabled=true", "title=Test group"], function(subscription) |
{ |
subscription.title = "Test group"; |
subscription.disabled = true; |
}); |
test.done(); |
}; |
+ |
+exports.testDefaultSubscriptionIDs = function(test) |
+{ |
+ let subscription1 = Subscription.fromURL(null); |
+ test.ok(subscription1 instanceof SpecialSubscription, "Special subscription returned by default"); |
+ test.ok(subscription1.url.startsWith("~user~"), "Prefix for default subscription IDs"); |
+ |
+ let subscription2 = Subscription.fromURL(null); |
+ test.ok(subscription2 instanceof SpecialSubscription, "Special subscription returned by default"); |
+ test.ok(subscription2.url.startsWith("~user~"), "Prefix for default subscription IDs"); |
+ test.notEqual(subscription1.url, subscription2.url, "Second call creates new subscription"); |
+ |
+ subscription1.delete(); |
+ subscription2.delete(); |
+ |
+ test.done(); |
+}; |
+ |
+exports.testSubscriptionDefaults = function(test) |
+{ |
+ let tests = [ |
+ ["blocking", "test"], |
+ ["whitelist", "@@test"], |
+ ["elemhide", "##test"], |
+ ["elemhide", "#@#test"], |
+ ["elemhide", "foo##[-abp-properties='foo']"], |
+ ["blocking", "!test"], |
+ ["blocking", "/??/"], |
+ ["blocking whitelist", "test", "@@test"], |
+ ["blocking elemhide", "test", "##test"] |
+ ]; |
+ |
+ for (let [defaults, ...filters] of tests) |
+ { |
+ compareSubscription(test, "~user~" + filters.join("~"), ["url=~user~" + filters.join("~"), "defaults= " + defaults], function(subscription) |
+ { |
+ for (let text of filters) |
+ { |
+ let filter = Filter.fromText(text); |
+ subscription.makeDefaultFor(filter); |
+ filter.delete(); |
+ } |
+ }); |
+ } |
+ test.done(); |
+}; |
+ |
+exports.testGC = function(test) |
+{ |
+ let subscription1 = Subscription.fromURL("http://example.com/"); |
+ test.equal(subscription1.lastDownload, 0, "Initial download time"); |
+ |
+ subscription1.lastDownload = 432; |
+ |
+ let subscription2 = Subscription.fromURL("http://example.com/"); |
+ test.equal(subscription2.lastDownload, 432, "Known subscription returned"); |
+ |
+ subscription2.lastDownload = 234; |
+ test.equal(subscription1.lastDownload, 234, "Changing second wrapper modifies original as well"); |
+ |
+ subscription1.delete(); |
+ subscription2.delete(); |
+ |
+ let subscription3 = Subscription.fromURL("http://example.com/"); |
+ test.equal(subscription3.lastDownload, 0, "Subscription data has been reset once previous instances have been released"); |
+ subscription3.delete(); |
+ |
+ test.done(); |
+}; |