blob: 474a9196c48a88beafe9873735bbddb508f8933d [file] [log] [blame]
# 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 os, posixpath
from StringIO import StringIO
import unittest
from mozunit import main, MockedOpen
import mozbuild.backend.configenvironment as ConfigStatus
from mozbuild.util import ReadOnlyDict
import mozpack.path as mozpath
class ConfigEnvironment(ConfigStatus.ConfigEnvironment):
def __init__(self, *args, **kwargs):
ConfigStatus.ConfigEnvironment.__init__(self, *args, **kwargs)
# Be helpful to unit tests
if not 'top_srcdir' in self.substs:
if os.path.isabs(self.topsrcdir):
top_srcdir = self.topsrcdir.replace(os.sep, '/')
else:
top_srcdir = mozpath.relpath(self.topsrcdir, self.topobjdir).replace(os.sep, '/')
d = dict(self.substs)
d['top_srcdir'] = top_srcdir
self.substs = ReadOnlyDict(d)
d = dict(self.substs_unicode)
d[u'top_srcdir'] = top_srcdir.decode('utf-8')
self.substs_unicode = ReadOnlyDict(d)
class TestEnvironment(unittest.TestCase):
def test_auto_substs(self):
'''Test the automatically set values of ACDEFINES, ALLDEFINES,
ALLSUBSTS and ALLEMPTYSUBSTS.
'''
env = ConfigEnvironment('.', '.',
defines = [ ('foo', 'bar'), ('baz', 'qux 42'),
('abc', "d'e'f"), ('extra', 'foobar') ],
non_global_defines = ['extra', 'ignore'],
substs = [ ('FOO', 'bar'), ('FOOBAR', ''), ('ABC', 'def'),
('bar', 'baz qux'), ('zzz', '"abc def"'),
('qux', '') ])
# non_global_defines should be filtered out in ACDEFINES and
# ALLDEFINES.
# Original order of the defines need to be respected in ACDEFINES
self.assertEqual(env.substs['ACDEFINES'], """-Dfoo=bar -Dbaz='qux 42' -Dabc='d'\\''e'\\''f'""")
# ALLDEFINES, on the other hand, needs to be sorted
self.assertEqual(env.substs['ALLDEFINES'], '''#define abc d'e'f
#define baz qux 42
#define foo bar''')
# Likewise for ALLSUBSTS, which also mustn't contain ALLDEFINES
# but contain ACDEFINES
self.assertEqual(env.substs['ALLSUBSTS'], '''ABC = def
ACDEFINES = -Dfoo=bar -Dbaz='qux 42' -Dabc='d'\\''e'\\''f'
FOO = bar
bar = baz qux
zzz = "abc def"''')
# ALLEMPTYSUBSTS contains all substs with no value.
self.assertEqual(env.substs['ALLEMPTYSUBSTS'], '''FOOBAR =
qux =''')
if __name__ == "__main__":
main()