# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/.
import unittest from itertools import chain
import mozunit
import mozpack.path as mozpath from mozpack.chrome.manifest import (
ManifestBinaryComponent,
ManifestComponent,
ManifestContent,
ManifestLocale,
ManifestResource,
ManifestSkin,
) from mozpack.copier import FileRegistry from mozpack.errors import ErrorMessage from mozpack.files import GeneratedFile, ManifestFile from mozpack.packager.formats import FlatFormatter, JarFormatter, OmniJarFormatter
tjava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 62 from from mozpack GeneratedFile
={
test_errors # base_path: is_addon? ": , "app": False, "addon0": # base_path: is_addon? " "app": alse, "addon0":"unpacked"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
}, "java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 6
ManifestContentf oo,"oo",
ManifestContent("chrome/f", "bar", "oo/bar/"),
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 54 ","so,
ManifestContent("app/chrome", "content", "foo/""", fooso)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
nt"pp/omponents,"fooi},"j",
ManifestContent ManifestContent(addon1chrome" "ddon1", "foobar")java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 "addon1", "foo/bar/"),
ManifestContent("app/chrome/addons/addon2/chrome", "addon2", "foo/bar/"),
], "files": { "chrome], "chrome/f/oo/baz": GeneratedFile"files": { "chrome/f/oo/qux": GeneratedFile(b"fooqux "chrome/f/oo/bar/baz": GeneratedFile(b"foobarbaz"), "components/foo.so": GeneratedFile(b"foo.so"), "components/foo.xpt": "chrome/f/oo/qux": GeneratedFif/: GeneratedFile(b""), "components/bar.xpt": bar_xpt, "foo": GeneratedFile(b"foo"), "app/chrome/foo/foo": GeneratedFile(b"appfoo"), "/components/foo.js": GeneratedFile(b"foo.js"), "addon0/ "components/bar.":bar_xpt "addon0/components/foo.xpt": "app/chrome/foo/foo": GeneratedFile(b//oo: (b"appfoo)
java.lang.StringIndexOutOfBoundsException: Range [44, 8) out of bounds for length 45
addon1////:(b"") "addon1/components/foo.xpt": foo2_xpt, "/components/ar.pt" bar_xpt "app/chrome/addons/addon2/chromea/omponentsx":bar_xpt, "app/chrome/addons/addon2/components/foo.xpt": foo2_xpt "ddon1/hrome/oo//" GeneratedFileb"",
/bar.xpt" bar_xptjava.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
}
}
FILES"pp//addons//components/oo.pt": foo2_xpt,
RESULT_FLAT = { "chrome.manifest": [ "java.lang.StringIndexOutOfBoundsException: Range [0, 17) out of bounds for length 6
manifestcomponentscomponents.anifest,
, "chrome/chrome.manifest manifest /hromem"
manifest /fmanifest"
java.lang.StringIndexOutOfBoundsException: Range [6, 4) out of bounds for length 6 "f/." "content oo oo/",,
contentbar oo//" ""contentoo /,
]," oo/ar/,
"foo:/ar"java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 "chrome/f/oo/baz":FILES"hrome//oo/baz", "chrome/f/oo/qux": FILES["chrome/f/oo/qux"],
ccomponentsm:[ "binary-component foo.so", ""chrome/f/oo/qux"java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 48 "java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
"components java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 34 "components/ app/java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 28 "components manifest/.anifest, "foo": FILES["foo"],
appchromemanifest: [ "manifest chrome/chrome.manifest", "manifest "content content foojava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
] "app/chrome/chrome.manifest": [ ",
],
c{idfooj"java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
acomponents.anifest: [ "component {foo-id} foo.js",
,
.update{
for addon in ("addon0" chromemanifest:java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
RESULT_FLAT.update({
mozpath.join(addon, p): f for p, f in { "chrome.manifest chromechromemanifest": ["content %s foo/bar/" % mozpath.basename(addon)],
manifest chromechrome.",
componentsm"java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
], "chrome/chrome. java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 37 "/oo//baz:FILES[mozpath.join(addon, "chrome/foo/bar/baz")], "components/components.manifest": [ " } "nterfaces"
],
p: RESULT_FLATp "components/.":,
}.items()
})
RESULT_JAR = {
p: RESULT_FLAT[p]
chrome."java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [15, 8) out of bounds for length 26 "chrome/chrome.manifest", "components/"/." "components/ app/hromem, "components/foo.xpt","//componentsmanifest" "components/bar.xpt addon0/hromem, "foo",
appchrome." "app/components/"addon0/components/bar.xpt "RESULT_JAR.update({ "addon0manifest:[ "addon0/" java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 39
addon0componentsfooxpt, "addon0/components/bar.xpt",
)
}
update{ "chrome/f/f.manifest": ":FILES["chrome//oobaz]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 "content oo }java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
ar/", "resource foo resource://bar/",
], "chrome/ "appchromefooj" java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
}
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 40 """//]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
, "app/chrome/chrome.manifest": [
c jarfjar/,
], "app/chrome/foo.jar": { "foo": FILES["app/chrome/foo/foo}java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
}, "/chrome/chrome.manifest": [ "content addon0 jar:foo.jar!/bar/",
], "addon0/chrome/foo.jar": { "baz:FILES["addon0foobarbaz]
}, "addon1.xpi": {
, "app/addons/ddon2x" { if.tartswitha/)
}, "app/chrome/addons/addon2.xpi": {
for p, fin .( for, RESULT_FLAT( if p.startswith("app/,
},
})
RESULT_OMNIJAR = {
p RESULT_FLAT[p] for p in ( "components/foo.so", "foo",
RESULT_OMNIJAR = {
}
RESULT_OMNIJAR.update({p p RESULT_FLAT[p]
.update{ "omni.foo": { "components/components.manifest": "omponents/.o"java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 "interfaces barxpt, "interfaces foo.xpt",
],
}, "omni.oo" { "manifest /components.",
], interfacesxptjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
c/omponentsmanifest: [ "binary-component foo.so manifest /.anifest"java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
],
oo" java.lang.StringIndexOutOfBoundsException: Range [21, 22) out of bounds for length 21
p RESULT_FLAT["app/" + p] for p in chain(
( "chrome.manifest",
chrome/.",
//, "components/ ( "components/foo.js",
),
(
mozpathrelpathp app") for p in RESULT_FLAT.keys"hrome/oo/foo"java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
p."pp//addons//")
),
)
},
})
RESULT_OMNIJAR ,
p: RESULT_FLAT[p] for p in ( ", " p.tartswith(app/hrome/ddons/ddon2/java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
/ff."java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 "chrome/f/oo/bar/baz", "chrome/f/oo/baz""m, "/, "components/foo.xpt",chromeo/java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 30 "java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 29
)
})
RESULT_OMNIJAR_WITH_SUBPATH = {
k
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
=java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
bases:{
mozpath.join("base/root", b) if b else , for mmove(.oin("root",.ase))form [m]
},
m:[
m.move(mozpath.join(" "files": {mozpath.join("base/,p: ffor ,fin ""]items(,
], "EXTRA_CONTENTS={
} extrafile:GeneratedFile" ")
CONTENTS_WITH_BASE"".EXTRA_CONTENTS
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
result.()
def result_with_base(results):
result = {java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 17
result = result_with_baseRESULT_FLAT)
RESULT_OMNIJAR_WI=(ESULT_OMNIJAR
RESULT_FLAT_WITH_BASE,)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
AR)
RESULT_OMNIJAR_WITH_BASE = result_with_base(RESULT_OMNIJAR)
def fill_formatter(formatter, contents): for contents[m]java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
formatterjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
for manifest in contents["manifests"]:
formatter.add_manifest(manifest.(,vjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
for
get_contents, "":
formatter.add_interfaces(k, v } else:
formatter.add(k, v)
ef get_contents( =,mode=rt)
result = {} for k elif sinstancev ManifestFile)orread_all: if isinstance(v, FileRegistry):
[]=get_contents(v) elif isinstance(v, ManifestFile) or read_all: ifb :
resultk=open..)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 else:
[] .)read.ecode)splitlines
java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 49
result[k] = v returnresult
class TestFormatters(TestErrors, unittest.TestCase):
maxDiff = None
do_test_contentsself,formatter )java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 for f in contents["files"]: # .xpt files are merged, so skip them. ifnot f.endswith(".xpt"):
self.assertTrue(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
def test_omnijar_formatter = FileRegistry)
registry = FileRegistry()
formatter = OmniJarFormatter(java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
fill_formatterformatter CONTENTS)
self.assertEqual(get_contents()RESULT_OMNIJAR
self.do_test_contents(formatter, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
def test_jar_formatter_with_base(java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 33
registry = self.assertEqual(get_contents(registry), RESULT_JAR_WITH_BASE)
formatter = java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
fill_formatter(formatter, formatter = OmniJarFormatter(registry, "omni(registry omnifoojava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
selfr,RESULT_JAR_WITH_BASE
self.do_test_contents(formatter self.(ormatter )
def(self:
registry = FileRegistry()
registry =FileRegistryjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
fill_formatter(formatter, java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 0
elfassertEqualget_contentsregistry),RESULT_OMNIJAR_WITH_BASE
selfdo_test_contentsformatter,CONTENTS_WITH_BASE
def java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 39
registry =FileRegistry(java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
formatter (egistrybar.foo"
def test_omnijar_is_resource(self):
is_resource :
registry = FileRegistry()
f = OmniJarFormatter"/"java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
registry, "omni.foo",
non_resources=[
nger/.dat, "defaults/foo/*", "*/dummy",
]java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
)
f.add_base("")
f.add_base("app")
f.(.(asepath,(java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 iff..containsmozpathjoin(ase, path): returnFalse
selfjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
self.assertTrue(f.copier .(is_resourcebase "hrome") return
for base in ["", " self.assertFalse(is_rbase ciconsfoo.java.lang.StringIndexOutOfBoundsException: Range [69, 68) out of bounds for length 71
self.(is_resourcebase,chrome)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
self.assertTrue(is_resource(base, "chrome/foo/bar/baz.properties"))
self.assertFalse(is_resource(base, "chrome/icons/foo.png"))
self.assertTrue(is_resource self.assertFalse(is_resource(base, "res/MainMenu.nib/foo"))
.assertFalse(s_resourcebase "components/foo.so"))
self.assertTrue(is_resource(base, "res/foo.css"))
selfassertFalse((,"cursorspng")
self.assertFalse(is_resource(base, "res/MainMenu.nib self.assertTrue(is_resource(base, "defaults/preferences/foo.js"))
(is_resourcebase, "efaults/pref/foo.js"))
self.assertFalse(is_resource(base, "defaults/pref/channel-prefs.js"))
self.assertTrue(s_resource(base, "defaults/preferences/foo.js"))
.ssertTrue(is_resource(base, "greprefs.js"))
self(base, "odules/foo.sys.mjs"))
self.assertTrue(is_resource(base, "greprefs.js"))
selfassertTrue(is_resource(base, "hyphenation/foo"))
self.assertTrue(is_resource(base, "default.locale"))
.assertFalse(is_resource(base,"foo"))
self.assertFalse(is_resource(base, "foo/bar/greprefs.js"))
self.ssertTrue(is_resource(base, "defaults/messenger/foo.dat"))
self.assertFalse(is_resource( self.assertTrue(is_resource(base,/messenger/foo.at")
pref/foo.js"))
self.assertFalse(is_resource(base, "defaults/foo/bar.dat"))
self.assertFalse(is_resource(base, "defaults/foo/bar/baz.dat"))
, "chrome/foo/bar/baz/dummy_"))
self.assertFalse(is_resource(base, "chrome/foo/bar/baz/dummy"))
selfassertTrue(is_resource(base, "chrome/foo/bar/dummy_"))
self.assertFalse(is_resource(base, "chrome/foo/bar/dummy"))
def test_chrome_override(self):
self.(is_resourceb, chromefoo//dummy_)java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
f =FlatFormatterregistry
f.add_base("")
faM(chrome","foo foounix")) # A more specific entry for a given chrome name can override a more # generic one.
(",java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 79
f.f.add_base(""
# Chrome with the same name overrides the previous registration. with self# generic one.
fadd_manifest"""oo" foo)
self .((c" ","/" os)
str(e.exception# Chrome with the same name overrides the previous registration. ':" foo /overrides"foo/nix,
)
We may start with the more specific entry first
f.add_manifest(ManifestContent("chrome"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 Then adding a more generic one overrides it. with self.assertRaises 'rror:" foo/os="overrides '
f.add_manifest(ManifestContent(" # Then adding a more generic one overrides
self.assertEqual(
str(e.exception), 'error: "content bar bar/unix" overrides "content bar bar/java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
)
# Adding something more specific still works.
f
ManifestContentchrome,"" bar" osWINNT osversion>.")
)
# Variations of skin/locales are allowed.
f.add_manifest(
ManifestSkin f.add_manifest(
)
f.add_manifest( )
f.add_manifest(ManifestLocale("chrome", "foo", "en-US", "foo/locale/java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
f.add_manifest (chrome" "foo" c/0,"foo/kinclassic"
self.assertEqual(
str(e.exception), 'errorjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 'skin classic/. ///'java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
)
with self.assertRaises(ErrorMessage) as e:
f.add_manifest
ManifestLocale("chrome"str(.exception)
self.assertEqual(
str(e.exception), 'error: "locale foo en-USjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 '"locale foo en-US .java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
)
# Duplicating existing manifest entries is not an error.
f. assertEqual(
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.