Bug 1256573 - Switch configure tests to use @imports instead of @advanced. r?nalexander draft
authorMike Hommey <mh+mozilla@glandium.org>
Sun, 27 Mar 2016 11:14:48 +0900
changeset 345022 7f71ffb3983e6c252cd00a519bb4a7d01789fb41
parent 345021 343da66dd75ec84fdc7c7158419b2304b100a729
child 345023 a0d6f3040da8e5a8783392dc6692a851631a3b97
push id13997
push userbmo:mh+mozilla@glandium.org
push dateSun, 27 Mar 2016 22:55:22 +0000
reviewersnalexander
bugs1256573
milestone48.0a1
Bug 1256573 - Switch configure tests to use @imports instead of @advanced. r?nalexander
python/mozbuild/mozbuild/test/configure/data/included.configure
python/mozbuild/mozbuild/test/configure/data/moz.configure
python/mozbuild/mozbuild/test/configure/test_configure.py
--- a/python/mozbuild/mozbuild/test/configure/data/included.configure
+++ b/python/mozbuild/mozbuild/test/configure/data/included.configure
@@ -36,23 +36,21 @@ set_config('TEMPLATE_VALUE', check)
 @depends(is_gcc)
 def check(value):
     if value:
         for val in twentyone():
             return val
 
 set_config('TEMPLATE_VALUE_2', check)
 
-# Templates can use @advanced too to import modules and get the full set of
-# builtins.
+# Templates can use @imports too to import modules.
 @template
-@advanced
+@imports('sys')
 def platform():
-    import sys
     return sys.platform
 
-option('--enable-advanced-template', help='Advanced template')
-@depends('--enable-advanced-template')
+option('--enable-imports-in-template', help='Imports in template')
+@depends('--enable-imports-in-template')
 def check(value):
     if value:
         return platform()
 
 set_config('PLATFORM', check)
--- a/python/mozbuild/mozbuild/test/configure/data/moz.configure
+++ b/python/mozbuild/mozbuild/test/configure/data/moz.configure
@@ -137,56 +137,56 @@ include('included.configure')
 # defaults and choices.
 option('--enable-include', nargs=1, help='Include')
 @depends('--enable-include', '--help')
 def include_path(path, help):
     return path[0] if path else None
 
 include(include_path)
 
-# @advanced functions are allowed to import modules and have access to
-# the standard builtins instead of restricted ones. The order of the decorators
-# matter: @advanced needs to appear last.
-option('--with-advanced', nargs='?', help='Advanced')
-@depends('--with-advanced')
-@advanced
-def with_advanced(value):
+# Sandboxed functions can import from modules through the use of the @imports
+# decorator.
+# The order of the decorators matter: @imports needs to appear after other
+# decorators.
+option('--with-imports', nargs='?', help='Imports')
+@depends('--with-imports')
+@imports(_from='mozbuild.configure.options', _import='OptionValue')
+def with_imports(value):
     if value:
-        from mozbuild.configure.options import OptionValue
         return isinstance(value, OptionValue)
 
-set_config('ADVANCED', with_advanced)
+set_config('IMPORTS', with_imports)
 
-# Trying to import without @advanced will fail at runtime.
-@depends('--with-advanced')
-def with_advanced(value):
+# Trying to import manually will fail at runtime.
+@depends('--with-imports')
+def with_imports(value):
     if len(value) and value[0] == 'break':
         from mozbuild.configure.options import OptionValue
         return isinstance(value, OptionValue)
 
-set_config('ADVANCED2', with_advanced)
+set_config('IMPORTS2', with_imports)
 
-# A limited set of functions from os.path are exposed to non @advanced
-# functions.
-@depends('--with-advanced')
-def with_advanced(value):
+# A limited set of functions from os.path are exposed by default.
+@depends('--with-imports')
+def with_imports(value):
     if len(value):
         return os.path.isfile(value[0])
 
-set_config('IS_FILE', with_advanced)
+set_config('IS_FILE', with_imports)
 
-# An @advanced function can still import the full set.
-@depends('--with-advanced')
-@advanced
-def with_advanced(value):
-    if len(value):
-        import os.path
-        return hasattr(os.path, 'getatime')
-
-set_config('HAS_GETATIME', with_advanced)
-
-@depends('--with-advanced')
-@advanced
-def with_advanced(value):
+# It is still possible to import the full set from os.path.
+# It is also possible to cherry-pick builtins.
+@depends('--with-imports')
+@imports('os.path')
+@imports(_from='__builtin__', _import='hasattr')
+def with_imports(value):
     if len(value):
         return hasattr(os.path, 'getatime')
 
-set_config('HAS_GETATIME2', with_advanced)
+set_config('HAS_GETATIME', with_imports)
+
+@depends('--with-imports')
+@imports(_from='__builtin__', _import='hasattr')
+def with_imports(value):
+    if len(value):
+        return hasattr(os.path, 'getatime')
+
+set_config('HAS_GETATIME2', with_imports)
--- a/python/mozbuild/mozbuild/test/configure/test_configure.py
+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
@@ -71,20 +71,20 @@ class TestConfigure(unittest.TestCase):
             '  --enable-simple           Enable simple\n'
             '  --enable-with-env         Enable with env\n'
             '  --enable-values           Enable values\n'
             '  --without-thing           Build without thing\n'
             '  --with-stuff              Build with stuff\n'
             '  --option                  Option\n'
             '  --with-returned-default   Returned default [not-simple]\n'
             '  --returned-choices        Choices\n'
-            '  --enable-advanced-template\n'
-            '                            Advanced template\n'
+            '  --enable-imports-in-template\n'
+            '                            Imports in template\n'
             '  --enable-include          Include\n'
-            '  --with-advanced           Advanced\n'
+            '  --with-imports            Imports\n'
             '\n'
             'Environment variables:\n'
             '  CC                        C Compiler\n',
             out
         )
 
     def test_unknown(self):
         with self.assertRaises(InvalidOptionError):
@@ -221,23 +221,23 @@ class TestConfigure(unittest.TestCase):
     def test_template(self):
         config = self.get_config(env={'CC': 'gcc'})
         self.assertIn('CFLAGS', config)
         self.assertEquals(config['CFLAGS'], ['-Werror=foobar'])
 
         config = self.get_config(env={'CC': 'clang'})
         self.assertNotIn('CFLAGS', config)
 
-    def test_advanced(self):
-        config = self.get_config(['--with-advanced'])
-        self.assertIn('ADVANCED', config)
-        self.assertEquals(config['ADVANCED'], True)
+    def test_imports(self):
+        config = self.get_config(['--with-imports'])
+        self.assertIn('IMPORTS', config)
+        self.assertEquals(config['IMPORTS'], True)
 
         with self.assertRaises(ImportError):
-            self.get_config(['--with-advanced=break'])
+            self.get_config(['--with-imports=break'])
 
     def test_imports(self):
         config = {}
         out = StringIO()
         sandbox = ConfigureSandbox(config, {}, [], out, out)
 
         with self.assertRaises(ImportError):
             exec(
@@ -329,38 +329,38 @@ class TestConfigure(unittest.TestCase):
             'def foo():\n'
             '    return s\n',
             sandbox
         )
 
         self.assertIs(sandbox['foo'](), sandbox)
 
     def test_os_path(self):
-        config = self.get_config(['--with-advanced=%s' % __file__])
+        config = self.get_config(['--with-imports=%s' % __file__])
         self.assertIn('IS_FILE', config)
         self.assertEquals(config['IS_FILE'], True)
 
-        config = self.get_config(['--with-advanced=%s.no-exist' % __file__])
+        config = self.get_config(['--with-imports=%s.no-exist' % __file__])
         self.assertIn('IS_FILE', config)
         self.assertEquals(config['IS_FILE'], False)
 
         self.assertIn('HAS_GETATIME', config)
         self.assertEquals(config['HAS_GETATIME'], True)
         self.assertIn('HAS_GETATIME2', config)
         self.assertEquals(config['HAS_GETATIME2'], False)
 
     def test_template_call(self):
         config = self.get_config(env={'CC': 'gcc'})
         self.assertIn('TEMPLATE_VALUE', config)
         self.assertEquals(config['TEMPLATE_VALUE'], 42)
         self.assertIn('TEMPLATE_VALUE_2', config)
         self.assertEquals(config['TEMPLATE_VALUE_2'], 21)
 
-    def test_template_advanced(self):
-        config = self.get_config(['--enable-advanced-template'])
+    def test_template_imports(self):
+        config = self.get_config(['--enable-imports-in-template'])
         self.assertIn('PLATFORM', config)
         self.assertEquals(config['PLATFORM'], sys.platform)
 
     def test_decorators(self):
         config = {}
         out = StringIO()
         sandbox = ConfigureSandbox(config, {}, [], out, out)