| OLD | NEW | 
|---|
| 1 "use strict"; | 1 "use strict"; | 
| 2 | 2 | 
|  | 3 (function() | 
| 3 { | 4 { | 
| 4   const {parseFilter, parseFilters} = require("filterValidation"); | 5   const {parseFilter, parseFilters} = require("filterValidation"); | 
| 5   const {BlockingFilter, | 6   const {BlockingFilter, | 
| 6          ElemHideFilter, | 7          ElemHideFilter, | 
| 7          CommentFilter} = require("filterClasses"); | 8          CommentFilter} = require("filterClasses"); | 
| 8 | 9 | 
| 9   module("Filter validation"); | 10   module("Filter validation"); | 
| 10 | 11 | 
| 11   test("Detecting invalid filters", () => | 12   test("Detecting invalid filters", () => | 
| 12   { | 13   { | 
| 13     equal(parseFilter("||example.com^$unknown").error.type, "invalid-filter", "u
    nknown option"); | 14     equal(parseFilter("||example.com^$unknown").error.type, "invalid-filter", | 
| 14     equal(parseFilter("[foobar]").error.type, "unexpected-filter-list-header", "
    filter list header"); | 15           "unknown option"); | 
| 15     equal(parseFilter("##[foo").error.type, "invalid-css-selector", "invalid sel
    ector"); | 16     equal(parseFilter("[foobar]").error.type, "unexpected-filter-list-header", | 
| 16     ok(/\b4\b/.test(parseFilters("!comment\r\n||example.com^\n\n##/").errors[0])
    , "error contains corresponding line number"); | 17           "filter list header"); | 
|  | 18     equal(parseFilter("##[foo").error.type, "invalid-css-selector", | 
|  | 19           "invalid selector"); | 
|  | 20     ok( | 
|  | 21       /\b4\b/.test(parseFilters("!comment\r\n||example.com^\n\n##/").errors[0]), | 
|  | 22       "error contains corresponding line number" | 
|  | 23     ); | 
| 17   }); | 24   }); | 
| 18 | 25 | 
| 19   test("Allowing valid filters", () => | 26   test("Allowing valid filters", () => | 
| 20   { | 27   { | 
| 21     let text, filter; | 28     let text; | 
|  | 29     let filter; | 
| 22 | 30 | 
| 23     text = "||example.com^"; | 31     text = "||example.com^"; | 
| 24     filter = parseFilter(text).filter; | 32     ({filter} = parseFilter(text)); | 
| 25     ok(filter instanceof BlockingFilter, "blocking filter parsed"); | 33     ok(filter instanceof BlockingFilter, "blocking filter parsed"); | 
| 26     equal(filter.text, text, "blocking filter text matches"); | 34     equal(filter.text, text, "blocking filter text matches"); | 
| 27 | 35 | 
| 28     text = '##div:first-child a[src="http://example.com"] > .foo + #bar'; | 36     text = '##div:first-child a[src="http://example.com"] > .foo + #bar'; | 
| 29     filter = parseFilter(text).filter; | 37     ({filter} = parseFilter(text)); | 
| 30     ok(filter instanceof ElemHideFilter, "elemhide filter parsed"); | 38     ok(filter instanceof ElemHideFilter, "elemhide filter parsed"); | 
| 31     equal(filter.text, text, "elemhide filter text matches"); | 39     equal(filter.text, text, "elemhide filter text matches"); | 
| 32 | 40 | 
| 33     text = "! foo bar"; | 41     text = "! foo bar"; | 
| 34     filter = parseFilter(text).filter; | 42     ({filter} = parseFilter(text)); | 
| 35     ok(filter instanceof CommentFilter, "comment filter parsed"); | 43     ok(filter instanceof CommentFilter, "comment filter parsed"); | 
| 36     equal(filter.text, text, "comment filter text matches"); | 44     equal(filter.text, text, "comment filter text matches"); | 
| 37 | 45 | 
| 38     equal(parseFilter("").filter, null, "empty filter parsed as 'null'"); | 46     equal(parseFilter("").filter, null, "empty filter parsed as 'null'"); | 
| 39   }); | 47   }); | 
| 40 | 48 | 
| 41   test("Normalizing filters", () => | 49   test("Normalizing filters", () => | 
| 42   { | 50   { | 
| 43     let ws = " \t\r\n"; | 51     let ws = " \t\r\n"; | 
| 44 | 52     let filterText = ws + "@@" + ws + "||" + ws + "example.com" + ws + "^" + ws; | 
| 45     equal(parseFilter(ws + "@@" + ws + "||" + ws + "example.com" + ws + "^" + ws
    ).filter.text, "@@||example.com^", "unnecessary spaces"); | 53     equal(parseFilter(filterText).filter.text, "@@||example.com^", | 
|  | 54           "unnecessary spaces"); | 
| 46     equal(parseFilter(ws).filter, null, "only spaces"); | 55     equal(parseFilter(ws).filter, null, "only spaces"); | 
| 47   }); | 56   }); | 
| 48 | 57 | 
| 49   test("Parsing multiple filters", () => | 58   test("Parsing multiple filters", () => | 
| 50   { | 59   { | 
| 51     let result = parseFilters("||example.com^\n \n###foobar\r\n! foo bar\n"); | 60     let result = parseFilters("||example.com^\n \n###foobar\r\n! foo bar\n"); | 
| 52 | 61 | 
| 53     equal(result.errors.length, 0, "no error occurred"); | 62     equal(result.errors.length, 0, "no error occurred"); | 
| 54     equal(result.filters.length, 3, "all filters parsed"); | 63     equal(result.filters.length, 3, "all filters parsed"); | 
| 55 | 64 | 
| 56     ok(result.filters[0] instanceof BlockingFilter, "1st filter is blocking"); | 65     ok(result.filters[0] instanceof BlockingFilter, "1st filter is blocking"); | 
| 57     equal(result.filters[0].text, "||example.com^", "1st filter text matches"); | 66     equal(result.filters[0].text, "||example.com^", "1st filter text matches"); | 
| 58 | 67 | 
| 59     ok(result.filters[1] instanceof ElemHideFilter, "2nd filter is elemhide"); | 68     ok(result.filters[1] instanceof ElemHideFilter, "2nd filter is elemhide"); | 
| 60     equal(result.filters[1].text, "###foobar",      "2nd filter text matches"); | 69     equal(result.filters[1].text, "###foobar", "2nd filter text matches"); | 
| 61 | 70 | 
| 62     ok(result.filters[2] instanceof CommentFilter,  "3rd filter is comment"); | 71     ok(result.filters[2] instanceof CommentFilter, "3rd filter is comment"); | 
| 63     equal(result.filters[2].text, "! foo bar",      "3rd filter text matches"); | 72     equal(result.filters[2].text, "! foo bar", "3rd filter text matches"); | 
| 64   }); | 73   }); | 
| 65 } | 74 }()); | 
| OLD | NEW | 
|---|