Skip to content

Commit

Permalink
Implement cfx support for changed layout.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gozala committed Oct 10, 2012
1 parent 061e261 commit e9c0900
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 66 deletions.
21 changes: 11 additions & 10 deletions python-lib/cuddlefish/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,9 @@
(("", "--extra-packages",), dict(dest="extra_packages",
help=("extra packages to include, "
"comma-separated. Default is "
"'addon-kit'."),
"'addon-sdk'."),
metavar=None,
default="addon-kit",
default="addon-sdk",
cmds=['run', 'xpi', 'test', 'testex',
'testpkgs', 'testall',
'testcfx'])),
Expand Down Expand Up @@ -216,7 +216,7 @@
"containing test runner "
"program (default is "
"test-harness)"),
default="test-harness",
default="addon-sdk",
cmds=['test', 'testex', 'testpkgs',
'testall'])),
# --keydir was removed in 1.0b5, but we keep it around in the options
Expand Down Expand Up @@ -427,6 +427,7 @@ def test_all_packages(env_root, defaults):
packages_dir = os.path.join(env_root, "packages")
packages = [dirname for dirname in os.listdir(packages_dir)
if os.path.isdir(os.path.join(packages_dir, dirname))]
packages.append(env_root)
packages.sort()
print >>sys.stderr, "Testing all available packages: %s." % (", ".join(packages))
sys.stderr.flush()
Expand Down Expand Up @@ -690,11 +691,11 @@ def run(arguments=sys.argv[1:], target_cfg=None, pkg_cfg=None,
# the choice of loader for manifest-generation purposes. In practice,
# this means that alternative loaders probably won't work with
# --strip-xpi.
assert packaging.DEFAULT_LOADER == "api-utils"
assert pkg_cfg.packages["api-utils"].loader == "lib/cuddlefish.js"
cuddlefish_js_path = os.path.join(pkg_cfg.packages["api-utils"].root_dir,
"lib", "cuddlefish.js")
loader_modules = [("api-utils", "lib", "cuddlefish", cuddlefish_js_path)]
assert packaging.DEFAULT_LOADER == "addon-sdk"
assert pkg_cfg.packages["addon-sdk"].loader == "lib/sdk/loader/cuddlefish.js"
cuddlefish_js_path = os.path.join(pkg_cfg.packages["addon-sdk"].root_dir,
"lib", "sdk", "loader", "cuddlefish.js")
loader_modules = [("addon-sdk", "lib", "sdk/loader/cuddlefish", cuddlefish_js_path)]
scan_tests = command == "test"
test_filter_re = None
if scan_tests and options.filter:
Expand Down Expand Up @@ -740,8 +741,8 @@ def run(arguments=sys.argv[1:], target_cfg=None, pkg_cfg=None,
if command == "test":
# This should be contained in the test runner package.
# maybe just do: target_cfg.main = 'test-harness/run-tests'
harness_options['main'] = 'test-harness/run-tests'
harness_options['mainPath'] = manifest.get_manifest_entry("test-harness", "lib", "run-tests").get_path()
harness_options['main'] = 'sdk/test/runner'
harness_options['mainPath'] = manifest.get_manifest_entry("addon-sdk", "lib", "sdk/test/runner").get_path()
else:
harness_options['main'] = target_cfg.get('main')
harness_options['mainPath'] = manifest.top_path
Expand Down
26 changes: 22 additions & 4 deletions python-lib/cuddlefish/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
SEP = os.path.sep
from cuddlefish.util import filter_filenames, filter_dirnames

# Load new layout mapping hashtable
path = os.path.join(os.environ.get('CUDDLEFISH_ROOT'), "mapping.json")
data = open(path, 'r').read()
NEW_LAYOUT_MAPPING = json.loads(data)

def js_zipname(packagename, modulename):
return "%s-lib/%s.js" % (packagename, modulename)
def docs_zipname(packagename, modulename):
Expand Down Expand Up @@ -185,7 +190,7 @@ def build(self, scan_tests, test_filter_re):
self.top_path = top_me.get_path()
self.datamaps[self.target_cfg.name] = DataMap(self.target_cfg)
if scan_tests:
mi = self._find_module_in_package("test-harness", "lib", "run-tests", [])
mi = self._find_module_in_package("addon-sdk", "lib", "sdk/test/runner", [])
self.process_module(mi)
# also scan all test files in all packages that we use. By making
# a copy of self.used_packagenames first, we refrain from
Expand Down Expand Up @@ -213,8 +218,8 @@ def build(self, scan_tests, test_filter_re):
test_modules.append( (testname, tme) )
# also add it as an artificial dependency of unit-test-finder, so
# the runtime dynamic load can work.
test_finder = self.get_manifest_entry("api-utils", "lib",
"unit-test-finder")
test_finder = self.get_manifest_entry("addon-sdk", "lib",
"sdk/deprecated/unit-test-finder")
for (testname,tme) in test_modules:
test_finder.add_requirement(testname, tme)
# finally, tell the runtime about it, so they won't have to
Expand Down Expand Up @@ -427,12 +432,12 @@ def BAD(msg):
modulename = from_module.name

#print " %s require(%s))" % (from_module, reqname)
bits = reqname.split("/")

if reqname.startswith("./") or reqname.startswith("../"):
# 1: they want something relative to themselves, always from
# their own package
them = modulename.split("/")[:-1]
bits = reqname.split("/")
while bits[0] in (".", ".."):
if not bits:
raise BAD("no actual modulename")
Expand All @@ -451,8 +456,21 @@ def BAD(msg):
# non-relative import. Might be a short name (requiring a search
# through "library" packages), or a fully-qualified one.

# Search for a module in new layout.
# First normalize require argument in order to easily find a mapping
normalized = reqname
if normalized.endswith(".js"):
normalized = normalized[:-len(".js")]
if normalized.startswith("addon-kit/"):
normalized = normalized[len("addon-kit/"):]
if normalized.startswith("api-utils/"):
normalized = normalized[len("api-utils/"):]
if normalized in NEW_LAYOUT_MAPPING:
reqname = NEW_LAYOUT_MAPPING[normalized]

if "/" in reqname:
# 2: PKG/MOD: find PKG, look inside for MOD
bits = reqname.split("/")
lookfor_pkg = bits[0]
lookfor_mod = "/".join(bits[1:])
mi = self._get_module_from_package(lookfor_pkg,
Expand Down
8 changes: 5 additions & 3 deletions python-lib/cuddlefish/packaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
from cuddlefish.bunch import Bunch

MANIFEST_NAME = 'package.json'
DEFAULT_LOADER = 'addon-sdk'

DEFAULT_LOADER = 'api-utils'
# Is different from root_dir when running tests
env_root = os.environ.get('CUDDLEFISH_ROOT')

DEFAULT_PROGRAM_MODULE = 'main'

Expand Down Expand Up @@ -221,7 +223,7 @@ def _is_same_file(a, b):
return a == b

def build_config(root_dir, target_cfg, packagepath=[]):
dirs_to_scan = []
dirs_to_scan = [env_root] # root is addon-sdk dir, diff from root_dir in tests

def add_packages_from_config(pkgconfig):
if 'packages' in pkgconfig:
Expand Down Expand Up @@ -318,7 +320,7 @@ def add_section_to_build(cfg, section, is_code=False,

def add_locale_to_build(cfg):
# Bug 730776: Ignore locales for addon-kit, that are only for unit tests
if not is_running_tests and cfg.name == "addon-kit":
if not is_running_tests and cfg.name == "addon-sdk":
return

path = resolve_dir(cfg, cfg['locale'])
Expand Down
2 changes: 1 addition & 1 deletion python-lib/cuddlefish/tests/linker-files/one/lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
var panel = require("panel");
var two = require("two.js");
var a = require("./two");
var b = require("addon-kit/tabs.js");
var b = require("sdk/tabs.js");
var c = require("./subdir/three");
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"description": "A package w/ a main module; can be built into an extension.",
"keywords": ["potato"],
"version": "1.0",
"dependencies": ["api-utils", "barbeque"]
"dependencies": ["addon-sdk", "barbeque"]
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
"description": "A package w/ a main module; can be built into an extension.",
"keywords": ["potato"],
"version": "1.0",
"dependencies": ["api-utils", "barbeque"]
"dependencies": ["addon-sdk", "barbeque"]
}
32 changes: 16 additions & 16 deletions python-lib/cuddlefish/tests/test_linker.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ def test_deps(self):
deps = packaging.get_deps_for_targets(pkg_cfg, ["one"])
self.failUnlessEqual(deps, ["one"])
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "one"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "one"])

def test_manifest(self):
target_cfg = self.get_pkg("one")
pkg_cfg = packaging.build_config(ROOT, target_cfg)
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "one"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "one"])
# target_cfg.dependencies is not provided, so we'll search through
# all known packages (everything in 'deps').
m = manifest.build_manifest(target_cfg, pkg_cfg, deps, scan_tests=False)
Expand All @@ -48,10 +48,10 @@ def test_manifest(self):
def assertReqIs(modname, reqname, path):
reqs = m["one/lib/%s.js" % modname]["requirements"]
self.failUnlessEqual(reqs[reqname]["path"], path)
assertReqIs("main", "panel", "addon-kit/lib/panel.js")
assertReqIs("main", "panel", "addon-sdk/lib/sdk/panel.js")
assertReqIs("main", "two.js", "one/lib/two.js")
assertReqIs("main", "./two", "one/lib/two.js")
assertReqIs("main", "addon-kit/tabs.js", "addon-kit/lib/tabs.js")
assertReqIs("main", "sdk/tabs.js", "addon-sdk/lib/sdk/tabs.js")
assertReqIs("main", "./subdir/three", "one/lib/subdir/three.js")
assertReqIs("two", "main", "one/lib/main.js")
assertReqIs("subdir/three", "../main", "one/lib/main.js")
Expand All @@ -69,8 +69,8 @@ def test_main_in_deps(self):
pkg_cfg = packaging.build_config(ROOT, target_cfg,
packagepath=package_path)
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "three"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "three"])
m = manifest.build_manifest(target_cfg, pkg_cfg, deps, scan_tests=False)
m = m.get_harness_options_manifest()
def assertReqIs(modname, reqname, path):
Expand All @@ -86,8 +86,8 @@ def test_relative_main_in_top(self):
pkg_cfg = packaging.build_config(ROOT, target_cfg,
packagepath=package_path)
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "five"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "five"])
# all we care about is that this next call doesn't raise an exception
m = manifest.build_manifest(target_cfg, pkg_cfg, deps, scan_tests=False)
m = m.get_harness_options_manifest()
Expand All @@ -100,8 +100,8 @@ def test_unreachable_relative_main_in_top(self):
pkg_cfg = packaging.build_config(ROOT, target_cfg,
packagepath=package_path)
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "six"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "six"])
self.assertRaises(manifest.UnreachablePrefixError,
manifest.build_manifest,
target_cfg, pkg_cfg, deps, scan_tests=False)
Expand All @@ -112,8 +112,8 @@ def test_unreachable_in_deps(self):
pkg_cfg = packaging.build_config(ROOT, target_cfg,
packagepath=package_path)
deps = packaging.get_deps_for_targets(pkg_cfg,
[target_cfg.name, "addon-kit"])
self.failUnlessEqual(deps, ["addon-kit", "api-utils", "four"])
[target_cfg.name, "addon-sdk"])
self.failUnlessEqual(deps, ["addon-sdk", "four"])
self.assertRaises(manifest.UnreachablePrefixError,
manifest.build_manifest,
target_cfg, pkg_cfg, deps, scan_tests=False)
Expand Down Expand Up @@ -190,7 +190,7 @@ def _test(basedir):
names = zf.namelist()
# the first problem found in bug 664840 was that cuddlefish.js
# (the loader) was stripped out on windows, due to a /-vs-\ bug
self.assertIn("resources/api-utils/lib/cuddlefish.js", names)
self.assertIn("resources/addon-sdk/lib/sdk/loader/cuddlefish.js", names)
# the second problem found in bug 664840 was that an addon
# without an explicit tests/ directory would copy all files from
# the package into a bogus JID-PKGNAME-tests/ directory, so check
Expand Down Expand Up @@ -220,7 +220,7 @@ def _test(basedir):
self.failUnlessEqual(e.args[0], 0)
zf = zipfile.ZipFile("seven.xpi", "r")
names = zf.namelist()
self.assertIn("resources/api-utils/lib/cuddlefish.js", names)
self.assertIn("resources/addon-sdk/lib/sdk/loader/cuddlefish.js", names)
testfiles = [fn for fn in names if "seven/tests" in fn]
self.failUnlessEqual([], testfiles)
self.assertIn("resources/seven/data/text.data",
Expand Down
6 changes: 3 additions & 3 deletions python-lib/cuddlefish/tests/test_packaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ def test_basic(self):
configs = get_configs('aardvark')
packages = configs.pkg_cfg.packages

self.assertTrue('api-utils' in packages)
self.assertTrue('addon-sdk' in packages)
self.assertTrue('aardvark' in packages)
self.assertTrue('api-utils' in packages.aardvark.dependencies)
self.assertEqual(packages['api-utils'].loader, 'lib/loader.js')
self.assertTrue('addon-sdk' in packages.aardvark.dependencies)
self.assertEqual(packages['addon-sdk'].loader, 'lib/sdk/loader/cuddlefish.js')
self.assertTrue(packages.aardvark.main == 'main')
self.assertTrue(packages.aardvark.version == "1.0")

Expand Down
Loading

0 comments on commit e9c0900

Please sign in to comment.