diff --git a/cuddlefish/tests/__init__.py b/cuddlefish/tests/__init__.py
deleted file mode 100644
index 6a53d323..00000000
--- a/cuddlefish/tests/__init__.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import os
-import unittest
-import doctest
-import glob
-
-env_root = os.environ['CUDDLEFISH_ROOT']
-
-def get_tests():
- import cuddlefish
- import cuddlefish.tests
-
- tests = []
- packages = [cuddlefish, cuddlefish.tests]
- for package in packages:
- path = os.path.abspath(package.__path__[0])
- pynames = glob.glob(os.path.join(path, '*.py'))
- for filename in pynames:
- basename = os.path.basename(filename)
- module_name = os.path.splitext(basename)[0]
- full_name = "%s.%s" % (package.__name__, module_name)
- module = __import__(full_name, fromlist=[package.__name__])
-
- loader = unittest.TestLoader()
- suite = loader.loadTestsFromModule(module)
- for test in suite:
- tests.append(test)
-
- finder = doctest.DocTestFinder()
- doctests = finder.find(module)
- for test in doctests:
- if len(test.examples) > 0:
- tests.append(doctest.DocTestCase(test))
-
- md_dir = os.path.join(env_root, 'static-files', 'md')
- doctest_opts = (doctest.NORMALIZE_WHITESPACE |
- doctest.REPORT_UDIFF)
- for dirpath, dirnames, filenames in os.walk(md_dir):
- for filename in filenames:
- if filename.endswith('.md'):
- absname = os.path.join(dirpath, filename)
- tests.append(doctest.DocFileTest(
- absname,
- module_relative=False,
- optionflags=doctest_opts
- ))
-
- return tests
-
-def run(verbose=False):
- if verbose:
- verbosity = 2
- else:
- verbosity = 1
-
- tests = get_tests()
- suite = unittest.TestSuite(tests)
- runner = unittest.TextTestRunner(verbosity=verbosity)
- return runner.run(suite)
-
-if __name__ == '__main__':
- run()
diff --git a/cuddlefish/tests/bug-588661-files/packages/bar/lib/bar-loader.js b/cuddlefish/tests/bug-588661-files/packages/bar/lib/bar-loader.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/cuddlefish/tests/bug-588661-files/packages/bar/package.json b/cuddlefish/tests/bug-588661-files/packages/bar/package.json
deleted file mode 100644
index e83a9d42..00000000
--- a/cuddlefish/tests/bug-588661-files/packages/bar/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "loader": "lib/bar-loader.js"
-}
diff --git a/cuddlefish/tests/bug-588661-files/packages/foo/lib/foo-loader.js b/cuddlefish/tests/bug-588661-files/packages/foo/lib/foo-loader.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/cuddlefish/tests/bug-588661-files/packages/foo/package.json b/cuddlefish/tests/bug-588661-files/packages/foo/package.json
deleted file mode 100644
index 4648df67..00000000
--- a/cuddlefish/tests/bug-588661-files/packages/foo/package.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "loader": "lib/foo-loader.js",
- "dependencies": ["bar"]
-}
diff --git a/cuddlefish/tests/static-files/docs/APIsample.md b/cuddlefish/tests/static-files/docs/APIsample.md
deleted file mode 100644
index e2a7a3ad..00000000
--- a/cuddlefish/tests/static-files/docs/APIsample.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Title #
-
-Some text here
-
-
-@method
-This is a function which does nothing in particular.
-@returns {object}
- @prop firststring {string} First string
- @prop firsturl {url} First URL
-@param argOne {string} This is the first argument.
-@param [argTwo] {bool} This is the second argument.
-@param [argThree=default] {uri}
- This is the third and final argument. And this is
- a test of the ability to do multiple lines of
- text.
-@param [options] Options Bag
- @prop [style] {string} Some style information.
- @prop [secondToLastOption=True] {bool} The last property.
- @prop [lastOption] {uri}
- And this time we have
- A multiline description
- Written as haiku
-
-
-This text appears between the API blocks.
-
-
-@method
-This is a list of options to specify modifications to your slideBar instance.
-@param options
- Pass in all of your options here.
- @prop [icon] {uri} The HREF of an icon to show as the method of accessing your features slideBar
- @prop [html] {string/xml}
- The content of the feature, either as an HTML string,
- or an E4X document fragment (e.g., <>Hi!
>)
- @prop [url] {uri} The url to load into the content area of the feature
- @prop [width] {int} Width of the content area and the selected slide size
- @prop [persist] {bool}
- Default slide behavior when being selected as follows:
- If true: blah; If false: double blah.
- @prop [autoReload] {bool} Automatically reload content on select
- @prop [onClick] {function} Callback when the icon is clicked
- @prop [onSelect] {function} Callback when the feature is selected
- @prop [onReady] {function} Callback when featured is loaded
-
-
-Wooo, more text.
-
-
-@constructor
-@returns {string} A value telling you just how cool you are.
-A boa-constructor!
-This description can go on for a while, and can even contain
-some **realy** fancy things. Like `code`, or even
-~~~~{.javascript}
-// Some code!
-~~~~
-@param howMuch {string} How much cool it is.
-@param [double=true] {bool}
- In case you just really need to double it.
-@param [options] An object-bag of goodies.
- @prop callback {function} The callback
- @prop [random] {bool} Do something random?
-@param [onemore] {bool} One more paramater
-@param [options2]
- This is a full description of something
- that really sucks. Because I now have a multiline
- description of this thingy.
- @prop monkey {string} You heard me right
- @prop [freak=true] {bool}
- Yes, you are a freak.
-
-
-
-@method
-A function that returns a random integer between 0 and 10.
-@returns {int} The random number.
-
-
-Some more text here.
-
diff --git a/cuddlefish/tests/static-files/packages/aardvark/lib/main.js b/cuddlefish/tests/static-files/packages/aardvark/lib/main.js
deleted file mode 100644
index 0591fe0f..00000000
--- a/cuddlefish/tests/static-files/packages/aardvark/lib/main.js
+++ /dev/null
@@ -1,4 +0,0 @@
-exports.main = function(options, callbacks) {
- console.log("1 + 1 =", require("bar-module").add(1, 1));
- callbacks.quit();
-};
diff --git a/cuddlefish/tests/static-files/packages/aardvark/package.json b/cuddlefish/tests/static-files/packages/aardvark/package.json
deleted file mode 100644
index ed951bf8..00000000
--- a/cuddlefish/tests/static-files/packages/aardvark/package.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "description": "A package w/ a main module; can be built into an extension.",
- "dependencies": ["jetpack-core", "barbeque"]
-}
diff --git a/cuddlefish/tests/static-files/packages/barbeque/lib/bar-module.js b/cuddlefish/tests/static-files/packages/barbeque/lib/bar-module.js
deleted file mode 100644
index 44a9a439..00000000
--- a/cuddlefish/tests/static-files/packages/barbeque/lib/bar-module.js
+++ /dev/null
@@ -1,3 +0,0 @@
-exports.add = function add(a, b) {
- return a + b;
-};
diff --git a/cuddlefish/tests/static-files/packages/barbeque/package.json b/cuddlefish/tests/static-files/packages/barbeque/package.json
deleted file mode 100644
index b47048c4..00000000
--- a/cuddlefish/tests/static-files/packages/barbeque/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "description": "A package used by 'aardvark' as a library."
-}
diff --git a/cuddlefish/tests/static-files/packages/jetpack-core/lib/loader.js b/cuddlefish/tests/static-files/packages/jetpack-core/lib/loader.js
deleted file mode 100644
index d1153499..00000000
--- a/cuddlefish/tests/static-files/packages/jetpack-core/lib/loader.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// This module will be imported by the XPCOM harness/boostrapper
-// via Components.utils.import() and is responsible for creating a
-// CommonJS module loader.
diff --git a/cuddlefish/tests/static-files/packages/jetpack-core/package.json b/cuddlefish/tests/static-files/packages/jetpack-core/package.json
deleted file mode 100644
index 6a8fe48b..00000000
--- a/cuddlefish/tests/static-files/packages/jetpack-core/package.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "description": "A foundational package that provides a CommonJS module loader implementation.",
- "loader": "lib/loader.js"
-}
diff --git a/cuddlefish/tests/static-files/xpi-template/components/harness.js b/cuddlefish/tests/static-files/xpi-template/components/harness.js
deleted file mode 100644
index c272b27d..00000000
--- a/cuddlefish/tests/static-files/xpi-template/components/harness.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// This file contains XPCOM code that bootstraps a
-// Jetpack-based extension by loading its harness-options.json,
-// registering all its resource directories, executing its loader,
-// and then executing its main module's main() function.
diff --git a/cuddlefish/tests/test_apiparser.py b/cuddlefish/tests/test_apiparser.py
deleted file mode 100644
index f4ac960e..00000000
--- a/cuddlefish/tests/test_apiparser.py
+++ /dev/null
@@ -1,394 +0,0 @@
-
-import os
-import unittest
-from cuddlefish.apiparser import parse_hunks, ParseError
-
-tests_path = os.path.abspath(os.path.dirname(__file__))
-static_files_path = os.path.join(tests_path, "static-files")
-
-class ParserTests(unittest.TestCase):
- def pathname(self, filename):
- return os.path.join(static_files_path, "docs", filename)
-
- def parse_text(self, text):
- return list(parse_hunks(text))
-
- def parse(self, pathname):
- return self.parse_text(open(pathname).read())
-
- def test_parser(self):
- parsed = self.parse(self.pathname("APIsample.md"))
- #for i,h in enumerate(parsed):
- # print i, h
- self.assertEqual(parsed[0],
- ("markdown", "# Title #\n\nSome text here\n\n"))
- self.assertEqual(parsed[1][0], "api-json")
- p_test = parsed[1][1]
- self.assertEqual(p_test["name"], "test")
- self.assertEqual(p_test["type"], "method")
- self.assertEqual(p_test["description"],
- "This is a function which does nothing in particular.")
- r = p_test["returns"]
- self.assertEqual(r["type"], "object")
- self.assertEqual(r["description"], "")
- self.assertEqual(len(r["props"]), 2)
- self.assertEqual(r["props"][0]["type"], "string")
- self.assertEqual(r["props"][0]["description"], "First string")
- self.assertEqual(r["props"][1]["type"], "url")
- self.assertEqual(r["props"][1]["description"], "First URL")
-
- self.assertEqual(p_test["params"][0],
- {"name": "argOne",
- "required": True,
- "type": "string",
- "description": "This is the first argument.",
- "line_number": 11,
- })
-
- self.assertEqual(p_test["params"][1],
- {"name": "argTwo",
- "required": False,
- "type": "bool",
- "description": "This is the second argument.",
- "line_number": 12,
- })
-
- self.assertEqual(p_test["params"][2],
- {"name": "argThree",
- "required": False,
- "default": "default",
- "type": "uri",
- "line_number": 13,
- "description": """\
-This is the third and final argument. And this is
-a test of the ability to do multiple lines of
-text.""",
- })
- p3 = p_test["params"][3]
- self.assertEqual(p3["name"], "options")
- self.assertEqual(p3["required"], False)
- self.failIf("type" in p3)
- self.assertEqual(p3["description"], "Options Bag")
- self.assertEqual(p3["props"][0],
- {"name": "style",
- "required": False,
- "type": "string",
- "description": "Some style information.",
- "line_number": 18,
- })
- self.assertEqual(p3["props"][1],
- {"name": "secondToLastOption",
- "required": False,
- "default": "True",
- "type": "bool",
- "description": "The last property.",
- "line_number": 19,
- })
- self.assertEqual(p3["props"][2]["name"], "lastOption")
- self.assertEqual(p3["props"][2]["required"], False)
- self.assertEqual(p3["props"][2]["type"], "uri")
- self.assertEqual(p3["props"][2]["description"], """\
-And this time we have
-A multiline description
-Written as haiku""")
-
- self.assertEqual(parsed[2][0], "markdown")
- self.assertEqual(parsed[2][1], "\n\nThis text appears between the API blocks.\n\n")
-
- self.assertEqual(parsed[3][0], "api-json")
- p_test = parsed[3][1]
-
- expected = {'description': 'This is a list of options to specify modifications to your slideBar instance.',
- "line_number": 28,
- 'name': 'append',
- 'params': [{'description': 'Pass in all of your options here.',
- 'name': 'options',
- "line_number": 31,
- 'props': [{'description': 'The HREF of an icon to show as the method of accessing your features slideBar',
- 'name': 'icon',
- "line_number": 33,
- 'required': False,
- 'type': 'uri'},
- {'description': 'The content of the feature, either as an HTML string,\nor an E4X document fragment (e.g., <>
Hi!
>)',
- 'name': 'html',
- "line_number": 34,
- 'required': False,
- 'type': 'string/xml'},
- {'description': 'The url to load into the content area of the feature',
- 'name': 'url',
- "line_number": 37,
- 'required': False,
- 'type': 'uri'},
- {'description': 'Width of the content area and the selected slide size',
- 'name': 'width',
- "line_number": 38,
- 'required': False,
- 'type': 'int'},
- {'description': 'Default slide behavior when being selected as follows:\nIf true: blah; If false: double blah.',
- 'name': 'persist',
- "line_number": 39,
- 'required': False,
- 'type': 'bool'},
- {'description': 'Automatically reload content on select',
- 'name': 'autoReload',
- "line_number": 42,
- 'required': False,
- 'type': 'bool'},
- {'description': 'Callback when the icon is clicked',
- 'name': 'onClick',
- "line_number": 43,
- 'required': False,
- 'type': 'function'},
- {'description': 'Callback when the feature is selected',
- 'name': 'onSelect',
- "line_number": 44,
- 'required': False,
- 'type': 'function'},
- {'description': 'Callback when featured is loaded',
- 'name': 'onReady',
- "line_number": 45,
- 'required': False,
- 'type': 'function'}],
- 'required': True}],
- 'type': 'method'}
- self.assertEqual(p_test, expected)
-
- self.assertEqual(parsed[5][0], "api-json")
- p_test = parsed[5][1]
- self.assertEqual(p_test["name"], "cool-func.dot")
- self.assertEqual(p_test["returns"]["description"],
- """\
-A value telling you just how cool you are.
-A boa-constructor!
-This description can go on for a while, and can even contain
-some **realy** fancy things. Like `code`, or even
-~~~~{.javascript}
-// Some code!
-~~~~""")
- self.assertEqual(p_test["params"][2]["props"][0],
- {"name": "callback",
- "required": True,
- "type": "function",
- "line_number": 63,
- "description": "The callback",
- })
- self.assertEqual(p_test["params"][2]["props"][1],
- {"name": "random",
- "required": False,
- "type": "bool",
- "line_number": 64,
- "description": "Do something random?",
- })
-
- self.assertEqual(parsed[8][0], "markdown")
- self.assertEqual(parsed[8][1], "\n\nSome more text here.\n\n")
-
- def test_missing_return_propname(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns {object}
- @prop {string} First string, but the property name is missing
- @prop {url} First URL, same problem
-@param argOne {string} This is the first argument.
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_missing_return_proptype(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns {object}
- @prop untyped It is an error to omit the type of a return property.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_return_propnames(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns {object}
- @prop firststring {string} First string.
- @prop [firsturl] {url} First URL, not always provided.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- parsed = self.parse_text(md)
- r = parsed[0][1]["returns"]
- self.assertEqual(r["props"][0]["name"], "firststring")
- self.assertEqual(r["props"][0],
- {"name": "firststring",
- "type": "string",
- "description": "First string.",
- "required": True,
- "line_number": 5, # 1-indexed
- })
- self.assertEqual(r["props"][1],
- {"name": "firsturl",
- "type": "url",
- "description": "First URL, not always provided.",
- "required": False,
- "line_number": 6,
- })
-
- def test_return_description_1(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns {object} A one-line description.
- @prop firststring {string} First string.
- @prop [firsturl] {url} First URL, not always provided.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- parsed = self.parse_text(md)
- r = parsed[0][1]["returns"]
- self.assertEqual(r["description"], "A one-line description.")
-
- def test_return_description_2(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns {object} A six-line description
- which is consistently indented by two spaces
- except for this line
- and preserves the following empty line
-
- from which a two-space indentation will be removed.
- @prop firststring {string} First string.
- @prop [firsturl] {url} First URL, not always provided.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- parsed = self.parse_text(md)
- r = parsed[0][1]["returns"]
- self.assertEqual(r["description"],
- "A six-line description\n"
- "which is consistently indented by two spaces\n"
- " except for this line\n"
- "and preserves the following empty line\n"
- "\n"
- "from which a two-space indentation will be removed.")
-
- def test_return_description_3(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns A one-line untyped description.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- parsed = self.parse_text(md)
- r = parsed[0][1]["returns"]
- self.assertEqual(r["description"], "A one-line untyped description.")
-
- # if the return value was supposed to be an array, the correct syntax
- # would not have any @prop tags:
- # @returns {array}
- # Array consists of two elements, a string and a url...
-
- def test_return_array(self):
- md = '''\
-
-@method
-This is a function which returns an array.
-@returns {array}
- Array consists of two elements, a string and a url.
-@param argOne {string} This is the first argument.
-@param [argTwo=True] {bool} This is the second argument.
-
-'''
- parsed = self.parse_text(md)
- r = parsed[0][1]["returns"]
- self.assertEqual(r["description"],
- "Array consists of two elements, a string and a url.")
-
- def test_bad_default_on_required_parameter(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@returns something
-@param argOne=ILLEGAL {string} Mandatory parameters do not take defaults.
-@param [argTwo=Chicago] {string} This is the second argument.
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_missing_apitype(self):
- md = '''\
-
-Sorry, you must have a @method or something before the description.
-Putting it after the description is not good enough
-@method
-@returns something
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_missing_param_propname(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@param p1 {object} This is a parameter.
- @prop {string} Oops, props must have a name.
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_missing_param_proptype(self):
- md = '''\
-
-@method
-This is a function which does nothing in particular.
-@param p1 {object} This is a parameter.
- @prop name Oops, props must have a type.
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
- def test_property(self):
- md = '''\
-
-@property {foo}
-An object property named test of type foo.
-
-'''
- parsed = self.parse_text(md)
- self.assertEqual(parsed[0][0], 'api-json')
- actual_api_json_obj = parsed[0][1]
- expected_api_json_obj = {
- 'line_number': 1,
- 'property_type': 'foo',
- 'type': 'property',
- 'name': 'test',
- 'description': "An object property named test of type foo."
- }
- self.assertEqual(actual_api_json_obj, expected_api_json_obj)
-
- def test_property_no_type(self):
- md = '''\
-
-@property
-This property needs to specify a type!
-
-'''
- self.assertRaises(ParseError, self.parse_text, md)
-
-if __name__ == "__main__":
- unittest.main()
diff --git a/cuddlefish/tests/test_manifest.py b/cuddlefish/tests/test_manifest.py
deleted file mode 100644
index a2e2f47d..00000000
--- a/cuddlefish/tests/test_manifest.py
+++ /dev/null
@@ -1,206 +0,0 @@
-
-import os
-import unittest
-from StringIO import StringIO
-from cuddlefish.manifest import scan_module, scan_package
-
-class Require(unittest.TestCase):
- def scan(self, text):
- lines = StringIO(text).readlines()
- requires, chrome, problems = scan_module("fake.js", lines)
- self.failUnlessEqual(problems, False)
- return requires, chrome
-
- def test_modules(self):
- mod = """var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one"])
- self.failUnlessEqual(chrome, False)
-
- mod = """var foo = require(\"one\");"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one"])
- self.failUnlessEqual(chrome, False)
-
- mod = """var foo=require( 'one' ) ; """
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one"])
- self.failUnlessEqual(chrome, False)
-
- mod = """var foo = require('o'+'ne'); // tricky, denied"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- mod = """require('one').immediately.do().stuff();"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one"])
- self.failUnlessEqual(chrome, False)
-
- # these forms are commented out, and thus ignored
-
- mod = """// var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- mod = """/* var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- mod = """ * var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- mod = """ ' var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- mod = """ \" var foo = require('one');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
-
- # multiple requires
-
- mod = """const foo = require('one');
- const foo = require('two');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one", "two"])
- self.failUnlessEqual(chrome, False)
-
- mod = """const foo = require('one'); const foo = require('two');"""
- requires, chrome = self.scan(mod)
- self.failUnlessEqual(requires, ["one", "two"])
- self.failUnlessEqual(chrome, False)
-
-def scan2(text, fn="fake.js"):
- stderr = StringIO()
- lines = StringIO(text).readlines()
- requires, chrome, problems = scan_module(fn, lines, stderr)
- stderr.seek(0)
- return requires, chrome, problems, stderr.readlines()
-
-class Chrome(unittest.TestCase):
-
- def test_ignore_loader(self):
- # we specifically ignore the two loader files
- mod = """let {Cc,Ci} = require('chrome');"""
- requires, chrome, problems, err = scan2(mod, "blah/cuddlefish.js")
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
- mod = """let {Cc,Ci} = require('chrome');"""
- requires, chrome, problems, err = scan2(mod, "securable-module.js")
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
- def test_chrome(self):
- mod = """let {Cc,Ci} = require('chrome');"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, True)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
- mod = """var foo = require('foo');
- let {Cc,Ci} = require('chrome');"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, ["foo"])
- self.failUnlessEqual(chrome, True)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
- mod = """let c = require('chrome');"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, True)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
- mod = """var foo = require('foo');
- let c = require('chrome');"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, ["foo"])
- self.failUnlessEqual(chrome, True)
- self.failUnlessEqual(problems, False)
- self.failUnlessEqual(err, [])
-
-class BadChrome(unittest.TestCase):
- def test_bad_alias(self):
- # using Components.* gets you a warning. If it looks like you're
- # using it to build an alias, the warning suggests a better way.
- mod = """let Cc = Components.classes;"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
- self.failUnlessEqual(problems, True)
- self.failUnlessEqual(err[1], "To use chrome authority, as in:\n")
- self.failUnlessEqual(err[-1], ' const {Cc} = require("chrome");\n')
-
- def test_bad_misc(self):
- # If it looks like you're using something that doesn't have an alias,
- # the warning also suggests a better way.
- mod = """if (Components.isSuccessCode(foo))"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
- self.failUnlessEqual(problems, True)
- self.failUnlessEqual(err[1], "To use chrome authority, as in:\n")
- self.failUnlessEqual(err[-1],
- ' const {components} = require("chrome");\n')
-
- mod = """let CID = Components.ID""" # not one of the usual aliases
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, False)
- self.failUnlessEqual(problems, True)
- self.failUnlessEqual(err[1], "To use chrome authority, as in:\n")
- self.failUnlessEqual(err[-1],
- ' const {components} = require("chrome");\n')
-
- def test_use_too_much(self):
- # if you use more than you ask for, you also get a warning
- mod = """let {Cc,Ci} = require('chrome');
- Cu.something();"""
- requires, chrome, problems, err = scan2(mod)
- self.failUnlessEqual(requires, [])
- self.failUnlessEqual(chrome, True)
- self.failUnlessEqual(problems, True)
- err = "".join(err)
- self.failUnless("To use chrome authority, as in:" in err, err)
- self.failUnless("2> Cu.something()" in err, err)
- self.failUnless("You must enable it with something like:" in err, err)
- self.failUnless('const {Cc,Ci,Cu} = require("chrome");' in err, err)
-
-class Package(unittest.TestCase):
- def test_bug_596573(self):
- jp_tests = "packages/jetpack-core/tests"
- manifest, has_problems = scan_package("tests", jp_tests)
- found = [modname
- for pkgname, modname, deps, needschrome in manifest
- if modname == "interoperablejs-read-only/compliance/" +
- "nested/a/b/c/d"]
- self.failUnless(len(found) == 1)
-
- def test_jetpack_core(self):
- # this has a side-effect of asserting that all the SDK's jetpack-core
- # modules are clean.
- jp_core = "packages/jetpack-core/lib"
- assert os.path.isdir(jp_core) # we expect to be run from the SDK top
- stderr = StringIO()
- manifest, has_problems = scan_package("jetpack-core", jp_core, stderr)
- stderr.seek(0)
- err = stderr.readlines()
- self.failUnlessEqual(err, [], "".join(err))
- self.failUnlessEqual(has_problems, False)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/cuddlefish/tests/test_packaging.py b/cuddlefish/tests/test_packaging.py
deleted file mode 100644
index 580b7657..00000000
--- a/cuddlefish/tests/test_packaging.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import os
-import unittest
-
-from cuddlefish import packaging
-from cuddlefish.bunch import Bunch
-
-tests_path = os.path.abspath(os.path.dirname(__file__))
-static_files_path = os.path.join(tests_path, 'static-files')
-
-def get_configs(pkg_name, dirname='static-files'):
- root_path = os.path.join(tests_path, dirname)
- pkg_path = os.path.join(root_path, 'packages', pkg_name)
- if not (os.path.exists(pkg_path) and os.path.isdir(pkg_path)):
- raise Exception('path does not exist: %s' % pkg_path)
- target_cfg = packaging.get_config_in_dir(pkg_path)
- pkg_cfg = packaging.build_config(root_path, target_cfg)
- deps = packaging.get_deps_for_targets(pkg_cfg, [pkg_name])
- build = packaging.generate_build_for_target(
- pkg_cfg=pkg_cfg,
- target=pkg_name,
- deps=deps,
- prefix='guid-'
- )
- return Bunch(target_cfg=target_cfg, pkg_cfg=pkg_cfg, build=build)
-
-class PackagingTests(unittest.TestCase):
- def test_bug_588661(self):
- configs = get_configs('foo', 'bug-588661-files')
- self.assertEqual(configs.build.loader,
- 'resource://guid-foo-lib/foo-loader.js')
-
- def test_basic(self):
- configs = get_configs('aardvark')
- packages = configs.pkg_cfg.packages
-
- self.assertTrue('jetpack-core' in packages)
- self.assertTrue('aardvark' in packages)
- self.assertTrue('jetpack-core' in packages.aardvark.dependencies)
- self.assertEqual(packages['jetpack-core'].loader, 'lib/loader.js')
- self.assertTrue(packages.aardvark.main == 'main')
diff --git a/cuddlefish/tests/test_preflight.py b/cuddlefish/tests/test_preflight.py
deleted file mode 100644
index f5f70a1d..00000000
--- a/cuddlefish/tests/test_preflight.py
+++ /dev/null
@@ -1,162 +0,0 @@
-
-import os, shutil
-import simplejson as json
-import unittest
-import hashlib
-import base64
-from cuddlefish import preflight
-from StringIO import StringIO
-
-class Util(unittest.TestCase):
- def get_basedir(self):
- return os.path.join("_test_tmp", self.id())
- def make_basedir(self):
- basedir = self.get_basedir()
- if os.path.isdir(basedir):
- here = os.path.abspath(os.getcwd())
- assert os.path.abspath(basedir).startswith(here) # safety
- shutil.rmtree(basedir)
- os.makedirs(basedir)
- return basedir
-
- def test_base32(self):
- for l in range(1, 100):
- text = "a" * l
- encoded = preflight.my_b32encode(text)
- decoded = preflight.my_b32decode(encoded)
- self.assertEqual(text, decoded, (text, encoded, decoded))
-
- def test_base62(self):
- for i in range(1000):
- h = hashlib.sha1(str(i)).digest()
- s1 = base64.b64encode(h, "AB").strip("=")
- s2 = base64.b64encode(h).strip("=").replace("+","A").replace("/","B")
- self.failUnlessEqual(s1, s2)
-
- def test_remove_prefix(self):
- self.assertEqual(preflight.remove_prefix("jid0-stuff", "jid0-", "err"),
- "stuff")
- self.assertRaises(ValueError, preflight.remove_prefix,
- "missing-prefix", "jid0-", "errmsg")
-
- def write(self, config):
- basedir = self.get_basedir()
- fn = os.path.join(basedir, "package.json")
- open(fn,"w").write(config)
- def read(self):
- basedir = self.get_basedir()
- fn = os.path.join(basedir, "package.json")
- return open(fn,"r").read()
-
- def get_cfg(self):
- cfg = json.loads(self.read())
- if "name" not in cfg:
- # the cfx parser always provides a name, even if package.json
- # doesn't contain one
- cfg["name"] = "pretend name"
- return cfg
-
- def parse(self, keydata):
- fields = {}
- fieldnames = []
- for line in keydata.split("\n"):
- if line.strip():
- k,v = line.split(":", 1)
- k = k.strip() ; v = v.strip()
- fields[k] = v
- fieldnames.append(k)
- return fields, fieldnames
-
- def test_no_name(self):
- basedir = self.make_basedir()
- fn = os.path.join(basedir, "package.json")
- keydir = os.path.join(basedir, "keys")
-
- # empty config is not ok: need id (name is automatically supplied)
- config_orig = "{}"
- self.write(config_orig)
- out = StringIO()
- cfg = self.get_cfg()
- config_was_ok, modified = preflight.preflight_config(cfg, fn,
- stderr=out,
- keydir=keydir)
- self.failUnlessEqual(config_was_ok, False)
- self.failUnlessEqual(modified, True)
- backup_fn = os.path.join(basedir, "package.json.backup")
- config_backup = open(backup_fn,"r").read()
- self.failUnlessEqual(config_backup, config_orig)
- config = json.loads(self.read())
- self.failIf("name" in config)
- self.failUnless("id" in config)
- self.failUnlessEqual(out.getvalue().strip(),
- "No 'id' in package.json: creating a new keypair for you.")
- jid = str(config["id"])
- keyfile = os.path.join(keydir, jid)
- fields, fieldnames = self.parse(open(keyfile).read())
- self.failUnlessEqual(fieldnames[0], "private-key")
- privkey = fields["private-key"]
- self.failUnless(privkey.startswith("private-jid0-"), privkey)
- self.failUnlessEqual(fields["jid"], jid)
- self.failUnlessEqual(fields["name"], "pretend name")
- os.unlink(backup_fn)
-
- # just a name? we add the id
- config_orig = '{"name": "my-awesome-package"}'
- self.write(config_orig)
- out = StringIO()
- cfg = self.get_cfg()
- config_was_ok, modified = preflight.preflight_config(cfg, fn,
- stderr=out,
- keydir=keydir)
- self.failUnlessEqual(config_was_ok, False)
- self.failUnlessEqual(modified, True)
- backup_fn = os.path.join(basedir, "package.json.backup")
- config_backup = open(backup_fn,"r").read()
- self.failUnlessEqual(config_backup, config_orig)
- config = json.loads(self.read())
- self.failUnlessEqual(config["name"], "my-awesome-package")
- self.failUnless("id" in config)
- self.failUnlessEqual(out.getvalue().strip(),
- "No 'id' in package.json: creating a new keypair for you.")
- jid = str(config["id"])
- keyfile = os.path.join(keydir, jid)
- fields, fieldnames = self.parse(open(keyfile).read())
- privkey = fields["private-key"]
- self.failUnless(privkey.startswith("private-jid0-"), privkey)
- self.failUnlessEqual(fields["jid"], jid)
- self.failUnlessEqual(fields["name"], "my-awesome-package")
-
- # name and valid id? great! ship it!
- config2 = '{"name": "my-awesome-package", "id": "%s"}' % jid
- self.write(config2)
- out = StringIO()
- cfg = self.get_cfg()
- config_was_ok, modified = preflight.preflight_config(cfg, fn,
- stderr=out,
- keydir=keydir)
- self.failUnlessEqual(config_was_ok, True)
- self.failUnlessEqual(modified, False)
- config2a = self.read()
- self.failUnlessEqual(config2a, config2)
- self.failUnlessEqual(out.getvalue().strip(), "")
-
- # name and invalid id? tell them to get a new one
- os.unlink(keyfile)
- self.write(config2)
- out = StringIO()
- cfg = self.get_cfg()
- config_was_ok, modified = preflight.preflight_config(cfg, fn,
- stderr=out,
- keydir=keydir)
- self.failUnlessEqual(config_was_ok, False)
- self.failUnlessEqual(modified, False)
- out = out.getvalue().strip()
- self.failUnless("Your package.json says our ID is" in out, out)
- self.failUnless("But I don't have a corresponding private key in"
- in out, out)
- self.failUnless("If you are the original developer" in out, out)
- self.failUnless("Otherwise, if you are a new developer" in out, out)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/cuddlefish/tests/test_rdf.py b/cuddlefish/tests/test_rdf.py
deleted file mode 100644
index fbc6a74a..00000000
--- a/cuddlefish/tests/test_rdf.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import unittest
-import xml.dom.minidom
-
-from cuddlefish import rdf
-
-
-class RDFTests(unittest.TestCase):
- def testBug567660(self):
- obj = rdf.RDF()
- data = u'\u2026'.encode('utf-8')
- x = '%s' % data
- obj.dom = xml.dom.minidom.parseString(x)
- self.assertEqual(obj.dom.documentElement.firstChild.nodeValue,
- u'\u2026')
- self.assertEqual(str(obj), x)
diff --git a/cuddlefish/tests/test_runner.py b/cuddlefish/tests/test_runner.py
deleted file mode 100644
index 15ec8d23..00000000
--- a/cuddlefish/tests/test_runner.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import sys
-
-from cuddlefish import runner
-
-def xulrunner_app_runner_doctests():
- """
- >>> runner.XulrunnerAppRunner(binary='foo')
- Traceback (most recent call last):
- ...
- Exception: Binary path does not exist foo
-
- >>> runner.XulrunnerAppRunner(binary=sys.executable)
- Traceback (most recent call last):
- ...
- ValueError: application.ini not found in cmdargs
-
- >>> runner.XulrunnerAppRunner(binary=sys.executable,
- ... cmdargs=['application.ini'])
- Traceback (most recent call last):
- ...
- ValueError: file does not exist: 'application.ini'
- """
-
- pass
diff --git a/cuddlefish/tests/test_server.py b/cuddlefish/tests/test_server.py
deleted file mode 100644
index 723f6671..00000000
--- a/cuddlefish/tests/test_server.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import os
-import unittest
-
-from cuddlefish import server
-from cuddlefish.tests import env_root
-
-class ServerTests(unittest.TestCase):
- def test_generate_static_docs_does_not_smoke(self):
- filename = 'testdocs.tgz'
- if os.path.exists(filename):
- os.remove(filename)
- server.generate_static_docs(env_root, tgz_filename=filename)
- self.assertTrue(os.path.exists(filename))
- os.remove(filename)
-
-class UnprivilegedServerTests(unittest.TestCase):
- def request(self, path, method='GET'):
- app = server.make_wsgi_app(env_root, task_queue=None,
- expose_privileged_api=False)
-
- def start_response(code, headers):
- pass
-
- environ = {'PATH_INFO': path,
- 'REQUEST_METHOD': method}
-
- responses = [string for string in app(environ, start_response)]
- return ''.join(responses)
-
- def test_privileged_api_returns_404(self):
- self.assertEqual(self.request('/api/blah'),
- '404 Not Found')
-
- def test_privileged_api_returns_501(self):
- self.assertEqual(self.request('/api/idle'),
- '501 Not Implemented')
- self.assertEqual(self.request('/api/task-queue'),
- '501 Not Implemented')
-
- def test_404(self):
- self.assertEqual(self.request('/bleh'), '404 Not Found')
-
- def test_api_404(self):
- self.assertEqual(self.request('/api/bleh'), '404 Not Found')
-
- def test_unknown_package_404(self):
- self.assertEqual(self.request('/packages/bleh'), '404 Not Found')
-
- def test_package_file_404(self):
- self.assertEqual(self.request('/packages/jetpack-core/bleh'),
- '404 Not Found')
-
- def test_package_file_200(self):
- readme = self.request('/packages/jetpack-core/README.md')
- self.assertTrue('Jetpack Core' in readme)
-
- def test_packages_index_json_200(self):
- info = server.json.loads(self.request('/packages/index.json'))
- self.assertEqual(type(info), dict)
- self.assertTrue('jetpack-core' in info)
-
- def test_404_on_blank_path(self):
- self.assertEqual(self.request(''), '404 Not Found')
-
- def test_ensure_index_returned_on_root_path(self):
- self.assertTrue('' in self.request('/'))
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/cuddlefish/tests/test_xpi.py b/cuddlefish/tests/test_xpi.py
deleted file mode 100644
index edffc03f..00000000
--- a/cuddlefish/tests/test_xpi.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import os
-import unittest
-import zipfile
-import pprint
-
-from cuddlefish import xpi
-from cuddlefish.tests import test_packaging
-
-xpi_template_path = os.path.join(test_packaging.static_files_path,
- 'xpi-template')
-
-fake_manifest = ''
-
-def document_dir(name):
- if name in ['packages', 'xpi-template']:
- dirname = os.path.join(test_packaging.static_files_path, name)
- document_dir_files(dirname)
- elif name == 'xpi-output':
- create_xpi('test-xpi.xpi')
- document_zip_file('test-xpi.xpi')
- os.remove('test-xpi.xpi')
- else:
- raise Exception('unknown dir: %s' % name)
-
-def normpath(path):
- """
- Make a platform-specific relative path use '/' as a separator.
- """
-
- return path.replace(os.path.sep, '/')
-
-def document_zip_file(path):
- zip = zipfile.ZipFile(path, 'r')
- for name in zip.namelist():
- contents = zip.read(name)
- lines = contents.splitlines()
- if len(lines) == 1 and name.endswith('.json') and len(lines[0]) > 75:
- # Ideally we would json-decode this, but it results
- # in an annoying 'u' before every string literal,
- # since json decoding makes all strings unicode.
- contents = eval(contents)
- contents = pprint.pformat(contents)
- lines = contents.splitlines()
- contents = "\n ".join(lines)
- print "%s:\n %s" % (normpath(name), contents)
- zip.close()
-
-def document_dir_files(path):
- filename_contents_tuples = []
- for dirpath, dirnames, filenames in os.walk(path):
- relpath = dirpath[len(path)+1:]
- for filename in filenames:
- abspath = os.path.join(dirpath, filename)
- contents = open(abspath, 'r').read()
- contents = "\n ".join(contents.splitlines())
- relfilename = os.path.join(relpath, filename)
- filename_contents_tuples.append((normpath(relfilename), contents))
- filename_contents_tuples.sort()
- for filename, contents in filename_contents_tuples:
- print "%s:" % filename
- print " %s" % contents
-
-def create_xpi(xpiname):
- configs = test_packaging.get_configs('aardvark')
- options = {'main': configs.target_cfg.main}
- options.update(configs.build)
- xpi.build_xpi(template_root_dir=xpi_template_path,
- manifest=fake_manifest,
- xpi_name=xpiname,
- harness_options=options,
- xpts=[])