addon-sdk/source/python-lib/cuddlefish/tests/test_manifest.py

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 # This Source Code Form is subject to the terms of the Mozilla Public
     2 # License, v. 2.0. If a copy of the MPL was not distributed with this
     3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6 import unittest
     7 from StringIO import StringIO
     8 from cuddlefish.manifest import scan_module
    10 class Extra:
    11     def failUnlessKeysAre(self, d, keys):
    12         self.failUnlessEqual(sorted(d.keys()), sorted(keys))
    14 class Require(unittest.TestCase, Extra):
    15     def scan(self, text):
    16         lines = StringIO(text).readlines()
    17         requires, problems, locations = scan_module("fake.js", lines)
    18         self.failUnlessEqual(problems, False)
    19         return requires
    21     def scan_locations(self, text):
    22         lines = StringIO(text).readlines()
    23         requires, problems, locations = scan_module("fake.js", lines)
    24         self.failUnlessEqual(problems, False)
    25         return requires, locations
    27     def test_modules(self):
    28         mod = """var foo = require('one');"""
    29         requires = self.scan(mod)
    30         self.failUnlessKeysAre(requires, ["one"])
    32         mod = """var foo = require(\"one\");"""
    33         requires = self.scan(mod)
    34         self.failUnlessKeysAre(requires, ["one"])
    36         mod = """var foo=require(  'one' )  ;  """
    37         requires = self.scan(mod)
    38         self.failUnlessKeysAre(requires, ["one"])
    40         mod = """var foo = require('o'+'ne'); // tricky, denied"""
    41         requires = self.scan(mod)
    42         self.failUnlessKeysAre(requires, [])
    44         mod = """require('one').immediately.do().stuff();"""
    45         requires, locations = self.scan_locations(mod)
    46         self.failUnlessKeysAre(requires, ["one"])
    47         self.failUnlessEqual(locations, {"one": 1})
    49         # these forms are commented out, and thus ignored
    51         mod = """// var foo = require('one');"""
    52         requires = self.scan(mod)
    53         self.failUnlessKeysAre(requires, [])
    55         mod = """/* var foo = require('one');"""
    56         requires = self.scan(mod)
    57         self.failUnlessKeysAre(requires, [])
    59         mod = """ * var foo = require('one');"""
    60         requires = self.scan(mod)
    61         self.failUnlessKeysAre(requires, [])
    63         mod = """ ' var foo = require('one');"""
    64         requires = self.scan(mod)
    65         self.failUnlessKeysAre(requires, ["one"])
    67         mod = """ \" var foo = require('one');"""
    68         requires = self.scan(mod)
    69         self.failUnlessKeysAre(requires, ["one"])
    71         # multiple requires
    73         mod = """const foo = require('one');
    74         const foo = require('two');"""
    75         requires, locations = self.scan_locations(mod)
    76         self.failUnlessKeysAre(requires, ["one", "two"])
    77         self.failUnlessEqual(locations["one"], 1)
    78         self.failUnlessEqual(locations["two"], 2)
    80         mod = """const foo = require('repeated');
    81         const bar = require('repeated');
    82         const baz = require('repeated');"""
    83         requires, locations = self.scan_locations(mod)
    84         self.failUnlessKeysAre(requires, ["repeated"])
    85         self.failUnlessEqual(locations["repeated"], 1) # first occurrence
    87         mod = """const foo = require('one'); const foo = require('two');"""
    88         requires = self.scan(mod)
    89         self.failUnlessKeysAre(requires, ["one", "two"])
    91         # define calls
    93         mod = """define('one', ['two', 'numbers/three'], function(t, th) {});"""
    94         requires = self.scan(mod)
    95         self.failUnlessKeysAre(requires, ["two", "numbers/three"])
    97         mod = """define(
    98         ['odd',
    99         "numbers/four"], function() {});"""
   100         requires = self.scan(mod)
   101         self.failUnlessKeysAre(requires, ["odd", "numbers/four"])
   103         mod = """define(function(require, exports, module) {
   104                 var a = require("some/module/a"),
   105                     b = require('b/v1');
   106                 exports.a = a;
   107                 //This is a fakeout: require('bad');
   108                 /* And another var bad = require('bad2'); */
   109                 require('foo').goFoo();
   110             });"""
   111         requires = self.scan(mod)
   112         self.failUnlessKeysAre(requires, ["some/module/a", "b/v1", "foo"])
   114         mod = """define (
   115             "foo",
   116             ["bar"], function (bar) {
   117                 var me = require("me");
   118             }
   119         )"""
   120         requires = self.scan(mod)
   121         self.failUnlessKeysAre(requires, ["bar", "me"])
   123         mod = """define(['se' + 'ven', 'eight', nine], function () {});"""
   124         requires = self.scan(mod)
   125         self.failUnlessKeysAre(requires, ["eight"])
   127         # async require calls
   129         mod = """require(['one'], function(one) {var o = require("one");});"""
   130         requires = self.scan(mod)
   131         self.failUnlessKeysAre(requires, ["one"])
   133         mod = """require([  'one' ], function(one) {var t = require("two");});"""
   134         requires = self.scan(mod)
   135         self.failUnlessKeysAre(requires, ["one", "two"])
   137         mod = """require ( ['two', 'numbers/three'], function(t, th) {});"""
   138         requires = self.scan(mod)
   139         self.failUnlessKeysAre(requires, ["two", "numbers/three"])
   141         mod = """require (
   142             ["bar", "fa" + 'ke'  ], function (bar) {
   143                 var me = require("me");
   144                 // require("bad").doBad();
   145             }
   146         )"""
   147         requires = self.scan(mod)
   148         self.failUnlessKeysAre(requires, ["bar", "me"])
   150 def scan2(text, fn="fake.js"):
   151     stderr = StringIO()
   152     lines = StringIO(text).readlines()
   153     requires, problems, locations = scan_module(fn, lines, stderr)
   154     stderr.seek(0)
   155     return requires, problems, stderr.readlines()
   157 class Chrome(unittest.TestCase, Extra):
   159     def test_ignore_loader(self):
   160         # we specifically ignore the loader itself
   161         mod = """let {Cc,Ci} = require('chrome');"""
   162         requires, problems, err = scan2(mod, "blah/cuddlefish.js")
   163         self.failUnlessKeysAre(requires, ["chrome"])
   164         self.failUnlessEqual(problems, False)
   165         self.failUnlessEqual(err, [])
   167     def test_chrome(self):
   168         mod = """let {Cc,Ci} = require('chrome');"""
   169         requires, problems, err = scan2(mod)
   170         self.failUnlessKeysAre(requires, ["chrome"])
   171         self.failUnlessEqual(problems, False)
   172         self.failUnlessEqual(err, [])
   174         mod = """var foo = require('foo');
   175         let {Cc,Ci} = require('chrome');"""
   176         requires, problems, err = scan2(mod)
   177         self.failUnlessKeysAre(requires, ["foo", "chrome"])
   178         self.failUnlessEqual(problems, False)
   179         self.failUnlessEqual(err, [])
   181         mod = """let c = require('chrome');"""
   182         requires, problems, err = scan2(mod)
   183         self.failUnlessKeysAre(requires, ["chrome"])
   184         self.failUnlessEqual(problems, False)
   185         self.failUnlessEqual(err, [])
   187         mod = """var foo = require('foo');
   188         let c = require('chrome');"""
   189         requires, problems, err = scan2(mod)
   190         self.failUnlessKeysAre(requires, ["foo", "chrome"])
   191         self.failUnlessEqual(problems, False)
   192         self.failUnlessEqual(err, [])
   194     def test_not_chrome(self):
   195         # from bug 596595
   196         mod = r'soughtLines: new RegExp("^\\s*(\\[[0-9 .]*\\])?\\s*\\(\\((EE|WW)\\)|.* [Cc]hipsets?: \\)|\\s*Backtrace")'
   197         requires, problems, err = scan2(mod)
   198         self.failUnlessKeysAre(requires, [])
   199         self.failUnlessEqual((problems,err), (False, []))
   201     def test_not_chrome2(self):
   202         # from bug 655788
   203         mod = r"var foo = 'some stuff Cr';"
   204         requires, problems, err = scan2(mod)
   205         self.failUnlessKeysAre(requires, [])
   206         self.failUnlessEqual((problems,err), (False, []))
   208 class BadChrome(unittest.TestCase, Extra):
   209     def test_bad_alias(self):
   210         # using Components.* gets you an error, with a message that teaches
   211         # you the correct approach.
   212         mod = """let Cc = Components.classes;
   213         let Cu = Components.utils;
   214         """
   215         requires, problems, err = scan2(mod)
   216         self.failUnlessKeysAre(requires, [])
   217         self.failUnlessEqual(problems, True)
   218         self.failUnlessEqual(err[1], "The following lines from file fake.js:\n")
   219         self.failUnlessEqual(err[2], "   1: let Cc = Components.classes;\n")
   220         self.failUnlessEqual(err[3], "   2: let Cu = Components.utils;\n")
   221         self.failUnlessEqual(err[4], "use 'Components' to access chrome authority. To do so, you need to add a\n")
   222         self.failUnlessEqual(err[5], "line somewhat like the following:\n")
   223         self.failUnlessEqual(err[7], '  const {Cc,Cu} = require("chrome");\n')
   224         self.failUnlessEqual(err[9], "Then you can use any shortcuts to its properties that you import from the\n")
   226     def test_bad_misc(self):
   227         # If it looks like you're using something that doesn't have an alias,
   228         # the warning also suggests a better way.
   229         mod = """if (Components.isSuccessCode(foo))
   230         """
   231         requires, problems, err = scan2(mod)
   232         self.failUnlessKeysAre(requires, [])
   233         self.failUnlessEqual(problems, True)
   234         self.failUnlessEqual(err[1], "The following lines from file fake.js:\n")
   235         self.failUnlessEqual(err[2], "   1: if (Components.isSuccessCode(foo))\n")
   236         self.failUnlessEqual(err[3], "use 'Components' to access chrome authority. To do so, you need to add a\n")
   237         self.failUnlessEqual(err[4], "line somewhat like the following:\n")
   238         self.failUnlessEqual(err[6], '  const {components} = require("chrome");\n')
   239         self.failUnlessEqual(err[8], "Then you can use any shortcuts to its properties that you import from the\n")
   241     def test_chrome_components(self):
   242         # Bug 636145/774636: We no longer tolerate usages of "Components",
   243         # even when adding `require("chrome")` to your module.
   244         mod = """require("chrome");
   245         var ios = Components.classes['@mozilla.org/network/io-service;1'];"""
   246         requires, problems, err = scan2(mod)
   247         self.failUnlessKeysAre(requires, ["chrome"])
   248         self.failUnlessEqual(problems, True)
   249         self.failUnlessEqual(err[1], "The following lines from file fake.js:\n")
   250         self.failUnlessEqual(err[2], "   2: var ios = Components.classes['@mozilla.org/network/io-service;1'];\n")
   251         self.failUnlessEqual(err[3], "use 'Components' to access chrome authority. To do so, you need to add a\n")
   252         self.failUnlessEqual(err[4], "line somewhat like the following:\n")
   253         self.failUnlessEqual(err[6], '  const {Cc} = require("chrome");\n')
   254         self.failUnlessEqual(err[8], "Then you can use any shortcuts to its properties that you import from the\n")
   256 if __name__ == '__main__':
   257     unittest.main()

mercurial