Bug 1027215 - Add reftest manifests to build config; r=mshal

reftest and crashtest manifests can now be added to the build
configuration via REFTEST_MANIFESTS and CRASHTEST_MANIFESTS,
respectively.

The master manifest files have been added to layout/moz.build.

This patch enables the deprecation of master reftest manifests but stops
short of doing it. In the future, we could declare reftest and crashtest
manifests in their nearest moz.build file and generate the master
manifest (consisting of a bunch of "include" directives) as part of
config.status.

--HG--
extra : rebase_source : 3503f787b14b24c38daf577a710e67b583476858
extra : histedit_source : 21e55b3d28ee83afb47f3f779251a13c2a90db5f
This commit is contained in:
Gregory Szorc 2014-06-17 17:59:03 -07:00
Родитель 1fd0e9d9bd
Коммит 347044e672
8 изменённых файлов: 72 добавлений и 2 удалений

Просмотреть файл

@ -34,3 +34,6 @@ MOCHITEST_MANIFESTS += [
'reftests/fonts/mochitest.ini',
'reftests/fonts/mplus/mochitest.ini',
]
REFTEST_MANIFESTS += ['reftests/reftest.list']
CRASHTEST_MANIFESTS += ['../testing/crashtest/crashtests.list']

Просмотреть файл

@ -13,6 +13,7 @@ import types
from collections import namedtuple
import mozwebidlcodegen
from reftest import ReftestManifest
import mozbuild.makeutil as mozmakeutil
from mozpack.copier import FilePurger
@ -1075,6 +1076,11 @@ class RecursiveMakeBackend(CommonBackend):
(obj.install_prefix, set()))
m[1].add(obj.manifest_obj_relpath)
if isinstance(obj.manifest, ReftestManifest):
# Mark included files as part of the build backend so changes
# result in re-config.
self.backend_input_files |= obj.manifest.manifests
def _process_local_include(self, local_include, backend_file):
if local_include.startswith('/'):
path = '$(topsrcdir)'

Просмотреть файл

@ -15,7 +15,7 @@ from mach.mixin.logging import LoggingMixin
import mozpack.path as mozpath
import manifestparser
import reftest
import mozinfo
from .data import (
@ -419,6 +419,11 @@ class TreeMetadataEmitter(LoggingMixin):
for obj in self._process_test_manifest(sandbox, info, path):
yield obj
for flavor in ('crashtest', 'reftest'):
for path in sandbox.get('%s_MANIFESTS' % flavor.upper(), []):
for obj in self._process_reftest_manifest(sandbox, flavor, path):
yield obj
jar_manifests = sandbox.get('JAR_MANIFESTS', [])
if len(jar_manifests) > 1:
raise SandboxValidationError('While JAR_MANIFESTS is a list, '
@ -601,6 +606,38 @@ class TreeMetadataEmitter(LoggingMixin):
'manifest file %s: %s' % (path,
'\n'.join(traceback.format_exception(*sys.exc_info()))))
def _process_reftest_manifest(self, sandbox, flavor, manifest_path):
manifest_path = mozpath.normpath(manifest_path)
manifest_full_path = mozpath.normpath(mozpath.join(
sandbox['SRCDIR'], manifest_path))
manifest_reldir = mozpath.dirname(mozpath.relpath(manifest_full_path,
sandbox['TOPSRCDIR']))
manifest = reftest.ReftestManifest()
manifest.load(manifest_full_path)
# reftest manifests don't come from manifest parser. But they are
# similar enough that we can use the same emitted objects. Note
# that we don't perform any installs for reftests.
obj = TestManifest(sandbox, manifest_full_path, manifest,
flavor=flavor, install_prefix='%s/' % flavor,
relpath=mozpath.join(manifest_reldir,
mozpath.basename(manifest_path)))
for test in sorted(manifest.files):
obj.tests.append({
'path': test,
'here': mozpath.dirname(test),
'manifest': manifest_full_path,
'name': mozpath.basename(test),
'head': '',
'tail': '',
'support-files': '',
'subsuite': '',
})
yield obj
def _emit_directory_traversal_from_sandbox(self, sandbox):
o = DirectoryTraversal(sandbox)
o.dirs = sandbox.get('DIRS', [])

Просмотреть файл

@ -599,6 +599,12 @@ VARIABLES = {
"""List of manifest files defining browser chrome tests.
""", None),
'CRASHTEST_MANIFESTS': (StrictOrderingOnAppendList, list,
"""List of manifest files defining crashtests.
These are commonly named crashtests.list.
""", None),
'METRO_CHROME_MANIFESTS': (StrictOrderingOnAppendList, list,
"""List of manifest files defining metro browser chrome tests.
""", None),
@ -615,6 +621,12 @@ VARIABLES = {
"""List of manifest files defining webapprt mochitest chrome tests.
""", None),
'REFTEST_MANIFESTS': (StrictOrderingOnAppendList, list,
"""List of manifest files defining reftests.
These are commonly named reftest.list.
""", None),
'WEBRTC_SIGNALLING_TEST_MANIFESTS': (StrictOrderingOnAppendList, list,
"""List of manifest files defining WebRTC signalling tests.
""", None),

Просмотреть файл

@ -0,0 +1 @@
== crashtest1.html crashtest1-ref.html

Просмотреть файл

@ -7,3 +7,5 @@ METRO_CHROME_MANIFESTS += ['metro.ini']
MOCHITEST_MANIFESTS += ['mochitest.ini']
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
XPCSHELL_TESTS_MANIFESTS += ['xpcshell.ini']
REFTEST_MANIFESTS += ['reftest.list']
CRASHTEST_MANIFESTS += ['crashtest.list']

Просмотреть файл

@ -0,0 +1 @@
== reftest1.html reftest1-ref.html

Просмотреть файл

@ -379,7 +379,7 @@ class TestEmitterBasic(unittest.TestCase):
objs = [o for o in self.read_topsrcdir(reader)
if isinstance(o, TestManifest)]
self.assertEqual(len(objs), 6)
self.assertEqual(len(objs), 8)
metadata = {
'a11y.ini': {
@ -436,6 +436,14 @@ class TestEmitterBasic(unittest.TestCase):
'tail2': False,
},
},
'reftest.list': {
'flavor': 'reftest',
'installs': {},
},
'crashtest.list': {
'flavor': 'crashtest',
'installs': {},
},
}
for o in objs: