Bug 1313306 - Add a placeholder python configure linter. r=chmanchester
authorMike Hommey <mh+mozilla@glandium.org>
Thu, 27 Oct 2016 09:36:33 +0900
changeset 365512 caf5e078e7ef8fbac007d3ef7851b961d009a87c
parent 365511 3be9eca3776de3393245acf3a4f5f6c8ce56a37b
child 365513 0e64d3d27520fa2b092a47ce1522754fa134f060
push id1369
push userjlorenzo@mozilla.com
push dateMon, 27 Feb 2017 14:59:41 +0000
treeherdermozilla-release@d75a1dba431f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerschmanchester
bugs1313306
milestone52.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1313306 - Add a placeholder python configure linter. r=chmanchester
python/moz.build
python/mozbuild/mozbuild/configure/lint.py
python/mozbuild/mozbuild/test/configure/lint.py
--- a/python/moz.build
+++ b/python/moz.build
@@ -32,16 +32,17 @@ PYTHON_UNIT_TESTS += [
     'mozbuild/mozbuild/test/action/test_generate_browsersearch.py',
     'mozbuild/mozbuild/test/action/test_package_fennec_apk.py',
     'mozbuild/mozbuild/test/backend/test_android_eclipse.py',
     'mozbuild/mozbuild/test/backend/test_build.py',
     'mozbuild/mozbuild/test/backend/test_configenvironment.py',
     'mozbuild/mozbuild/test/backend/test_recursivemake.py',
     'mozbuild/mozbuild/test/backend/test_visualstudio.py',
     'mozbuild/mozbuild/test/compilation/test_warnings.py',
+    'mozbuild/mozbuild/test/configure/lint.py',
     'mozbuild/mozbuild/test/configure/test_checks_configure.py',
     'mozbuild/mozbuild/test/configure/test_compile_checks.py',
     'mozbuild/mozbuild/test/configure/test_configure.py',
     'mozbuild/mozbuild/test/configure/test_moz_configure.py',
     'mozbuild/mozbuild/test/configure/test_options.py',
     'mozbuild/mozbuild/test/configure/test_toolchain_configure.py',
     'mozbuild/mozbuild/test/configure/test_toolchain_helpers.py',
     'mozbuild/mozbuild/test/configure/test_toolkit_moz_configure.py',
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/configure/lint.py
@@ -0,0 +1,23 @@
+# 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/.
+
+from __future__ import absolute_import, print_function, unicode_literals
+
+from StringIO import StringIO
+from . import ConfigureSandbox
+
+
+class LintSandbox(ConfigureSandbox):
+    def __init__(self, environ=None, argv=None, stdout=None, stderr=None):
+        out = StringIO()
+        stdout = stdout or out
+        stderr = stderr or out
+        environ = environ or {}
+        argv = argv or []
+        super(LintSandbox, self).__init__({}, environ=environ, argv=argv,
+                                          stdout=stdout, stderr=stderr)
+
+    def run(self, path=None):
+        if path:
+            self.include_file(path)
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/configure/lint.py
@@ -0,0 +1,65 @@
+# 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/.
+
+from __future__ import absolute_import, print_function, unicode_literals
+
+import os
+import unittest
+from StringIO import StringIO
+from mozunit import main
+from buildconfig import (
+    topobjdir,
+    topsrcdir,
+)
+
+from mozbuild.configure.lint import LintSandbox
+
+
+test_path = os.path.abspath(__file__)
+
+
+class LintMeta(type):
+    def __new__(mcs, name, bases, attrs):
+        def create_test(project, func):
+            def test(self):
+                return func(self, project)
+            return test
+
+        for project in (
+            'b2g',
+            'b2g/dev',
+            'b2g/graphene',
+            'browser',
+            'embedding/ios',
+            'extensions',
+            'js',
+            'mobile/android',
+        ):
+            attrs['test_%s' % project.replace('/', '_')] = create_test(
+                project, attrs['lint'])
+
+        return type.__new__(mcs, name, bases, attrs)
+
+
+class Lint(unittest.TestCase):
+    __metaclass__ = LintMeta
+
+    def setUp(self):
+        self._curdir = os.getcwd()
+        os.chdir(topobjdir)
+
+    def tearDown(self):
+        os.chdir(self._curdir)
+
+    def lint(self, project):
+        sandbox = LintSandbox({
+            'OLD_CONFIGURE': os.path.join(topsrcdir, 'old-configure'),
+            'MOZCONFIG': os.path.join(os.path.dirname(test_path), 'data',
+                                      'empty_mozconfig'),
+        }, ['--enable-project=%s' % project])
+        sandbox.run(os.path.join(topsrcdir, 'moz.configure'))
+
+
+if __name__ == '__main__':
+    main()